给DJITello加个航模遥控器吧~

原创 云深之无迹 2023-01-24 13:24

我在很久以前写过一个几乎重合的帖子,但是我觉得当时的我太年轻了,很多东西没有写明白,而一年后我决定重新搞一下这个东西。

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

红红火火的DJI官网

怎么说呢,EDU版本有个ESP32的扩展模块,现在下载的SDK文档里面没有这部分内容了。

我不妨大胆的想想这个问题,DJI确实是做出来了牛逼的东西,但是面向用户的话,用户不太行,玩不转。(本身产品也是毛病星星点点的,有些也不能克服)

最后DJI索性,玩尼玛,桌子都给你掀了:

乌鸦哥真帅啊

。。。我土狗了,原来在后面有这部分内容,上面是我辛苦写的,就不删除了

搞错了

害,有个教育群是有些人希望推出教育产品的无刷版本,对的,现在TT的最大问题就是续航和动力问题,其它的都很棒。

害,无所谓啦~想以前我还差点变成大疆的KOL,妈的,我自己不争气,不搞视频,写文章谁看啊!(鄙人技术垃圾也是个问题,hhhhh,都可以补足了)

对的,机会就悄悄的溜走了

DJI的无人机,除了手机应用以外,还有一个是蓝牙的手柄,害,我也买了,用不明白了。。。

所以最大的问题就是作为一个小航模,没有一个航模遥控器来控制。

TT在拆下扩展模块的时候,使用的WIFI链路+UDP控制,在加扩展模块下,控制的样子和上面大同小异,不过是扩展和飞机之间通讯是串口:

官方有张图,很漂亮

那这个项目就是使用普通RC接收机+遥控器来完成TT。

其实实现起来很简单,就两个代码而已,但是我觉得没有意思。要搞明白写咋写出来的。

你要问我为什么不自己写,那抱歉,我是个菜狗

FlySky的接收机要用一个串口,ESP8266的控制需要用一个串口,必须要用的两个串口,但是通讯程序需要调试,所以还需要一个串口,iBUS还支持信息遥测,所以还可以用一个串口。

而且还要ESP8266要网络支持,所以可以找到这一款硬件,串口+ESP8266的合体。

网上可以买到的就是这个了,但有点贵。。。

其实就单纯的控制来讲,其实一个ESP8266+RC就可以了~

WeMOS Mega

而且上面通过拨码开关,来开启各个芯片之间的连接

如果有板子的,我也给出Pin图

那有人想要原理图,我也有,牛逼不?从俄罗斯搞得~

还不夸我

ESP8266有两个串口

2 个 UART 接⼝的数据传输均由硬件实现。数据传输速度可达 115200*40 (4.5 Mbps)。UART0 可以⽤做通信接⼝,⽀持流控。由于 UART1 ⽬前只有数据传输功能,所以⼀般⽤作打印 log。

这个是编码开关的连接方式

Tello 公开了一个接收命令的 UDP 端口和另一个公开统计信息的端口。ESP8266 模块会先连接到 Tello 建立的WIFI,并发送command消息以稳定通信。

一个通道(遥控器通道)用作起飞和降落的开关。起飞后,使用rc指令连续控制无人机,同时发送所有 4 个通道(左/右、前/后、上/下和偏航)。

这些在源码中都会有体现。

ATmega2560 和 ESP8266 模块之间的通信是通过其中一个串行端口进行的。我选择使用基于文本的通信,只是为了更容易在两个模块之间来回发送数据和调试消息。

这就是我们的控制方式了

我们就要这些说明,不要挑战卡

我是没有接触过网络编程的,这个需要补一个UDP编程。

https://arduino-esp8266.readthedocs.io/en/latest/esp8266wifi/udp-examples.html

这里推荐自带的教程

创建一个WiFiUDP对象。然后指定一个端口来监听传入的数据包。最后,我们需要为传入的数据包设置缓冲区并定义回复消息。

推荐这个开源的调试软件

8266中,UDP只有12个函数

函数用法在这里:

uint8_t begin(uint16_t p)uint8_t begin(IPAddress a, uint16_t p)

启动监听某个端口,或者来自某地址发送给某端口的数据;

