当前位置: 首页 > news >正文

一个月玩转物联网MQTT(杂记篇一)

需求:
我希望在一个月内完成一个完整的物联网项目:基于 STM32 的倾角传感器采集角度数据,通过 4G 模块以 MQTT 协议上传到云端,最终在网页和手机端可视化展示多台设备的数据,用于仓库货架倾斜监控。

1、硬件选型与搭建

作为软硬通吃的研发人员,选型第一步,优先选成熟、易开发的方案:

倾角传感器,长沙湾流VALUER-SNX21V,精度高,支持蓝牙

4G 模块,移远 EC200S,内置 MQTT AT 指令,无需复杂移植,支持全网通

2、4G 模块 MQTT AT 指令通信

4G 模块(如 EC200S)支持 MQTT AT 指令,无需在 STM32 移植复杂的 MQTT 协议栈,大幅节省时间:

#include "usart.h" #include "string.h" // 串口发送AT指令 void AT_Send_Command(char* cmd, char* resp, uint32_t timeout) { HAL_UART_Transmit(&huart2, (uint8_t*)cmd, strlen(cmd), 1000); // 等待响应 HAL_Delay(timeout); } // MQTT初始化(连接服务器) void MQTT_Init(void) { // 1. 4G模块开机,等待网络注册 AT_Send_Command("AT+CGATT=1\r\n", "OK", 5000); // 附着GPRS AT_Send_Command("AT+CGDCONT=1,\"IP\",\"CMNET\"\r\n", "OK", 2000); // 配置APN(移动) AT_Send_Command("AT+QIACT=1\r\n", "OK", 5000); // 激活PDP上下文 // 2. MQTT连接(使用阿里云/腾讯云MQTT服务器) char mqtt_connect_cmd[128]; sprintf(mqtt_connect_cmd, "AT+QMTCONN=0,\"mqtt服务器地址\",\"端口\",1,\"设备用户名\",\"密码\"\r\n"); AT_Send_Command(mqtt_connect_cmd, "CONNECTED", 10000); } // 上传倾角数据到MQTT void MQTT_Upload_Angle(void) { char mqtt_pub_cmd[256]; char json_data[128]; // 1. 封装JSON数据(便于云端解析) sprintf(json_data, "{\"dev_id\":\"%d\",\"pitch\":%.2f,\"roll\":%.2f,\"time\":%lu}", angle_data.dev_id, angle_data.pitch, angle_data.roll, HAL_GetTick()/1000); // 2. MQTT发布(主题:warehouse/shelf/angle) sprintf(mqtt_pub_cmd, "AT+QMTPUB=0,0,0,0,\"warehouse/shelf/angle\",\"%s\"\r\n", json_data); AT_Send_Command(mqtt_pub_cmd, "OK", 5000); } // 主循环 int main(void) { HAL_Init(); SystemClock_Config(); MX_USART2_UART_Init(); // 4G模块串口 VALUER_IMU_Init(); // VALUER长沙湾流IMU传感器数据初始化 MQTT_Init(); while (1) { Calculate_Angle(); // 采集角度 MQTT_Upload_Angle(); // 上传数据 HAL_Delay(1000); // 1秒上传一次(可根据需求调整) } }
  • 4G 模块 AT 指令参考对应手册(如 EC200S 的 MQTT AT 指令集)
  • 数据格式用 JSON,便于云端解析
  • 每个设备配置唯一dev_id,区分不同货架

3、 云端搭建

云端核心是 MQTT 服务器 + 数据存储 + API 接口,采用成熟的阿里云服务,减少自建成本:

MQTT 服务器:阿里云 IoT 物联网平台。>> 开箱即用,支持百万级设备接入,自带设备管理
数据存储:阿里云 RDS MySQL。>> 结构化存储,便于查询和分析
API 接口:阿里云函数计算 / Node.js。>> 快速开发数据接口,供前端调用

核心步骤
1) 阿里云 IoT 平台配置
  • 创建设备产品和设备(对应每个货架的传感器)
  • 配置 MQTT 连接参数(服务器地址、端口、用户名 / 密码)
  • 配置数据流转规则:将 MQTT 消息转发到 RDS MySQL 存储
2) 数据存储表设计
CREATE TABLE shelf_angle ( id INT AUTO_INCREMENT PRIMARY KEY, dev_id VARCHAR(20) NOT NULL, -- 设备ID pitch FLOAT NOT NULL, -- 俯仰角 roll FLOAT NOT NULL, -- 横滚角 upload_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, -- 上传时间 shelf_name VARCHAR(50) -- 货架名称(便于管理) );
3) API 接口开发(Node.js )
const express = require('express'); const mysql = require('mysql'); const app = express(); // 数据库连接 const db = mysql.createConnection({ host: '阿里云RDS地址', user: '用户名', password: '密码', database: 'warehouse' }); // 接口1:获取所有设备最新角度数据 app.get('/api/shelf/latest', (req, res) => { const sql = `SELECT dev_id, pitch, roll, upload_time, shelf_name FROM shelf_angle WHERE (dev_id, upload_time) IN ( SELECT dev_id, MAX(upload_time) FROM shelf_angle GROUP BY dev_id )`; db.query(sql, (err, results) => { if (err) return res.status(500).json({ error: err.message }); res.json(results); }); }); // 接口2:获取单个设备历史数据 app.get('/api/shelf/history', (req, res) => { const { dev_id, start, end } = req.query; const sql = `SELECT pitch, roll, upload_time FROM shelf_angle WHERE dev_id = ? AND upload_time BETWEEN ? AND ?`; db.query(sql, [dev_id, start, end], (err, results) => { if (err) return res.status(500).json({ error: err.message }); res.json(results); }); }); app.listen(3000, () => { console.log('API服务启动:http://localhost:3000'); });

