在树莓派3b上接收xbox one 蓝牙手柄数据


——智能小车

因为校赛要求要制作一个智能小车,得有遥控功能,综合权衡了各种遥控方式,如web端,app,发现持续性和操作维度很少,于是选择了我的xbox蓝牙手柄(在查资料的时候还发现树莓派将GPIO的串口分配给了蓝牙,也就是说不能公用GPIO串口和蓝牙,于是选择了使用usb线连接arduino)


在Google使用中文关键词搜索了n次没有发现什么有用的数据,于是使用英文关键词检索到了大量可用数据(还是好好学英文吧),在GitHub上也找到了不少轮子可以直接用的

需要注意的是树莓派直接连接蓝牙是不可行的,会提示无可用服务,在查到的资料看来,需要这样操作https://github.com/erviveksoni/xbox-raspberrypi-rover还有这个https://github.com/atar-axis/xpadneo/tree/master/docs

按xpadneo的readme连接成功后手柄会震动提示

连接成功后就在Python中可以使用pygame包里面的joysitck读取手柄数据了(有点奇怪的就是那个🎮的方向按键没有被读取到QAQ)

还要吐槽一下手柄的数据,这个极限值有点不对劲啊,摇杆向左极限是-1,向右却只有0.998xxxxxx,更奇怪的是好几个轴的极限值都是一样的,不知道巨硬是怎么想的

这里还贴几个开发中遇到的小坑,由于上位机树莓派接收遥控数据然后通过USB串口传给下位机Arduino,在开发过程中有三个问题

一个是我在Arduino IDE发数据是完全没有问题的,用pyserial给Arduino发数据却出现了不识别的情况,多次试验后发现这是因为pyserial发送速度过快,发送的多个字符串被当成一个串处理,解决方法是加一个发送延时

另一个就是发送数据的编码问题,Python中一般是utf8编码,而Arduino却是ASCII,所以发送的类型应该是ASCII的bytes数据

还有一个是我在最后遥控的时候发现,每当遥控正常操作一段时间,都会出现卡顿,原因是serial的print速度太慢,大量数据卡在缓存导致Arduino运行慢,删掉serial.print即可

有时间传一波整车图片叭(遥控手感真心不错

- The End -