void stop()

停止监听,释放资源;

int beginPacket()

准备发送数据包(仅在运行parsePacket()方法且返回值大于0时可用);

int beginPacket(IPAddress ip, uint16_t port)

准备发送数据包,参数分别为目标IP和目标端口号;

size_t write(uint8_t)size_t write(const uint8_t *buffer, size_t size)

复制数据到发送缓存(同一数据包发送缓存最大1460字节);

int endPacket()

发送数据;

int parsePacket()

获取接收数据信息,如果有数据包可用,则返回队首数据包长度,否则返回0;

int read()

读取首字节数据(仅在运行parsePacket()方法且返回值大于0时可用);

int read(unsigned char* buffer, size_t len)int read(char* buffer, size_t len)

读取数据(仅在运行parsePacket()方法且返回值大于0时可用);

int peek()

读取首字节数据,但并不从接收缓存中删除它(仅在运行parsePacket()方法且返回值大于0时可用);

void flush()

清空当前接收缓存(仅在运行parsePacket()方法且返回值大于0时可用);

IPAddress remoteIP()

返回远端地址(仅在运行parsePacket()方法且返回值大于0时可用);

uint16_t remotePort()

返回远端端口号(仅在运行parsePacket()方法且返回值大于0时可用);

因为频繁的使用到串口,这里也说一下串口的使用,ESP8266的串口可以使用特殊优化过的库:

https://github.com/plerup/espsoftwareserial
实现了中断服务例程的最佳实践。在接收中断中,不是一次阻塞整个字节—使 CPU 的任何近实时行为无效——只记录电平变化和时间戳。比较耗时的相位检测和字节组装在主代码中完成。
除了高比特率,取决于其他正在进行的活动,特别是中断,此软件串行适配器支持全双工接收和发送。SoftwareSerial::enableIntTx(false)在高比特率 (115200bps) 下,可以通过函数调用以阻塞并发全双工接收为代价来改进发送比特时序。
与相应的 AVR 库具有相同的功能,但可以同时激活多个实例。支持高达 115200 波特的速度。除了与 AVR SoftwareSerial 类兼容的构造函数和不带参数的更新构造函数外,该begin() 函数还可以处理引脚分配和逻辑反转。它还具有用于字节缓冲区和 ISR 位缓冲区的可选输入缓冲区容量参数。这样,它就可以更好地替代 ESP MCU 上的硬件串行 API。请注意,由于 ESP 总是有其他活动正在进行,因此中断时序会有些不准确。当以高波特率传输大量数据时,这可能会导致不可避免但很少的位错误。该库支持 ESP8266、ESP32、ESP32-S2 和 ESP32-C3 设备。

如果你的硬件串口不够用的话,可以考虑使用IO来模拟UART:

传统的SoftwareSerial 库具有以下已知限制:

1.它不能同时发送和接收数据。
2.如果使用多个软件串口,一次只能接收一个数据。
在Arduino 1.0的之前,内置的库是上面这个库,但是对中断支持不好,甚至说就是没有支持,后面有大佬重写了SoftSerial:
它引入了中断驱动的接收——对本机 SoftwareSerial 所需的轮询进行了显着改进。
如果没有中断,程序设计将受到相当大的限制,因为它必须以非常短的时间间隔连续轮询串行端口,这使得它几乎不可能。
例如,使用 SoftwareSerial 来接收 GPS 数据并将其解析为可用的形式。当 NMEA 字符到达时,程序正忙于跟上它们,而无暇实际花时间将它们组装成有意义的东西。这就是 AFSoftSerial(和NewSoftSerial的)中断架构的天赐之物。使用中断驱动的 RX,程序在处理先前接收到的数据时会在后台填充其缓冲区。
http://arduiniana.org/NewSoftSerial/NewSoftSerial12.zip

这个是库的直接下载位置,可以去读源码

具体的API就不罗列了:

https://blog.csdn.net/poisonchry/article/details/116503393

这篇写的很好了

我们这里还缺一个RC的知识铺垫:

