开篇图,看我手搓出来的尺寸超小的MMDVM热点盒子(都不能叫做盒子啦)
咱就说这玩意尺寸有多小,架构有多简单,4G网卡直连双工热点版,省去树莓派或者OpenWrt,功耗低至0.几W。开机秒快。
基本原理
热点版-4G DTU–云端–MMDVM服务端主机。
下面说说手搓这玩意过程中的心路历程。
目录
- 一、DTU数传模块
- 二、云DTU模式(新手友好模式)
- 三、4G核心板开发,烧脑模式
- 1、AT指令
- 2、TCP透传
- 3、服务端搭建
- 4、 Windows版MMDVM
- 5、上线测试
- 四、热点版STM32开发
- 如何加电自动加载4G核心板的TCP透传配置
- 1、自动保存配置?
- 2、挂个树莓派,每次开机发送AT指令?
- 3、单片机向4G核心板发送AT指令
- 4、直接改造热点板上的STM32主控
- 4.1、juribeparada/MMDVM_HS项目传送门
- 4.2、开发环境部署
- 4.3、测试刷机
- 4.4、改代码
- 五、后续
一、DTU数传模块
4G DTU是一种广泛用于工业物联网数据传输的终端设备,各类传感器串口原始数据通过RS485/232传输到DTU转4G网络,双向透明传输,支持Modbus RTU转TCP/MQTT。
这次,先后尝试了有人和移远两个品牌的DTU产品,分别总结一下优缺点:
有人(及其他云DTU产品)
优点:无需二次开发,有手就行,连上串口就能用,无需公网IP,云端透传。
缺点:体积和功耗没法追求极致,最终放弃这种当时
移远,SimCOM等模组厂商
优点:体积功耗可以做到极致,价格便宜。
缺点:需要二次开发,对没经验的菜鸟来说(比如我自己),及其烧脑。需要服务端有公网IP做端口映射。
二、云DTU模式(新手友好模式)
以有人的模块为例。按照厂商的说明。安装虚拟串口软件,设备上线,串口可用后,PC端运行MMDVM HOST调用串口连接就可以嘞。
听起来非常简单,实际一点也不难,有手就行。
三、4G核心板开发,烧脑模式
硬件连接方式真的很简单,照着引脚图连就行了
不过为了美观,实际操作的时候对热点版动了一些手脚,切断了几根线,这样移远的4G模组可以直接对插到热点版上了。
到这一步,是不是觉得好像挺简单的?哈哈哈,接下来好好看好好学,开始要烧脑了。
1、AT指令
首先,这玩意烧脑第一烧,所有配置完全基于AT指令进行。包括连接拨号,建联,串口设置,TCP连接设置。
当然这部分有厂商的文档,一看就懂(移远的文档一直都是很靠谱的,量大管饱
)。
照着文档挨个试呗,最后终于建联成功。
2、TCP透传
我直接截图源文档,大家自己看
总结一下,例如:
AT+QICSGP=1,1,"UNINET","","",1
AT+QIACT=1
AT+QICFG="transwaittm",0
AT+QIOPEN=1,0,"TCP","mmdvm.bj-cuc01.ctsdn.com",46066,0,2
3、服务端搭建
Windows和Linux服务器上都有很多方便好用的虚拟串口软件,配置TCP Server模式并配置端口即可。
这部分特别注意,需要公网IP,自己想办法做映射哟。
串口启用之后,在PC端运行MMDVM Host,使用该串口即可。
4、 Windows版MMDVM
关于Windows版的MMDVM Host使用,可以参考逗老师此前的一篇文档。
https://blog.csdn.net/ytlzq0228/article/details/126684136
5、上线测试
只要前面稳定发挥,到这一步应该是能一遍过的。
重点看到上位机与热点版建联的三个起手式,获取版本,设置收发频率,配置模式。
这时候,咱们来不道德的掐一下台子,漂亮,可以掐上去了。
四、热点版STM32开发
坐好了坐稳了,最烧脑的地方来了哈。
前面说了一大堆,不知道各位看官有没有发现一个问题。4G核心板的AT指令,咱们现在是使用电脑来配置的,但是断电之后配置是不保存的,用的时候都要再次配置。
所以,咱们要想一个办法,来让4G核心板在加电后可以自动运行这个配置。
如何加电自动加载4G核心板的TCP透传配置
1、自动保存配置?
很遗憾,别想了,没这个功能。
2、挂个树莓派,每次开机发送AT指令?
我好像有那个大病,我再挂个树莓派?我图啥?
3、单片机向4G核心板发送AT指令
好办法,这个办法可行,功耗极低。
但是,我们怎么让单片机发送AT指令后退出系统,或者透传热点版-4G核心板之间的串口数据?
但是酱紫面临了两个巨大的挑战:
- 我不会单片机开发啊,完全不会啊!
- 这又要增加一个单片机的模块,额~~这个尺寸好像又控制不住了。。。。
4、直接改造热点板上的STM32主控
基本上国内使用的热点板都是STM32F103C这款主控,反正也是单片机,我们挑战一下,直接改造它,让它自行给4G核心板发送AT指令吧。
但是:
- 我不会单片机开发啊,完全不会啊!
- 源代码在哪呢?
对,我想我当时可能是疯了,才做了这个决定。
但是,逗老师怎么可能轻易放弃呢。STM32开发是吧,好的,学一下。
在一个周的时间,终于经历了,从搞懂STM32针脚定义,boot PIN启动针脚,flash刷机,C语言死去的回忆又重新攻击我,串口IRQ中断,串口读写等之后,终于。
来吧,上成果。
4.1、juribeparada/MMDVM_HS项目传送门
juribeparada/MMDVM_HS(国内在用的基本是1.5.2版本,1.6版本实测部分老板子能刷,但是调不起ADF7021芯片)
https://github.com/juribeparada/MMDVM_HS
4.2、开发环境部署
Windows with Arduino IDE
实测,MacOS按照这个方法部署也可以
4.3、测试刷机
开搞之前,先测试下能不能刷机,我们先测试刷原始项目。
v1.5.2下载地址:
https://github.com/juribeparada/MMDVM_HS/archive/refs/tags/v1.5.2.zip
基本上在售的热点版,都会把PIN 38(对应树莓派GPIO 20)作为STM32的BOOT0的引出针脚,并且已经给BOOT 1引脚接地拉低。所以BOOT 0高电平开机,可以快速进入刷机模式。
Arduino IDE配置设备。注意,因为热点版没有引出STM32的USB引脚,所以这里选择使用串口进行固件上传。电脑与热点版之间想办法连接一个USB转串口模块。或者如我这张板子,本身自带USB转串口芯片。
4.4、改代码
主要思路是在STM32加电后,先尝试发送AT指令给4G模块。获得4G模块回应后发送配置指令。
配置完成,或者超时后,再继续运行原先的MMDVM_HS功能。
那么,找到入口处的代码,咱们来做一些小小的修改。
看起来很简单,实际一点也不难。
热点板和4G模块同时加电后。STM32启动速度较快,约1S左右启动完成,之后每秒一次向串口发送"AT"命令,并期望得到串口回复"OK"。
一旦收到OK之后,证明4G模块也启动完成(约3S),之后再次发送剩下的建联指令。完成建联。
一切,都是这么的丝滑。
我真是个小天才。
五、后续
现在还有几个任务要做。
测试期间用的是移远EC800单排针板的模块,不带电池管理和充放电功能。后续还要用另一个双排针的版本,带充放电功能的模块来重做一次。
完成之后,3D打印一个外壳,加一节小电池,装起来就真的完成了。系统总功耗0.7-1.2W,打算用一节700mAH的聚合物锂电池,可以运行2小时。