在安卓下控制基于树莓派的小车 皆用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()


在安卓下控制基于树莓派的小车 皆用python实现,,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。