用于 Flysky/Turnigy RC iBUS 协议的 Arduino 库 - 使用硬件 UART 的伺服(接收)和传感器/遥测(发送)。
iBUS 协议是 Flysky 开发的一种半双工协议,用于使用一条数字线控制多个舵机和电机。每个伺服通道接收到的值在 1000(十六进制 eE8)和 2000(十六进制 7D0)之间,具有中性子微调设置,这与大多数伺服的脉冲宽度(以微秒为单位)相对应。该协议还可以连接传感器,将遥测信息发送回 RC 收发器。

TR的遥控器还挺丑的

官网上面早就没有了AFHDS2的协议内容,不过互联网是有记忆的:

这个是2代的协议

逻辑分析仪的数据

AFHDS 一代协议(FlySky),至于一代的协议在这里。

官方又放出了富斯AFHDS3 ibus 协议通道数据格式如下:
3.3V UART 115200 bauds, 8 bits, 2 stop bits with no parity serial link

可以读一下

整个通讯链路的话就是这样

我们需要两份代码,一份处理RC,一份负责遥测以及将RC通道的信息解码到UDP使用WIFI发射出去。

我们先看RC部分:

https://github.com/bmellink/IBusBM

使用这个库来解码

该代码用于与 RC 接收器通信,并将数据从通道数据发送到 ESP8266。它不断地从接收器读取 RC 通道;然后将其序列化为具有格式的字符串:

>channelNumber:value

这个是序列化的代码

最后通过ESP8266串口发送。它还从串口读取消息。它们可以是调试或数据消息。两种类型的数据消息是电池电量和温度水平。它们都作为遥测传感器发送回 RC 接收器。

我们建立RC和信息遥测两个对象,以及使用了Mega的4个串口

就打印信息,可以波特率不高,信息回调也打开了

可以遥测的数据

在前面调试的时候开一个串口,将解码出来的数据打印出去,获得的是第几个通道的值是多少。

SerialEvent()函数。函数将在loop()中自动被内部调用。在我们写的代码中如果串口有任何数据(只要不是换行符),那么就将数据加到一个缓存字符串中。在收到换行符时就返回缓存字符串。发送后将会将字符串清空为null。

这个有点回调的感觉,但是又感觉不是:

三串口是信息回调串口:然后一直读到换行,如果里面有


接下来的代码用于使用 UDP API 通过端口 8889 向 Tello 发送消息。它基本上使用 4 个命令:command- 稳定通信。takeoff- 起飞。它由频道 5 上的 RC 发射器开关控制。land- 着陆。它也由通道 5 开关控制。rc- 发送每个方向的控制。

硬件的连接,和IP+控制端口+信息端口

打印的信息用类来包装

应该写的够详细了吧

连接WIFI到Tello,并且发送控制命令。

模块有三种模式:

1:STA 模式:ESP8266模块通过路由器连接互联网,手机或电脑通过互联网实现对设备的远程控制。

2:AP 模式:ESP8266模块作为热点,实现手机或电脑直接与模块通信,实现局域网无线控制。

3:STA+AP 模式:两种模式的共存模式,即可以通过互联网控制可实现无缝切换,方便操作。

发送的命令的时候随便打印在终端上面

和Tello的通讯

SDK3.0

SDK2.0

这个代码来处理这个字符串

这个从UDP 端口 8890 读取统计数据。这些统计数据被序列化为一个字符串,其中包含几个不同的键和值,由“;”分隔。此代码解析此字符串,并选择电池和温度。它从串行接口读取 RC 通道并将统计数据写回。

这个是自编码的,在从缓冲区取到的字符串插入:/0,末尾有EOF的时候停止,开始插入,不停的插入:;,来分割字符串。

其实就是键值对拆分,妈的,写Python久了看着这东西还有点害怕

最后把解码的值装载到Tello的状态类里面

这个代码是从UDP口取到信息,和上面的代码运行的时候有顺序区别

上面的数组,就是为了确定状态,这个是工具函数,来处理摇杆的数据

这个是拨钮开关和三段式开关,控制飞行起落的

这个就是我们心心念念的RC函数了,写入到cmd,然后UDP发送

一些前置准备

这里就是和RC遥控器的纠葛了

把取到的字符串开始拆解:

>channelNumber:value

读到>的时候,开始取出通道后面的值。后面也有一段终端的打印代码。

