【网页点一下闸门就动?STM32+LiteOS 实现远程 “一键放行”】
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
前言
本篇分享一次物联网识别技术课程实战,使用 STM32L431 主控、ESP8285 WiFi 模块、MG996R 舵机,基于 Huawei LiteOS 实时操作系统,借助 MQTT 协议打通云平台与硬件设备,完成一套可以云端远程控制的智能道闸系统,完整复现云端下发指令→硬件执行动作→设备回传状态的端‑云协同全流程。
提示:以下是本篇文章正文内容,下面案例可供参考
一、项目背景
智能门禁、停车场道闸是物联网非常典型的落地场景。传统道闸大多只能本地操作,而物联网方案最大的价值,就是做到远程下发控制、状态实时回传,实现云端和硬件设备双向交互。
本次实验就以此为目标,不只是简单驱动舵机转动,而是完整走通 “云‑端‑边” 整套链路:云平台发送开闸 / 关闸指令,STM32 设备接收解析,驱动舵机完成道闸动作,再把当前道闸状态上报回云端保存,同时 LCD 屏幕本地实时显示设备状态。
硬件清单
- 主控:STM32L431VC 单片机
- 操作系统:Huawei LiteOS 实时操作系统
- 通信模块:ESP8285 WiFi 模块(MQTT 通信)
- 执行机构:MG996R 舵机,模拟道闸闸门
- 外设:LCD 显示屏、智慧交通扩展板
二、系统整体架构
整个系统分为三大块:云平台、设备端硬件、上位机调试。
- 云端:物联网平台,负责下发控制指令,接收设备上报的道闸开关状态,记录每一次操作时间;支持网页端直接操作控制道闸。
- 设备端:STM32 主控 + LiteOS 系统。分为两个任务:显示任务刷新 LCD 屏幕;控制任务负责 WiFi 网络、MQTT 消息解析、舵机 PWM 控制。ESP8285 负责 WiFi 联网,MQTT 协议完成消息订阅与发布。
- 调试端:PC 串口助手,打印设备运行日志,用来排查网络、指令解析、舵机控制故障。
通信逻辑:
云平台下发指令(MQTT 订阅主题)→ESP8285 接收消息→STM32 解析指令→输出 PWM 控制舵机转动(开闸 90°/ 关闸 0°)→执行完成后,设备把道闸状态通过 MQTT 发布主题上报云端。\
三、核心原理拆解
舵机 PWM 控制原理
MG996R 舵机依靠不同占空比的 PWM 脉冲信号控制旋转角度。本项目约定:
- 舵机转到90°:道闸开启
- 舵机转到0°:道闸关闭
单片机定时器 TIM1、TIM2 输出 PWM 波形,修改定时器比较寄存器的值,就改变 PWM 占空比,以此控制舵机旋转到目标角度。
2、Huawei LiteOS 多任务调度
这里用到两个独立任务,实现业务解耦:
- 显示任务:持续刷新 LCD 屏幕,展示 WiFi 联网状态、道闸当前开关状态;
- 控制任务:处理 WiFi 连接、MQTT 消息接收解析、舵机动作调用。
优势:两个任务并行调度,舵机动作、网络消息处理不会阻塞屏幕显示,不会出现执行控制时屏幕卡死的现象。
3、MQTT 端云双向通信
ESP8285 连接 WiFi 之后,使用 MQTT 协议和物联网平台建立连接:
- 订阅 Topic:订阅平台命令下发主题,监听云端过来的开闸、关闸指令;
- 发布 Topic:舵机完成开关闸动作后,向状态上报主题发布当前道闸状态,云端存储状态与操作时间。
需要预先配置:WiFi 账号密码、服务器 IP 与端口、产品 ID、设备密钥、订阅 / 发布主题,参数一旦出错设备就无法接入平台。
4、硬件引脚分配
表格
| 引脚 | 功能说明 |
|---|---|
| PA11 | GPIO,TIM1_CH4,门禁通信、PWM 输出 |
| PA15 | GPIO,TIM2_CH1,门禁通信、PWM 输出 |
| PD13 | GPIO,门禁外设交互 |
四、关键代码逻辑解析
1.main 主函数
系统上电后,依次完成硬件外设初始化、系统时钟初始化;初始化显示、控制任务,启动 LiteOS 操作系统内核,创建两大业务任务,操作系统接管任务调度。
代码如下(示例):
HAL_Init(); //硬件初始化
sysclkinit(); //系统时钟初始化
task_view_init(); //显示任务初始化
task_control_init();//控制任务初始化
LOS_KernelInit(); //LiteOS系统初始化
//创建控制、显示两个任务
create_control_task();
create_view_task();
LOS_Start(); //启动操作系统
2. 网络参数宏定义
所有入网参数集中宏定义:WiFi 名称密码、MQTT 服务器地址、产品 ID、设备密钥、订阅和发布主题。调试项目的时候,大部分联网失败的问题,都是这里参数配置错误。
3. 舵机驱动核心函数
Set_Servo_PWM(degree):传入目标角度,匹配对应 PWM 数值,调用定时器接口修改比较值输出 PWM 信号。Servo_Open():调用Set_Servo_PWM(DEGREE_90)舵机转到 90°,实现开闸。Servo_Close():调用Set_Servo_PWM(DEGREE_0)舵机转到 0°,实现关闸。P0080_Init():初始化 GPIO、TIM1/TIM2 定时器,开启 PWM 输出,上电默认道闸处于关闭状态。
五、实验现象与效果
- 开发板上电,硬件初始化完成,ESP8285 连接 WiFi,LCD 屏幕显示联网状态;
- 在物联网网页平台下发 “开闸” 指令:
- 设备收到 MQTT 消息,串口助手打印日志
成功打开道闸; - 舵机旋转至 90 度,模拟闸门抬起,LCD 同步更新状态;
- 设备上报 “开” 状态到云平台,平台记录本次操作时间;
- 下发 “关闸” 指令:舵机回到 0 度,串口打印关闸日志,上报 “关” 状态至云端;
- 反复多次测试,云端指令下发、硬件执行、状态回传整套链路稳定运行。
云平台页面可以看到历史记录,每一次开闸关闸的状态和时间戳全部保存,真正做到远程可视化管控。
六、项目拓展与创新思路
- 📌本地自动感应模式:增加人体红外传感器,检测到人靠近自动开闸,离开延时自动关闸,脱离云端也可以本地自主运行;
- 🚨故障报警机制:增加蜂鸣器,当舵机执行动作超时,判定机械卡滞,本地蜂鸣器报警,同时向云端上报故障告警;
- 🔘本地 + 云端双控:增加实体按键,支持板子本地按键开关闸,云端远程控制保留,双重控制互为备份;
- 📊数据统计:云端统计每日开关闸频次,LCD 屏幕本地累计显示开关闸计数;
- ⚡低功耗改造:设备空闲时 MCU 进入休眠,收到 MQTT 指令唤醒,降低功耗,适配电池供电场景。
这个小项目麻雀虽小五脏俱全,覆盖了嵌入式 RTOS、WiFi‑MQTT 通信、PWM 外设驱动、端云协同,非常适合作为物联网入门练手项目。
总结
本次基于 STM32+Huawei LiteOS 完成智能道闸物联网实战,依靠 ESP8285 模块和 MQTT 协议打通端云通信。利用定时器输出 PWM 信号驱动 MG996R 舵机模拟闸机开关,借助 LiteOS 多任务,把屏幕显示、网络控制拆分为两个任务,互不干扰。
整体流程为云平台下发指令,开发板接收解析后控制舵机执行开闸 / 关闸,再将道闸状态回传给云端保存,串口与 LCD 同步展示运行信息。
踩坑主要集中在 WiFi、产品密钥等网络参数配置错误,以及 PWM 参数异常导致舵机乱转。通过这个项目切实理解物联网端‑云协同逻辑。还可以拓展红外自动开门、本地按键双控、故障报警、低功耗休眠等功能,是一套很不错的物联网练手项目。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐

所有评论(0)