RoboMaster TT 无人机microPython编程.2

还记得我们说的读取上次的状态吗,这个就是所有上次的状态

print(protocol.getTelloStatusWithName("temph")) print(protocol.getTelloMsgInt("[TELLO] mid?",1000))

一个方法是打印我们上次的状态里面 的子项

一个是单纯的发送命令

pitch:%d;roll:%d;yaw:%d;vgx:%d;vgy%d;vgz:%d;templ:%d;temph:%d;tof:%d;h:%d;bat:%d;baro:%f;\r\n

其实状态一次会返回这么多,只不过是我们对其中感兴趣的进行抽取

在SDK里面标有mid的命令需要搭配挑战卡一起使用

我们来看发送命令和相关的一些内容

protocol.sendTelloCtrlMsg("go "+str(int(50))+" "+str(int(50))+" "+str(int(0))+" "+str(int(100))) uart1.write("DIY yyy") print(protocol.getTelloMsgString("[TELLO] sn?",1000)) while not (protocol.getTelloResponseString(1000)=="DIY T"):
 protocol.sendTelloCtrlMsg()

这种的叫控制命令的发送

int RMTT_Protocol::sendTelloCtrlMsg(char *cmd_str){ re_cnt = 0; while (true) { while (Serial1.available()) { Serial1.read(); } Serial1.printf("[TELLO] Re%02x%02x %s", re_tag, re_cnt++, cmd_str); // Serial.printf("[TELLO] Re%02x%02x %s", re_tag, re_cnt++, cmd_str); long oldtime = millis(); while (!Serial1.available()) { long newtime = millis(); if ((newtime - oldtime) > 1000) { Serial1.printf("[TELLO] Re%02x%02x %s", re_tag, re_cnt++, cmd_str); // Serial.printf("[TELLO] Re%02x%02x %s", re_tag, re_cnt++, cmd_str); oldtime = newtime; } }
String back; while (Serial1.available()) { back += String(char(Serial1.read())); }
// ETT Re[tag][id] ok/error // ETT Rexxxx ok/error // Serial.printf(back.c_str()); if (back.length() >= 12) { if ((back.c_str()[11] == 'o') && ((back.c_str()[12] == 'k'))) { break; } } else { delay(100); } } re_tag++; return 0;}

python的找不到了,可以找一个C++的版本。

死循环的话就是不停的发送里面的命令,此处我们需要发送俩类:

  1. 发给TT本身的

  2. 发给扩展件的

发送给TT的命令,又分为两种:

  1. 发送成功的

  2. 发送失败的

这个地方有点没有看懂,如果是串口有了字符,便读取

接下来是一个打印,其实这里看写法是,一个是debug用的

对于扩展件来说,打印就是给下面的接收器发送

Serial1.printf("[TELLO] Re%02x%02x %s", re_tag,              re_cnt++,               cmd_str);

上面中间的这个re我看不懂

这个是格式

这里是一段读取失败的处理代码

先最一开始获取从开机到现在的时间,内部是目前的运行时间

如果这个差大于1000ms,就是继续发送命令。接着把时间位更新

新建一个串,从serial1读取字符加到string里面

这个是Tello发给ESP32的

看样子最多12位,后面两位是ok

10位是接收数据位

再看这个 ETT ok(10-4=6)位(\r\n)(6-4=2)

其实我觉得,发回来的是一个数字的信息。这样设计会好一些

uart1.write("DIY yyy")

自定义的命令是DIY空格+命令

print(protocol.getTelloMsgString("[TELLO] sn?",1000))

这个命令是查询TT的SN,下面是接收的函数

String RMTT_Protocol::getTelloMsgString(char *cmd, uint32_t timeout){ while (Serial1.available()) { Serial1.read(); } String back; Serial1.printf(cmd); long oldtime = millis(); while (!Serial1.available()) { long newtime = millis(); if ((newtime - oldtime) > timeout) { back = "timeout"; return back; } } while (Serial1.available()) { back += String(char(Serial1.read())); } if (back.endsWith("\r\n")) { back = back.substring(0, back.indexOf("\r\n")); } return back;}
"[TELLO] sn?"

发送这个串给飞机

这个函数先判断串口是不是有数据

接着创建串

然后把上面的串发出去

然后一段代码来判断是不是读取超时

接着就读这个数据,读到back里面

然后判断是不是\r\n结尾

然后是的话,就去掉结尾然后返回back

protocol.getTelloMsgString("[TELLO] sn?",1000)

1000是超时参数

这个积木会使用所有的引脚模块

from machine import Pin, PWM

p13 = Pin(13, Pin.IN)
pwm13 = PWM(Pin(13))

p13.value(1)pwm13.duty(200)while True: while not ((p13.value())): pass

老实讲,我觉得扩展性非常差。如果就用积木的话

而且看库的导入情况,只用用到了自身的库

(0)

相关推荐

  • 简易计算器(C语言版)

    功能:简单的加减乘除运算 特色:超大数运算. //程序只写了一部分,还有其它功能没写完 下面只是部分代码 只是传统减法C语言算法 若有不足多谢指点 创作不易复制请注明出处 //减法算法 int mys ...

  • RoboMaster TT 无人机microPython编程.1

    感谢小马的美图 这个Mind+中有支持TT扩展件MicroPython实现,今日做个整理以及有一些实验要做: from machine import *from RMTTLib import *i2c ...

  • RoboMaster TT 无人机microPython编程.3

    只是积木的功能少而已,事实上,代码编写是少不了的. 这里我们用vscode来编写 设备快速连接(串口.网络.USB) 支持基于 MicroPython 的代码智能补全与语法检查 支持 MicroPyt ...

  • 大疆推编程无人机RoboMaster TT、大疆将发布全新Osmo Mobile 4稳定器、俄展示新...

    热点资讯 1.大疆新推出编程无人机RoboMaster TT创造力套装 2.大疆即将发布全新Osmo Mobile 4稳定器 3.俄罗斯把无人机塞进远程火箭弹里 发射后能快速侦察目标 4.坦桑尼亚民航 ...

  • 关于RoboMaster TT Tello Talnet无人机资料(长更)

    脱离Arduino IDE的外部编译及上传模式 TT无人机解读 大疆特洛TELLO手柄盖世小鸡Gamesir-T1D蓝牙连接破解DIY TT拆解 Tello无人机SDK2.0与3.0异同 无人机飞行条 ...

  • TT无人机扩展模块库分析(default.ino)补篇2

    这个简单 请对照 因为源码在这里出现了和手柄相关的源码 设置tof传感器的超时时间(500)什么单位? 没有搜索到,我用SI了 搜索到了~有很多函数 定位位置 在这里 找到了,为什么我又回去了code ...

  • TT无人机扩展模块库分析(default.ino)补篇1

    昨天文章的最后着急的发表,没有好好分析最后这一个 我决定今天继续写一下 因为在具体的语句里面使用预处理命令是我第一次见的 平时都是在文件首有,今天在内部.值得说说 这个地方我在截图一下 在一个{ }内 ...

  • TT无人机扩展模块库分析(default.ino)补篇3

    处理有关矩阵的命令: 自定义回调函数的模板,先定义三个参数 下面写处理函数就行 WiFi更新功能 先定义一个cnt变量 注释写:将您的设置代码放在此处,即可运行一次 先设置一个串口波特率,开启的是Se ...

  • TT无人机扩展模块库分析(操控函数)1

    /** * Gamesir joystick control handling * - Receive command from the joystick * - Control the drone ...

  • TT无人机解读

    接下来的文章就是由我收集到的这些资料,加入自己的测试与理解做一些对无人机的解读,文章来源于官网,博客简书等.如有侵权,后台滴滴我~~~~~~~~~ 这个图是大疆官网的图,首先看的出来颜色真的太亮眼了, ...