这个是快速的打印电池和温度的信息,也可以自己加wifi强度等信息。

如果要起飞的话,就发送,也会检查降落情况,顺便油门全关。

之后就是发送RC控制了。

不知不觉写了这么多,受益匪浅了,睡觉去了~

视频演示稍后附上。

小彭同学的摄影技术越来越(๑•̀ㅂ•́)و✧

欢迎领取

https://terra-1-g.djicdn.com/2d4dce68897a46b19fc717f3576b7c6a/Tello%20%E7%BC%96%E7%A8%8B%E7%9B%B8%E5%85%B3/For%20Tello/Tello%20SDK%20Documentation%20EN_1.3_1122.pdf
https://arduino-esp8266.readthedocs.io/en/latest/libraries.html
https://www.arduino.cc/reference/en/libraries/wifi/
https://github.com/espressif/arduino-esp32/tree/master/libraries/WiFi
http://arduiniana.org/libraries/newsoftserial/
https://blog.csdn.net/m0_61543203/article/details/126706199
https://blog.csdn.net/m0_51220742/article/details/123568721?spm=1001.2014.3001.5501
https://blog.csdn.net/m0_51220742/article/details/123791062
https://github.com/espressif/arduino-esp32/tree/master/libraries/WiFihttps://github.com/espressif/arduino-esp32/tree/master/libraries/AsyncUDP
https://packetsender.com/
https://forum.arduino.cc/t/mega-wifi-r3-atmega2560-esp8266-8-mb-memoire/446340/12
https://www.instructables.com/Arduino-MEGA-2560-With-WiFi-Built-in-ESP8266/
https://www.amazon.it/ATmega2560-ESP8266-USB-TTL-NodeMCU-Arduino/dp/B07HML8DZD
https://github.com/werneckpaiva/telloRC
https://github.com/esp8266/Arduino
https://terra-1-g.djicdn.com/851d20f7b9f64838a34cd02351370894/RM-TT/RoboMaster%20TT%20Arduino%20IDE%20%E4%BD%BF%E7%94%A8%E8%AF%B4%E6%98%8E.pdf
https://dl.djicdn.com/downloads/RoboMaster%20TT/Tello_SDK_3.0_User_Guide_cn.pdf
https://github.com/tianbot/rmtt_ros
https://www.dji.com/cn/robomaster-tt/downloads
https://login.squarespace.com/api/1/login/oauth/provider/authorize?client_id=qNgYXXcY8Fa8M&redirect_uri=https%3A%2F%2Fflysky.squarespace.com%2Fauth%2Foauth%2Fconnect%3FdestinationUrl%3Dhttps%253A%252F%252Fflysky.squarespace.com%252Fconfig%252F%253FframeUrl%253D%252Fchinese-blog-1%252F2019%252F9%252F28%252Fafhds3-ibus-&state=1%3A1674458861%3AtrpJciNyjaO3jrl3EHDMTFPuKwVuHAQ08JV%2Fg9QF9tE%3D&overrideLocale=en-US&options=%7B%22isCloseVisible%22%3Afalse%2C%22isCreateAccountViewActive%22%3Afalse%7D

