在安卓下控制基于树莓派的小车 皆用python实现

来源:互联网 发布:mac硬盘清理工具 编辑:程序博客网 时间:2024/05/21 06:36

参照了lessisawesome的文章,http://blog.csdn.net/maninbehind/article/details/9715137


小车端(即树莓派),记得装RPI GPIO python

import RPi.GPIO as GPIO  #GPIO package  from socket import *  import sys  import time  #import car  # for example# GPIO.setmode(GPIO.BOARD) #set mode  # GPIO.setup(13, GPIO.OUT) #set gpio in or out  # GPIO.setup(15, GPIO.OUT) #set gpio in or out    # GPIO.output(13, GPIO.HIGH) #set out HIGH or LOW# GPIO.output(15, GPIO.LOW) #set out HIGH or LOWclass Wheel:      pins ={'a':[13,15],'b':[16,18],'c':[19,21],'d':[22,24]}# four (wheel-gpio prot)   dict     def __init__(self,name):          self.name = name          self.pin = Wheel.pins[self.name]          GPIO.setmode(GPIO.BOARD)          GPIO.setup(self.pin[0],GPIO.OUT)          GPIO.setup(self.pin[1],GPIO.OUT)          self.stop()      def forward(self):          GPIO.output(self.pin[0],GPIO.HIGH)          GPIO.output(self.pin[1],GPIO.LOW)      def stop(self):          GPIO.output(self.pin[0],False)          GPIO.output(self.pin[1],False)      def back(self):          GPIO.output(self.pin[0],False)          GPIO.output(self.pin[1],True)  class Car:       wheels=[Wheel('a'),Wheel('b'),Wheel('c'),Wheel('d')]       @staticmethod      def init():          GPIO.setmode(GPIO.BOARD)      @staticmethod      def forward():          for wheel in Car.wheels:              wheel.forward()      @staticmethod      def back():          for wheel in Car.wheels:              wheel.back()        @staticmethod      def left():          Car.wheels[0].forward()           Car.wheels[1].forward()          Car.wheels[3].back()          Car.wheels[2].back()      @staticmethod      def right():          Car.wheels[2].forward()           Car.wheels[3].forward()          Car.wheels[0].back()          Car.wheels[1].back()      @staticmethod      def stop():          Car.wheels[0].stop()           Car.wheels[1].stop()           Car.wheels[3].stop()          Car.wheels[2].stop()  #########################################################  commands ={'forward':Car.forward,    'back':Car.back,     'stop':Car.stop,    'left':Car.left,    'right':Car.right  }    def execute(command):         print command      commands[command]()    HOST ='10.1.1.190' #the ip of rapberry pi  PORT = 8888  s= socket(AF_INET, SOCK_STREAM)  s.bind((HOST, PORT))  s.listen(1)  print ('listening on 8888')  while 1:      conn, addr = s.accept()      print ('Connected by:', addr)      while 1:              command= conn.recv(1024).replace('\n','')              if not command:break              execute(command)      conn.close()  



手机端,记得装qpython这个python环境

#-*- coding:utf-8 -*-import kivyfrom kivy.lang import Builderfrom kivy.uix.gridlayout import GridLayoutfrom kivy.app import Appfrom kivy.uix.widget import Widgetfrom kivy.uix.button import Buttonfrom socket import * host = '10.1.1.190'port = 8888bufsiz =1024addr = (host, port)def SendComand(cmd):s=socket(AF_INET, SOCK_STREAM)s.connect(addr)s.send(cmd)s.closeBuilder.load_string('''<CarControlScreen>:    cols: 1    Button:        text: 'forward'        on_release: root.forward()Button:        text: 'back'        on_release: root.back()    Button:        text: 'left'        on_release: root.left()    Button:        text: 'right'        on_release: root.right()    Button:        text: 'stop'        on_release: root.stop()''')class CarControlScreen(GridLayout):    def left(self): print "Left"SendComand('left')    def right(self): print "Right"SendComand('right')    def forward(self): print "forward"SendComand('forward')    def back(self): print "back"SendComand('back')    def stop(self): print "Stop"SendComand('stop')class myApp(App):    def build(self):return CarControlScreen()     if __name__ == '__main__':    myApp().run()


1 0
原创粉丝点击