zl程序教程

您现在的位置是:首页 >  其他

当前栏目

FlySky+A8S(SBUS接收机)+ESP8266控制大疆Tello无人机.准备

2023-03-15 22:03:33 时间

别问为什么标题又丑又长,就是怕你搜不到我。。。

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也有一个,就是不知道放哪里了,而且它就一个硬件串口。用软件串口倒是也行,不过我找不到了。。。

就一个硬件串口

连接的示意图

但是可以使用普通的引脚模拟串口。

#include <SoftwareSerial.h>
SoftwareSerial xxSerial(2,3);
xxSerial.begin(9600);  //以9600波特率打开软串口

到现在为止,你有两个串口了,如果你愿意可以再搞几个串口,可是你使用的时候,你会发现好像用不了了。其实不是,用到哪个软串口,就在用之前加一个语句 XXX.listen()(XXXX是你自定义的软串口名字),也就是用到谁监听谁,不然不被监听的会失效。(从AVR角度讲,是没有定义模拟串口)

这是控制的框图

说下控制流程:

  1. 遥控器和接收机建立联系
  2. 接收机通过串口和主控连接
  3. 主控解算IBUS信号里面的通道信息
  4. 将通道信息通过主控串口给ESP8266
  5. ESP8266通过WIFI和TT建立连接
  6. 使用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

编译一次,正常