首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

[开源工具] 串口转wifi —— 两个串口之间通过网络进行通信

  • 25-03-02 13:44
  • 2109
  • 9368
blog.csdn.net

之前有个项目,要求无人机与地面站直接的通信由之前的数传改为wifi,搜了一圈,很多都属于手工调试,而且包含复杂的界面。然而实际需求要求稳定,自动化。因此为了满足这个需求只能是自己开发一个小工具。

在当前项目背景下,要实现的需求如下图所示

串口发送
串口发送
数据传递
数据传递
TCP发送
TCP发送
串口发送
串口发送
无人机飞控串口A
无人机上位机串口B
无人机客户端
地面站服务端
无人机地面站

实际上,正常的无人机与地面之间的通信用的是数传模块,无人机和地面站之间都是通过串口连接到这个模块上。模块和模块之间的通信利用远程无线电进行通信。

但是,在一些特殊场景中,比如不能用无线电台的地方,敏感区域等,就只能想办法用其他的手段实现无人机与地面站的通信,而利用网络通信就是一个非常有效的手段。

项目开源在Github,下载地址:https://github.com/Li-Zhaoxi/uart2net

如果两端都在Windows下,可以直接下载编译好的exe,下载地址:https://github.com/Li-Zhaoxi/uart2net/releases/tag/v0.1

1 应用前景

简单来说,串口转wifi干了什么事呢,就是将下图这个串口线,线的部分变成了无线网,或者局域网之间。

别看问题简单,应用的场景可多了:

  • 局域网范围优势。拿校园网来说,校园网实际上是个超大规模的局域网,传输速度高达100MB/s,所以串口两端的设备都连上校园网,我可以在任何地方快速地控制设备。
  • 局域网频段优势。数传模块的频段会有冲突,但网络不会,适用于大规模控制。
  • 便宜。搞研究一般都在室内,有个路由器就够了(省下好几百数传模块的钱投资在头发上不香吗)。
  • 应用范围广。可以远程调试串口,可以模拟任何两个串口之间的通信,省下一大堆串口线。
  • 公网扩展。两个设备之间既然是利用网络通信就不仅仅局限于局域网,在无人机设备上插入SIM卡并不是什么难事,而且利用现在的5G技术,是可以快速传输无人机大量的图像数据的(5G尽管在民用上很贵,似乎不划算,但在工业圈非常重要,突破了网速限制,真的可以为所欲为)。

当然,缺点很明显,延迟会很高,受限于网络覆盖范围,如果需要野外大范围的飞行,还是得安装数传图传模块。

TB上是有卖串口转wifi的硬件,我这个是软件,跨平台,可以安装在x86平台,也可以安装在aarch64架构的嵌入式平台(比如jetson系列的嵌入式系统)。

2 使用说明

2.1 程序编译

改程序基于QT,所以无论在哪个平台,都要安装QT所支持的库。Windows下去下载exe安装包就行,Linux下用apt-get install 命令是可以直接安装QT的。

sudo apt-get install qt5-default
sudo apt-get install libqt5serialport5-dev
  • 1
  • 2

WINDOWS 下的使用方法

  1. 使用QTCreator加载当前uart2net.pro文件
  2. 在release模式下编译。
  3. 找到release版本的exe,与uart2net.ini单独放进一个文件夹。
  4. 如果需要发布到别的电脑,按照《QT 发布release版本》的方法,补充对应的dll文件。
  5. 编译通过后,此工程可以删掉。
  6. 配置ini文件,双击exe即可执行。

Linux下的使用方法(包含嵌入式Linux)

  1. 下载代码git clone https://github.com/Li-Zhaoxi/uart2net
  2. 进入文件路径cd uart2net
  3. 输入qmake uart2net.pro
  4. 编译make all -j6
  5. 编译无错通过后,根据设备修改对应的ini文件。
  6. 输入sudo ./uart2net (串口读写必须是管理员权限,也可以用chmod改掉这个串口权限)

2.2 配置文件用法

配置文件可以用记事本打开,切记修改时候里面不能有中文:
在这里插入图片描述

  • uart2net
    • type:表示是服务端还是客户端,1表示服务端,2表示客户端
    • heartbeattime:检测心跳,客户端必须设置(默认2000即可),否则无法检测断线并自动重连,服务器如果通信频繁可以设置0。(网络断开时候,程序是没法自动检测的,只能通过心跳)。
    • RecordLog:默认0不要动,本意是想记录通信之间传递的数据(因为我实现一半时候觉得没必要)。
    • showmessage:在控制台显示传递的数据,设置0就行。(因为设置1时候,满屏的二进制数,你也看不过来,前期自己调试用的)。
  • serial-port
    • **number **:串口号。windows下一般为 COM3 (3根据实际情况调整),Linux下一般为 /dev/ttyS3,后面的数字同样根据实际设备号调整。
    • btl:串口波特率。
  • TCP:
    • hostip:服务端IP地址(仅用于客户端,但在服务端你不能删掉这行)。
    • port:服务端端口号。

2.3 一些效果图

服务端,设备连接上之后会有显示,设备重连也会有显示。
在这里插入图片描述

客户端,最开始时候服务端还没开,一直在重连。
在这里插入图片描述

客户端,根据设置的心跳,2秒内没消息就重连。
在这里插入图片描述

3 总结

写这个小工具大概花了我2周左右的时间,主要就利用QT的串口和网络通信,并没有使用多高深的软件技术。后面移植到无人机系统中前前后后联调修了一堆bug,对于我来说,这个东西的最大价值也许就是其稳定性,在不断的调试中得到了最优版本。

在未来有需求的话也会对其进行进一步升级(毕竟这东西思想上容易,实际上调试巨麻烦),比如:

  • 心跳包不再占用数据通信的socket,两端都可以检测对方是否还活着
  • 现在是一对设备就创建一个服务端和客户端,后续也会升级为创建一个服务器,每个设备都是一个客户端(类似局域网聊天器那种)。
  • 有效的记录Log。设备发生意外,后续检查时候可以通过日志查看最后发送消息。(如果追求数据完整性,就得进来个数据存一次,导致IO变多,如果满足缓存再存,设备出故障容易异常关机,导致数据丢失)。

这次公布的是稳定版本,当然后续要是自己碰到需要更高级的需求,自己也会升级下这个。

注:本文转载自blog.csdn.net的小玺玺的文章"https://blog.csdn.net/Zhaoxi_Li/article/details/118736304"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2024 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top