在安卓下控制基于树莓派的小车 皆用python实现
参照了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 LOW class 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 kivy from kivy.lang import Builder from kivy.uix.gridlayout import GridLayout from kivy.app import App from kivy.uix.widget import Widget from kivy.uix.button import Button from socket import * host = ‘10.1.1.190‘ port = 8888 bufsiz =1024 addr = (host, port) def SendComand(cmd): s=socket(AF_INET, SOCK_STREAM) s.connect(addr) s.send(cmd) s.close Builder.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()
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。