别问为什么标题又丑又长,就是怕你搜不到我。。。
Tello飞机应该是现在比S1,EP车稍微便宜点的玩具了,但是价格也还是很贵,尤其是EDU的版本,原来卖2500。我悟了,但是一直没有一个合适的遥控器,倒是有个蓝牙遥控器,但是100多的价格感觉好多人也不去买。。。我以前也写过遥控器的文章,也不知道多少人看。
当我有了一个航模遥控器以后,我就觉得有必要和我的Tello联姻~
I6X
那我们的主角就是这样滴!
得益于大疆对TT的开放,我们可以使用固定的协议来完成对TT的控制。
在SDK里面说过了连接方式了
而且还可以接收Tello的状态,所以这个信息也可以回传
因为Tello的图传也是WIFI的,然后控制它也是WIFI连接,所以图传现在就先放一下,后期可以会桥接吧。
然后现在就是实现,解锁开关,遥控器控制,这个是目前要实现的功能。因为我的接收机没有回传功能,所以这里就先不写回传的程序了。
https://github.com/Cleric-K/FlySkyRxFirmwareRssiMod
但是有一个项目可以让接收机有回传信号强度的能力,源码也给了。我研究一下自己写个固件。
这些是我们要写的命令
因为遥控器是FS的,它家的协议是IBUS,可惜大部分的无人机要的是FrsKy的SBUS。。。然后我就找了半天,买了A8S,可以输出SBUS也可以输IBUS。
就是这个了
注意它的输出模式的切换
因为遥控器的制作过程会有几个转换的过程,所以需要一个主控。
乐鑫家的芯片便宜,我有一堆。。。
Arduino也有一个,就是不知道放哪里了,而且它就一个硬件串口。用软件串口倒是也行,不过我找不到了。。。
就一个硬件串口
连接的示意图
但是可以使用普通的引脚模拟串口。
SoftwareSerial xxSerial(2,3);
xxSerial.begin(9600); //以9600波特率打开软串口
到现在为止,你有两个串口了,如果你愿意可以再搞几个串口,可是你使用的时候,你会发现好像用不了了。其实不是,用到哪个软串口,就在用之前加一个语句 XXX.listen()(XXXX是你自定义的软串口名字),也就是用到谁监听谁,不然不被监听的会失效。(从AVR角度讲,是没有定义模拟串口)
这是控制的框图
说下控制流程:
遥控器和接收机建立联系
接收机通过串口和主控连接
主控解算IBUS信号里面的通道信息
将通道信息通过主控串口给ESP8266
ESP8266通过WIFI和TT建立连接
使用UDP发送RC控制信息
我们需要两个串口:一个是连接接收机的IBUS信号端,一个是连接ESP8266.
好了,我们在编码之前需要做一个准备,要准备一个解码IBUS信号的库~
https://github.com/bmellink/IBusBM
开源的位置
Arduino内直接下载安装
该库支持基于 AVR 的 Arduino 板(Arduino MEGA、UNO、Nano、Micro 等)、基于 ESP32 的板(ESP32、NodeMCU 等)、STM32 板(STM32F103 等)、MBED(例如 Arduino NANO 33 BLE) 和 MegaAVR。
iBUS 库需要 Arduino 板上的专用硬件串行 (UART) 端口。如果主板只有一个 UART 端口,你仍然可以使用该端口与您的 PC 进行串行调试通信,只要打算仅使用伺服输出模式(波特率将固定为 115200 波特,应该只连接 UART TX针到 USB 串行转换器)。
具体内部的实现一角
可以看源码库
使用的时候需要引入IBUS的解码库
ESP32做主控
ESP8266做WIFI连接飞机
首先是ESP32的程序
程序用于与 RC 接收器通信并将数据从通道数据发送到 ESP8266。它不断地从接收器读取RC 通道;然后使用格式将其序列化为字符串>channelNumber:value;最后通过与 ESP8266 的串行接口发送。它还从串行读取消息。它们可以是调试或数据消息。两种类型的数据消息是电池电量和温度水平。它们都作为遥测传感器发送回 RC 接收器。
要将代码上传到 Arduino Mega + ESP8266,您需要将开关设置为 (1: on, 2: on, 3: on, 4: on, 5: off, 6: off, 7: off, 8: off) .
下载ESP32Servo和IBusBM
编译一次,正常