评论 (0)
  •   电磁数据管理系统深度解析   北京华盛恒辉电磁数据管理系统作为专业的数据处理平台,旨在提升电磁数据的处理效率、安全性与可靠性。以下从功能架构、核心特性、应用场景及技术实现展开分析:   应用案例   目前,已有多个电磁数据管理系统在实际应用中取得了显著成效。例如,北京华盛恒辉和北京五木恒润电磁数据管理系统。这些成功案例为电磁数据管理系统的推广和应用提供了有力支持。   一、核心功能模块   数据采集与接入:实时接收天线、频谱仪等设备数据,兼容多协议接口,确保数据采集的全面性与实时性
    华盛恒辉l58ll334744 2025-05-13 10:59 113浏览
  • 递交招股书近一年后,曹操出行 IPO 进程终于迎来关键节点。从 2024 年 4 月首次递表,到 2025 年 4 月顺利通过中国证监会境外发行上市备案,并迅速更新招股书。而通过上市备案也标志着其赴港IPO进程进入实质性推进阶段,曹操出行最快有望于2025年内完成港股上市,成为李书福商业版图中又一关键落子。行路至此,曹操出行面临的挑战依然不容忽视。当下的网约车赛道,早已不是当年群雄逐鹿的草莽时代,市场渐趋饱和,竞争近乎白热化。曹操出行此时冲刺上市,既是背水一战,也是谋篇布局。其招股书中披露的资金
    用户1742991715177 2025-05-10 21:18 95浏览
  • ‌磁光克尔效应(Magneto-Optic Kerr Effect, MOKE)‌ 是指当线偏振光入射到磁性材料表面并反射后,其偏振状态(偏振面旋转角度和椭偏率)因材料的磁化强度或方向发生改变的现象。具体表现为:1、‌偏振面旋转‌:反射光的偏振方向相对于入射光发生偏转(克尔旋转角 θK)。2、‌椭偏率变化‌:反射光由线偏振变为椭圆偏振(克尔椭偏率 εK)。这一效应直接关联材料的磁化状态,是表征磁性材料(如铁磁体、反铁磁体)磁学性质的重要非接触式光学探测手段,广泛用于
    锦正茂科技 2025-05-12 11:02 233浏览
  • 在 AI 浪潮席卷下,厨电行业正经历着深刻变革。AWE 2025期间,万得厨对外首次发布了wan AiOS 1.0组织体超智能系统——通过AI技术能够帮助全球家庭实现从健康检测、膳食推荐,到食材即时配送,再到一步烹饪、营养总结的个性化健康膳食管理。这一创新之举并非偶然的个案,而是整个厨电行业大步迈向智能化、数字化转型浪潮的一个关键注脚,折射出全行业对 AI 赋能的热切渴求。前有标兵后有追兵,万得厨面临着高昂的研发成本与技术迭代压力,稍有懈怠便可能被后来者赶
    用户1742991715177 2025-05-11 22:44 161浏览
  •   定制软件开发公司推荐清单   在企业数字化转型加速的2025年,定制软件开发需求愈发多元复杂。不同行业、技术偏好与服务模式的企业,对开发公司的要求大相径庭。以下从技术赛道、服务模式及行业场景出发,为您提供适配的定制软件开发公司推荐及选择建议。   华盛恒辉科技有限公司:是一家专注于高端软件定制开发服务和高端建设的服务机构,致力于为企业提供全面、系统的开发制作方案。在部队政企开发、建设到运营推广领域拥有丰富经验,在教育,工业,医疗,APP,管理,商城,人工智能,部队软件、工业软件、数字化转
    华盛恒辉l58ll334744 2025-05-12 15:55 264浏览
  • 【拆解】+CamFi卡菲单反无线传输器拆解 对于单反爱好者,想要通过远程控制自拍怎么办呢。一个远程连接,远程控制相机拍摄的工具再合适不过了。今天给大伙介绍的是CamFi卡菲单反无线传输器。 CamFi 是专为数码单反相机打造的无线传输控制器,自带的 WiFi 功能(无需手机流量),不但可通过手机、平板、电脑等设备远程连接操作单反相机进行拍摄,而且还可实时传输相机拍摄的照片到 iPad 和电视等大屏设备进行查看和分享。 CamFi 支持大部分佳能和尼康单反相机,内置可充电锂离子电池,无需相机供电。
    zhusx123 2025-05-11 14:14 275浏览
  •         信创产业含义的“信息技术应用创新”一词,最早公开信息见于2019年3月26日,在江苏南京召开的信息技术应用创新研讨会。本次大会主办单位为江苏省工业和信息化厅和中国电子工业标准化技术协会安全可靠工作委员会。        2019年5月16日,美国将华为列入实体清单,在未获得美国商务部许可的情况下,美国企业将无法向华为供应产品。       2019年6
    天涯书生 2025-05-11 10:41 175浏览
  •   电磁数据展示系统平台解析   北京华盛恒辉电磁数据展示系统平台是实现电磁数据高效展示、分析与管理的综合性软件体系,以下从核心功能、技术特性、应用场景及发展趋势展开解读:   应用案例   目前,已有多个电磁数据展示系统在实际应用中取得了显著成效。例如,北京华盛恒辉和北京五木恒润电磁数据展示系统。这些成功案例为电磁数据展示系统的推广和应用提供了有力支持。   一、核心功能模块   数据采集与预处理   智能分析处理   集成频谱分析、时频变换等信号处理算法,自动提取时域频域特征;
    华盛恒辉l58ll334744 2025-05-13 10:20 127浏览
  • 体积大小:14*11*2.6CM,电气参数:输入100V-240V/10A,输出16V24A。PCB 正面如下图。PCB 背面如下图。根据实际功能可以将PCB分成几部分:EMI滤波,PFC电路,LLC电路。EMI滤波区域,两级共模电感,LN各用了保险丝加压敏电阻,继电器(HF32FV-G)用来切除NTC的,为了提高效率点,如下图。PFC电路区域,如下图。LLC电路区域,如下图。详细分析一下该电源用的主要IC还有功率器件。AC侧采用了两颗整流桥进行并联,器件增加电流应力,如下图。共模电感都有放电针
    liweicheng 2025-05-10 20:03 136浏览
  •   基于 2025 年行业权威性与时效性,以下梳理国内知名软件定制开发企业,涵盖综合型、垂直领域及特色技术服务商:   华盛恒辉科技有限公司:是一家专注于高端软件定制开发服务和高端建设的服务机构,致力于为企业提供全面、系统的开发制作方案。在部队政企开发、建设到运营推广领域拥有丰富经验,在教育,工业,医疗,APP,管理,商城,人工智能,部队软件、工业软件、数字化转型、新能源软件、光伏软件、汽车软件,ERP,系统二次开发,CRM等领域有很多成功案例。   五木恒润科技有限公司:是一家专业的部队信
    华盛恒辉l58ll334744 2025-05-12 16:13 205浏览
  • 【拆解】+自动喷香机拆解 家里之前买了从PDD买了一个小型自动喷香机放在厕所里。来增加家里的温馨感,这东西看着确实小巧,精致。可是这东西吧,耗电就是快,没过几天就没电了。今个就让我拆开看看什么在捣鬼。如下是产品的实物和宣传图: 由于螺丝孔太小和限位很深。对于我的螺丝刀套装没用。只能使用那种螺丝刀细头,同时又长的小螺丝刀进行拆解 拧下三颗螺丝钉,用一字螺丝刀撬开外壳,内部结构就呈现在眼前。 内部构造相当简单,部件没多少。就是锂电池供电,通过MCU实现按键控制,段码屏控制,LE
    zhusx123 2025-05-10 19:55 133浏览
  • 在印度与巴基斯坦的军事对峙情境下,歼10C的出色表现如同一颗投入平静湖面的巨石,激起层层涟漪,深刻印证了“质量大于数量”这一铁律。军事领域,技术优势就是决定胜负的关键钥匙。歼10C凭借先进的航电系统、强大的武器挂载能力以及卓越的机动性能,在战场上大放异彩。它能够精准捕捉目标,迅速发动攻击,以一敌多却毫不逊色。与之形成鲜明对比的是,单纯依靠数量堆砌的军事力量,在面对先进技术装备时,往往显得力不从心。这一现象绝非局限于军事范畴,在当今社会的各个领域,“质量大于数量”都已成为不可逆转的趋势。在科技行业
    curton 2025-05-11 19:09 211浏览
  • 在全球供应链紧张和国产替代需求推动下,国产存储芯片产业快速发展,形成设计到封测一体化的完整生态。北京君正、兆易创新、紫光国芯、东芯股份、普冉股份和佰维存储等六大上市公司在NOR/NAND Flash、DRAM、嵌入式存储等领域布局各具特色,推动国产替代提速。贞光科技代理的品牌紫光国芯,专注DRAM技术,覆盖嵌入式存储与模组解决方案,为多领域客户提供高可靠性产品。随着AI、5G等新兴应用兴起,国产存储厂商有望迎来新一轮增长。存储芯片分类与应用易失性与非易失性存储芯片易失性存储芯片(Volatile
    贞光科技 2025-05-12 16:05 116浏览
我要评论
0
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