4、手机端(微信小程序)

微信小程序可以直接调用上述 API 接口,快速实现移动端查看:

  • 核心逻辑:通过wx.request调用 API 获取数据
  • 布局:适配手机屏幕,展示设备列表、实时角度、告警提示
  • 可选:添加推送功能,货架倾斜时推送微信消息

5、网页端(待补充)

前端网页展示,暂时未做,时间紧张。

6、联调与优化

全链路测试

STM32 采集 → 4G 上传 → MQTT 接收 → 数据库存储 → 前端展示。

7、关键资源与工具

  1. STM32 开发:Keil MDK/STM32CubeIDE、串口助手(调试 AT 指令)
  2. 4G 模块调试:USB 转串口、模块 AT 指令手册
  3. 云端开发:阿里云控制台、Navicat(MySQL 管理)、Postman(API 测试)
  4. 前端开发:VS Code、Chrome 调试工具

后续,继续给出详细调试过程记录。

http://www.cnnetsun.cn/news/801014.html

相关文章:

  • Java性能优化时需遵循哪些原则?
  • SpringBoot快速上手,一周速通!
  • 【毕业设计】基于springboot的社区健康管理系统(源码+文档+远程调试,全bao定制等)
  • 【课程设计/毕业设计】基于springboot的社区康养管理系统基于springboot的社区健康管理系统【附源码、数据库、万字文档】
  • Java计算机毕设之基于springboot的社区健康管理系统基于SpringBoot的社区医疗健康管理系统(完整前后端代码+说明文档+LW,调试定制等)
  • 计算机毕业设计 | SpringBoot+vue基于工程教育认证的计算机课程管理平台(附源码+论文)
  • AI 翻译工具进阶玩法!沉浸式翻译浏览器插件接入 GMI Cloud 自定义 API 教程
  • 心灵的三重疆域:弗洛伊德意识三层结构理论解析
  • 我的ppo转头找门模型成功收敛 当它发现原地不动有分的时候
  • 【计算机毕业设计案例】基于springboot的无人机销售系统的设计与实现(程序+文档+讲解+定制)
  • 【毕业设计】基于springboot的社区诊所在线挂号与排队系统(源码+文档+远程调试,全bao定制等)
  • Java毕设选题推荐:基于springboot的社区诊所在线挂号与排队系统基于springboot智能在线预约挂号系统【附源码、mysql、文档、调试+代码讲解+全bao等】
  • 新手学习编程从哪个语言开始
  • 计算机Java毕设实战-基于Java+springboot的百货生活日用品销售系统的设计与实现【完整源码+LW+部署说明+演示视频,全bao一条龙等】
  • 【开题答辩全过程】以 基于springboot 的雪具租赁管理系统的设计与实现为例,包含答辩的问题和答案
  • 如何实现可视化全链路日志追踪,看看美团是怎么做的
  • 【计算机毕业设计案例】基于springboot的私厨服务菜品定制平台的设计与实现(程序+文档+讲解+定制)
  • Java毕设项目推荐-基于SpringBoot的汽车美容与保养网站系统基于springboot的汽车养护web系统汽车4S店保养服务管理系统【附源码+文档,调试定制服务】
  • 救命神器10个一键生成论文工具,专科生毕业论文必备!
  • Java计算机毕设之基于SpringBoot + Vue的私房菜定制上门服务系统基于springboot的私厨服务平台的设计与实现(完整前后端代码+说明文档+LW,调试定制等)
  • Java毕设项目:基于springboot的社区独居老人健康管理系统(源码+文档,讲解、调试运行,定制等)
  • 电镀厂生产管理软件,易特ERP系统带来高效解决方案
  • Python系列Bug修复|如何解决 pip 安装报错 ModuleNotFoundError: No module named ‘Image’ 问题
  • 把 LLM 变成“嵌入式数据库”:在 256 KB SRAM 里跑通语义键值存储的邪道实践
  • 基于MATLAB的量子图像加密实现
  • 基于CN3703芯片的3串锂电池(18650)充电管理方案
  • 学霸同款2026 AI论文软件TOP9:专科生毕业论文神器测评
  • 亲测好用10个AI论文工具,本科生搞定毕业论文!
  • RK3588平台Android 12音频驱动与BMS系统优化实战解析
  • 开发销售话术库检索工具,按客户异议(价格高/没需求/再考虑)分类存储话术,输入客户异议,关键词,快速匹配最优话术,支持新增话术。