从零搭建 STM32 物联网云控系统!WF24双模通信

发布时间:2026-01-26 已被浏览 15 次

 暑假两个月,从硬件接线到小程序上线,我终于搞定了这套全1栈物联网云控系统!基于 STM32F103 主控、WF24 WiFi+BLE 双模模块,搭配 EMQX 公网服务器和微信小程序,实现了「蓝牙一键配网」「MQTT 远程控制」「多设备状态同步」三大核心功能,满足大家的物联网那个项目开发,实现智能远程控制、远程数据采集等功能场景,新手也能跟着复现~ 今天把完整开发流程拆解开,从硬件选型到代码实现,再到踩坑记录,全部分享给大家!


一、项目亮点先睹为快

image.png

开发过程记录

为什么值得花时间做这个项目?核心亮点直接戳中物联网开发痛点:

双模通信:蓝牙本地配网 + MQTT 云端控制,解决 “新设备联网难”“远程控制不稳定” 问题

全栈覆盖:从 STM32 底层驱动→模块 AT 指令配置→MQTT 协议通信→微信小程序开发,一套流程打通

实用功能:支持 5 台设备管理、自定义设备名称、状态实时同步、断电自动重连

零成本上手:使用 EMQX 免费公网服务器,无需自己搭建后端,微信小程序即开即用


二、硬件选型与原理架构

1. 核心硬件清单

image.png

大夏龙雀【DX-WF24】WiFi+蓝牙二合一通信模块

image.png

2. 硬件连接逻辑

image.png

 物联板PCB

· STM32 ↔ WF24 模块:通过 USART1 通信(PA9-TX → 模块 RX,PA10-RX → 模块 TX)

· STM32 GPIO 分配:PC13(配网状态灯,默认亮,配网成功灭)、PB11(设备 1 控制灯)

· 供电:STM32 和 WF24 均采用 5V 供电,注意共地避免干扰


3. 整体架构流程图

image.png

· 配网阶段:小程序通过蓝牙给 WF24 发 WiFi 账号密码,STM32 存储后触发联网

· 控制阶段:小程序通过 MQTT 发指令→EMQX 服务器→WF24→STM32 执行→上报状态→小程序同步


三、STM32 端核心代码实现(底层驱动 + MQTT 接入)

STM32 是整个系统的 “大脑”,负责解析指令、控制外设、与模块通信,核心代码按功能拆分,新手可直接复用!


1. 关键宏定义(统一配置,方便修改)

image.png

2. MQTT 接入核心流程(WF24 模块 AT 指令配置)

WF24 模块支持 AT 指令配置,STM32 通过串口发送指令完成联网和 MQTT 连接,流程如下:

设置模块进入简易配对模式(自动重连云服务器):

AT+SIMPLEMODE=3,4

设置WiFi名称、密码:

AT+CWJAP=bulingbuling,123456789

设置客户端ID

AT+MQTTLONGUSERNAME=WIFI24

连接MQTT云服务器:

AT+MQTTCONN=broker.emqx.io,1883,1

模块订阅主题:

AT+MQTTSUB=phone,0

模块发布主题:

AT+MQTTPUBRAW=wf24,12,0,0

Wf24为发布主题,12为即将透传的数据长度,发送指令后模块返回“>”,即可发送透传数据。

image.png

3. 指令解析与状态上报(核心业务逻辑)

STM32 通过串口接收 WF24 转发的 MQTT 指令,解析后控制外设,同时上报执行结果:

image.png


四、微信小程序开发(前端交互 + 双模通信)

小程序是用户交互入口,核心实现「蓝牙配网」和「MQTT 云控」两大功能,原生开发 + mqtt.js 库即可搞定,注意由于微信对小程序请求网络接口的严格监管,所以必须提前在小程序的开发后台中进行域名(EMQX公网服务器broker.emqx.io)配置域名白名单,确保小程序可以通过域名正常访问网络接口。

1. 小程序核心页面结构

image.png

image.png

2. 蓝牙一键配网

image.png

原理:STM32 上电后默认开启 WF24 的蓝牙功能,小程序连接蓝牙后,将 WiFi 信息通过 BLE 发送给 WF24,STM32 存储后触发联网流程。

image.png

3. MQTT 云端控制(远程通信核心)

小程序通过 WebSocket 连接 EMQX 服务器(端口 8084),实现指令发送和状态接收:

image.png

4. 状态同步机制(避免控制失效)

· 本地存储:小程序通过wx.setStorageSync保存设备状态,下次打开自动加载

· 云端查询:进入控制页面后,自动发送Query all status指令,获取设备最新状态

· 双向确认:小程序发送控制指令后,必须收到 STM32 的状态上报,才更新按钮状态


五、开发踩坑记录

1. WF24 模块波特率不匹配:模块默认波特率是 115200,STM32 串口必须和其一致,否则会出现乱码(我一开始误设为 9600,调试了 2 小时才发现)

2. MQTT 连接失败:微信小程序不支持 TCP 直连,必须用 WebSocket 连接(端口 8084),而 STM32 端用 1883 端口

3. 蓝牙配网数据丢失:WF24 的 BLE 特征值一次最多发送 20 字节,WiFi 密码过长时要分帧发送(我用的 WiFi 密码较短,直接发送没问题)

4. 状态同步延迟:一开始没加 “指令确认” 机制,导致小程序显示 “开” 但设备没响应,后来增加了 “发送指令→接收上报→更新状态” 的逻辑

5. EMQX 服务器连接不稳定:公网服务器偶尔会断连,在小程序端添加client.on('reconnect', () => { ... })自动重连逻辑


六、演示效果

https://live.csdn.net/v/506305https://live.csdn.net/v/506305

1. 蓝牙配网:打开小程序→扫描 WF24→输入 WiFi 信息→点击配网→3 秒后 PC13 灯熄灭(配网成功)

2. 远程控制:离开蓝牙范围,打开 4G/5G→进入小程序控制页面→点击设备 1 开关→PB11 灯亮 / 灭,小程序按钮同步更新

3. 多设备管理:修改 STM32 的发布 / 订阅主题,可支持 5 台设备独立控制,自定义设备名称(如 “卧室灯”“客厅风扇”)


七、总结

这个项目从 0 到 1 覆盖了物联网开发的核心环节:硬件驱动→模块通信→云端协议→前端交互,不仅学会了 STM32 串口编程、MQTT 协议原理、蓝牙配网逻辑,还掌握了微信小程序的开发流程,暑假的付出太值了!


可优化方向

· 增加设备状态历史记录(通过 EMQX 存储消息日志)

· 支持更多设备类型(如温湿度传感器数据上报)

· 添加异常报警功能(设备离线时小程序推送通知)

· 优化配网流程(自动识别附近 WiFi,无需手动输入)



返回应用案例