本帖最后由 johnrey 于 2016-6-28 12:24 编辑
这是nmg同志前面在第一篇里面提出的要求,说这两个家伙能不能和在一起玩。当时觉得用到了两个控制器,有点浪费。不过后来发现LinkNode引出的IO比较少,直接控制radio和显示也不显示,于是就想出了这个,用LinkNode来控制pyb,然后控制radio的想法。当然就是随便玩玩,框架如下:手机--(BLE)-->LinkNode--(uart)-->micropython
每次手机只能发送1个字符,共计5个有效字符,udlrp,分别代表上下左右和按键。其余归pyb处理。其实其他字符也一并转发,只是pyb会忽略而已。这个比较项目比较方便,直接clone原来的BLElight,修改以下就行了。更名为BLE2UART
手机对开发板的控制主要通过写入实现,一旦有手机写入操作,就会出发void WrittenHandler(const GattWriteCallbackParams *Handler)这个函数。在这个函数里面,最主要的操作就是先要去读取手机发过来的数据:ble.readCharacteristicValue(uartCharacteristic.getValueAttribute().getHandle(), buf, &bytesRead),然后转发到串口上,pc.putc(buf[0])。原来代码中的还有memset和memcpy,把buf的数据copy到uartdata里面,有啥用,不理解。实验不用这两句,程序运行正常。
memset(uartdata, 0, BLE2UART_BUF_LEN);
memcpy(uartdata, buf, BLE2UART_BUF_LEN);
测试比较顺利,手机发送,串口收到。最后这个串口指令通过串口发给pyb,进而控制下面的一系列的动作。那pyb的设计大家可以去以下地址看
https://bbs.eeworld.com.cn/thread-493565-1-1.html,这里就不重复了。
简单操作演示如下,先按下p开机,然后1s定时发送u,所以音量开始逐步增加。接着是用r和l分别控制向下切台和向上切台。最后定时1s发送d,音量渐减。最后按p,关机。上视频
main.cpp
main.cpp
(3.65 KB, 下载次数: 5)