【逗老师的无线电】BI1FQO教你整骚活,纯4G MMDVM热点版

news2024/11/25 3:08:55

开篇图,看我手搓出来的尺寸超小的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小时。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1171099.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

大数据管理平台是什么?如何利用工单系统提升企业管理效率?

随着数字化时代的来临,大数据管理平台已成为企业优化运营、提高竞争力的关键工具。工单管理系统作为大数据管理平台的核心组件,对于企业服务的优化和提升发挥着至关重要的作用。本文小编将为您揭示工单管理系统在大数据管理平台中的重要地位,…

libpcap之数据分流

当前系统都是多核系统,为了充分利用多核优势,数据包可以在底层就进行分流,可以通过多线程/多进程对同一个接口的数据进行并行的处理。 一、实验 一个server/client程序一个简单的抓包程序,抓取server/client之间的通信数据 1.1 …

Bat批量处理

一:创建文件夹 excel创建文件 复制出来新建文本文件 另存为bat 双击bat 二:批量移动文件 A列:获取的文件名列表 dir /b/o:n> original.txt B列:填充序号 C列公式:每隔9行增加1 INT((ROW(B1)-1)/9)1 D列公式&am…

CDN与WAF防火墙:强强联手,守护您的网站安全

随着互联网的普及,网站安全问题变得愈发重要。恶意攻击、数据泄露和服务中断等问题都可能给网站和用户带来严重损害。在保护网站免受这些威胁的过程中,内容分发网络(CDN)和Web应用程序防火墙(WAF)是两个强大…

C++算法 —— 贪心(2)

文章目录 1、柠檬水找零2、将数组和减半的最少操作次数3、最大数4、摆动序列5、最长递增子序列6、递增的三元子序列7、最长连续递增子序列 1、柠檬水找零 860. 柠檬水找零 如果一开始顾客给了10块,那就直接结束。给了5块那就收下。之后每一个位置,都需要…

进阶C语言-指针的进阶(三)

模拟实现qsort函数 🎈1.测试bubble_sort,排序整型数组🎈2测试bubble_sort,排序结构体数组 📝关于qsort函数,我们可以先去cpluplus网站上面了解一下: //1.排序整型数组,两个整型可以…

Linux 上的轻量级浏览器

导读大多数 Linux 桌面环境中包含的基本图像查看器可能不足以满足你的需要。如果你想要一些更多的功能,但仍然希望它是轻量级的,那么看看这四个 Linux 桌面中的图像查看器,如果还不能满足你的需要,还有额外的选择。 当你需要的不…

竞赛选题 深度学习实现语义分割算法系统 - 机器视觉

文章目录 1 前言2 概念介绍2.1 什么是图像语义分割 3 条件随机场的深度学习模型3\. 1 多尺度特征融合 4 语义分割开发过程4.1 建立4.2 下载CamVid数据集4.3 加载CamVid图像4.4 加载CamVid像素标签图像 5 PyTorch 实现语义分割5.1 数据集准备5.2 训练基准模型5.3 损失函数5.4 归…

整理的一些Java细节问题

1. 为什么要有无参构造? 在 Java 中,如果一个类没有显式定义构造方法,编译器会自动生成一个默认的无参构造方法(也称为默认构造方法)。无参构造方法是一个没有任何参数的构造方法。 无参构造方法的存在有几个重要原因…

【vscode输出中文乱码】

vscode输出中文乱码为一个个的问号。 这个链接亲测有用 win11对应的界面在这里:

产品经理入门学习(二):产品经理问题思考维度

参考引用 黑马-产品经理入门基础课程 1. 抓住核心用户 1.1 为什么要抓住核心用户 什么是用户? 所有和产品有关系的群体就是用户,他们是一群既有共性,又有差异的群体组合 做产品为什么要了解用户? 了解用户的付费点、更好的优化产…

文件同步工具推荐:挑选高效实用的工具大揭秘

随着工作的累积,会持续产出大量电子资料和文件。如何妥善管理这些文件资料,成了一个问题。有需求就有市场,当下市场上也有很多文件同步工具。 有什么好用的文件同步工具? Zoho WorkDrive 同步网盘就是一款好用的文件同步工具&am…

Leetcode—199.二叉树的右视图【中等】

2023每日刷题(十九) Leetcode—199.二叉树的右视图 深度优先遍历实现代码 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(…

【数据结构】冒泡排序

冒泡排序 前言冒泡排序运行图例算法实现基本思路算法实现步骤算法码源详解冒泡排序效率分析(一)时间复杂度——O(N^2)(二)空间复杂度——O(1)(三)稳定性&…

人工智能基础_机器学习018_手写代码实现_MBGD小批量梯度下降---人工智能工作笔记0058

然后我们继续来看这里的小批量梯度下降,小批量梯度下降,其实就是 用少量的样本数据,进行梯度下降,上面是公式 然后我们来看代码 import numpy as np 导入数学计算包 #X,y创建数据集X=np.random.rand(100,1) x是100行1列 w,b=np.random.randint(1,10,size=2) 然后获取w和截距…

干货分享:10个行业可视化大屏模板(附 Python 源码)

大家好,数据大屏是一种用于展示和分析数据的可视化工具,通常用于监控、分析和报告数据。大屏可以帮助组织更好地理解和管理其数据,支持数据驱动决策,提高业务效率和决策的质量。 本文的所有大屏都是基于Python开发,因…

根据一个类型 获取该类型的 特殊判断 优雅写法

需求:一个统计接口,时间类型参数有以下:今日、近七天、近三十日等 如果我要查询的话,SQL 里的条件必定是一个时间范围,所以就需要根据类型来算好这个时间范围,所以可以写成下面这样。 到时候直接就是 获取…

前端vue,后端springboot。如何防止未登录的用户直接浏览器输入地址访问

前端,使用Vue框架来实现前端路由拦截: 设置需要登录校验的页面: 登录成功后,去设置LocalStorage里面的IsLogin为true:

[LeetCode]-链表中倒数第k个结点-CM11 链表分割-LCR 027. 回文链表

目录 链表中倒数第k个结点 题目 思路 代码 CM11 链表分割 题目 思路 代码 LCR 027.回文链表 题目 思路 代码 链表中倒数第k个结点 链表中倒数第k个结点_牛客题霸_牛客网 (nowcoder.com)https://www.nowcoder.com/practice/529d3ae5a407492994ad2a246518148a?tpId…

Web3游戏的十字路口:沿用传统IP还是另起炉灶?

人们经常问我对 Web3 游戏有什么看法。因此,我想以书面形式概述一下我目前的想法。 让我先澄清一下:我不是专家。这不是一篇深入探讨游戏世界精细指标如 MAU 或 D14 等的全面分析。请把这看作是我根据个人交流和研究,这反映我在游戏领域关注…