![]()
App Inventor开发
App Inventor 2
Android应用开发者(英语:App
Inventor)是一款卡通图形界面的Android智能手机应用程序开发软件。它起先由Google提供的应用软件,现在由麻省理工学院维护及营运。
借助IA2 建立一个简易的游戏手柄。因为AI2
的蓝牙串口通讯协议是基于SPP(Serial Port
Profile)串行端口配置。我们目的是并设定相对应代码,在手机发送,在树莓派解析,并对小车进行运动控制。
对应代码如下:
- u –> 前进 gofront() 
- d –> 后退 goback() 
- l –> 左转 turnleft() 
- r –> 右转 turnright() 
- s –> 停止 istop() 
每次代码运行周期为20ms
![]()
ai2截面图
![]()
树莓派蓝牙SPP设置
树莓派蓝牙配置
- 安装支持包 | 12
 
 | sudo apt-get install pi-bluetoothsudo apt-get install bluetooth bluez blueman
 
 |  
 
- 添加pi用户到蓝牙组 | 12
 
 | sudo usermod -G bluetooth -a piservice bluetooth status
 
 |  
 
- 启动/增加SPP | 1
 | sudo nano /etc/systemd/system/dbus-org.bluez.service
 |  
 
- 修改内容如下: | 12
 
 | ExecStart=/usr/lib/bluetooth/bluetoothd -CExecStartPost=/usr/bin/sdptool add SP
 
 |  
 
- 重启,启动蓝牙串口 
串口调试软件xgcom
| 12
 3
 4
 5
 6
 7
 
 | sudo git clone https://github.com/helight/xgcom.gitsudo  apt-get install make automake libglib2.0-dev libvte-dev libgtk2.0-dev
 cd xgcom
 sudo ./autogen.sh
 sudo make
 sudo make install
 xgcom
 
 | 
![]()
展示与控制代码
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 
 | import serialimport time
 from btbu_robot.motor import motor
 bluetooth = serial.Serial("/dev/rfcomm0",9600,timeout=0.5)
 
 
 left = motor(22, 27, 17)
 right = motor(24, 23, 18)
 def gofront():
 left.run(70)
 right.run(70)
 
 
 def goback():
 left.run(-70)
 right.run(-70)
 
 
 def turnleft():
 left.run(-70)
 right.run(70)
 
 
 def turnright():
 
 left.run(70)
 right.run(-70)
 
 def istop():
 left.run(0)
 right.run(0)
 
 
 status = ''
 if __name__ == '__main__':
 while True:
 data = bluetooth.readline().decode('utf-8')
 if status == 'u':
 gofront()
 
 elif status == 'd':
 goback()
 
 elif status == 'l':
 turnleft()
 
 elif status == 'r':
 turnright()
 
 elif status == 's':
 istop()
 while data != '':
 status = data[0]
 if status == 'u':
 gofront()
 
 elif status == 'd':
 goback()
 
 elif status == 'l':
 turnleft()
 
 elif status == 'r':
 turnright()
 
 elif status == 's':
 istop()
 data = data[1:]
 time.sleep(0.02)
 time.sleep(0.02)
 
 |