前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >制作一个Tello无人机的WiFi无线遥控器(ESP8266+Shield).源码分析上

制作一个Tello无人机的WiFi无线遥控器(ESP8266+Shield).源码分析上

作者头像
云深无际
发布2020-12-17 10:40:38
2K0
发布2020-12-17 10:40:38
举报
文章被收录于专栏:云深之无迹云深之无迹
代码语言:javascript
复制
https://www.jianshu.com/p/f8e2e8ceaa47


https://github.com/PaulStoffregen/SoftwareSerial


https://github.com/bportaluri/WiFiEsp


https://github.com/sudar/JoystickShield
代码语言:javascript
复制
https://hardwarefun.com/projects/joystick-shield

这里是我们主要要加载的三个库,分别是软串口的库,wifi对于esp8266的支持库,还有游戏手柄的硬件支持库,GitHub上面下载就好了

这个是我解压过后的样子

全展开的样子,还有一些缺的库。稍等去下载

这个是原有项目里面,使用的硬件,这个地方放一下作为参考

用作无线的芯片,ESP8266

重点看这里的串口参数

功耗问题

硬件模组的电路连接情况

这个地方是我们本次要用的SDK命令,不多

主要是启动

起飞,降落

以及飞行的一些具体的距离,我其实觉得这个不好.我还是喜欢RC命令

用6个方向的角度值来控制飞机的运动

我们的文件库里面还缺一个IPAddress.h的头文件

我们去找一下,原来是Arduino的库

下载下来。我们研究用~

代码语言:javascript
复制
https://github.com/esp8266/Arduino

不算很大的一个库

这边可以看见已经是加载完成了

Arduino-master\cores\esp8266\IPAddress.cpp,这个是相对路径

注意一下,如果你在编辑器打开的情况下。直接复制相关的文件夹进去,code的数据库引擎是不会工作的,就是相关的跳转头文件,函数的功能是不可用的。建议关闭一次编辑器重新建立一次相关的文件的索引。

可以看见全部都是可以被索引到了,但是还有一个报错

看一下是什么错,是缺东西?

这边是它的建议

我直接搜索,没有个锤子库

把头文件报错直接关闭,巴适嗷

此时我想加一个Arduino的头文件,可以看到自带的自动补全真好用

加上的样子,我们说一下这些头文件的作用

  1. 一是文章里面给的硬件的库
  2. esp8266的AT指令库
  3. wifi UDP协议的库
  4. 一些Arduino自带功能的库,比如pinmode()这种函数的来历
  5. 还有一个连接esp8266串口的库
  6. 还有一个是IP地址相关的库
  7. 大体来讲就是这样,我们后面可以加更多的传感器进来,比如可以I2C的屏幕就加一个#include<Wire.h>的库,以及绘图用的库。

这些地方都是对于遥控器的一些初始化的配置,我们以下会详细的解释。

Tello SSID,这个需要根据无人机的实际值进行修改,启动Tello无人机后,用电脑扫描一下WiFi网络,以TELLO开头的热点即是。后面pass是密码,可以看到没有一点加密的东西在里面,安全性是负数。后面我们来进行相关的攻击的抓包重放,那是比较靠后的故事了,想看的等着就行。

这个就是很简单了,wifi的状态,

我们看看这个的具体应用是怎么样的

在这里是最重要的代码

打开的样子

  1. 第一次判断这个标志,如果匹配上了,就打印WiFi板子不存在
  1. 尝试连接到WPA SSID
  2. 然后打印ssid的具体信息
  3. 接着使用wifi.begin这个来连接tello飞机

接着是一个1000ms的延时,用了稳定连接情况

打印一个wifi已经连接

这个地方是调用了一个函数,来打印WiFi和状态

代码语言:javascript
复制
void PrintWifiStatus()
{
    // print the SSID of the network you're attached to:
    Serial.print("SSID: ");
    Serial.println(WiFi.SSID());

    // print your WiFi shield's IP address:
    IPAddress ip = WiFi.localIP();
    Serial.print("IP Address: ");
    Serial.println(ip);

    // print the received signal strength:
    long rssi = WiFi.RSSI();
    Serial.print("signal strength (RSSI):");
    Serial.print(rssi);
    Serial.println(" dBm");
}

这个是函数的具体实现,可以看带其实啥也没有,就是一些打印店额语句

打印SSID接入点的名字

打印IP地址,这边还打印了一个WIFI的强度值,dBm是单位

代码语言:javascript
复制
void SendCommand(const char *command)
{
    Udp.beginPacket(telloAddr, telloPort);
    Udp.write(command, strlen(command));
    Udp.endPacket();
    delay(1000);
}

这个地方随便把发送的函数也看了

一开始初始化这个UDP协议,两个参数传进去(tello的地址,tello的端口)

8889网络编程,具体这个地方可以看我以前的文章.

接着就是UDP发包命令,后面是一个字符串计算的函数.后期看源码看看作用

然后断开连接,延时1000.这个值是一个经验的值,我不推荐这个数值.不流畅

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-12-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 云深之无迹 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档