提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

本篇分享一次物联网识别技术课程实战,使用 STM32L431 主控、ESP8285 WiFi 模块、MG996R 舵机,基于 Huawei LiteOS 实时操作系统,借助 MQTT 协议打通云平台与硬件设备,完成一套可以云端远程控制的智能道闸系统,完整复现云端下发指令→硬件执行动作→设备回传状态的端‑云协同全流程。


提示:以下是本篇文章正文内容,下面案例可供参考

一、项目背景

智能门禁、停车场道闸是物联网非常典型的落地场景。传统道闸大多只能本地操作,而物联网方案最大的价值,就是做到远程下发控制、状态实时回传,实现云端和硬件设备双向交互。

本次实验就以此为目标,不只是简单驱动舵机转动,而是完整走通 “云‑端‑边” 整套链路:云平台发送开闸 / 关闸指令,STM32 设备接收解析,驱动舵机完成道闸动作,再把当前道闸状态上报回云端保存,同时 LCD 屏幕本地实时显示设备状态。

硬件清单

  • 主控:STM32L431VC 单片机
  • 操作系统:Huawei LiteOS 实时操作系统
  • 通信模块:ESP8285 WiFi 模块(MQTT 通信)
  • 执行机构:MG996R 舵机,模拟道闸闸门
  • 外设:LCD 显示屏、智慧交通扩展板

二、系统整体架构

整个系统分为三大块:云平台、设备端硬件、上位机调试。

  1. 云端:物联网平台,负责下发控制指令,接收设备上报的道闸开关状态,记录每一次操作时间;支持网页端直接操作控制道闸。
  2. 设备端:STM32 主控 + LiteOS 系统。分为两个任务:显示任务刷新 LCD 屏幕;控制任务负责 WiFi 网络、MQTT 消息解析、舵机 PWM 控制。ESP8285 负责 WiFi 联网,MQTT 协议完成消息订阅与发布。
  3. 调试端: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 协议和物联网平台建立连接:

  1. 订阅 Topic:订阅平台命令下发主题,监听云端过来的开闸、关闸指令;
  2. 发布 Topic:舵机完成开关闸动作后,向状态上报主题发布当前道闸状态,云端存储状态与操作时间。

需要预先配置:WiFi 账号密码、服务器 IP 与端口、产品 ID、设备密钥、订阅 / 发布主题,参数一旦出错设备就无法接入平台。

4、硬件引脚分配

表格

引脚功能说明
PA11GPIO,TIM1_CH4,门禁通信、PWM 输出
PA15GPIO,TIM2_CH1,门禁通信、PWM 输出
PD13GPIO,门禁外设交互

四、关键代码逻辑解析

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. 舵机驱动核心函数

  1. Set_Servo_PWM(degree):传入目标角度,匹配对应 PWM 数值,调用定时器接口修改比较值输出 PWM 信号。
  2. Servo_Open():调用Set_Servo_PWM(DEGREE_90)舵机转到 90°,实现开闸。
  3. Servo_Close():调用Set_Servo_PWM(DEGREE_0)舵机转到 0°,实现关闸。
  4. P0080_Init():初始化 GPIO、TIM1/TIM2 定时器,开启 PWM 输出,上电默认道闸处于关闭状态。

五、实验现象与效果

  1. 开发板上电,硬件初始化完成,ESP8285 连接 WiFi,LCD 屏幕显示联网状态;
  2. 在物联网网页平台下发 “开闸” 指令:
  • 设备收到 MQTT 消息,串口助手打印日志成功打开道闸;
  • 舵机旋转至 90 度,模拟闸门抬起,LCD 同步更新状态;
  • 设备上报 “开” 状态到云平台,平台记录本次操作时间;
  1. 下发 “关闸” 指令:舵机回到 0 度,串口打印关闸日志,上报 “关” 状态至云端;
  2. 反复多次测试,云端指令下发、硬件执行、状态回传整套链路稳定运行。

云平台页面可以看到历史记录,每一次开闸关闸的状态和时间戳全部保存,真正做到远程可视化管控。

六、项目拓展与创新思路

  1. 📌本地自动感应模式:增加人体红外传感器,检测到人靠近自动开闸,离开延时自动关闸,脱离云端也可以本地自主运行;
  2. 🚨故障报警机制:增加蜂鸣器,当舵机执行动作超时,判定机械卡滞,本地蜂鸣器报警,同时向云端上报故障告警;
  3. 🔘本地 + 云端双控:增加实体按键,支持板子本地按键开关闸,云端远程控制保留,双重控制互为备份;
  4. 📊数据统计:云端统计每日开关闸频次,LCD 屏幕本地累计显示开关闸计数;
  5. ⚡低功耗改造:设备空闲时 MCU 进入休眠,收到 MQTT 指令唤醒,降低功耗,适配电池供电场景。

这个小项目麻雀虽小五脏俱全,覆盖了嵌入式 RTOS、WiFi‑MQTT 通信、PWM 外设驱动、端云协同,非常适合作为物联网入门练手项目。

总结

本次基于 STM32+Huawei LiteOS 完成智能道闸物联网实战,依靠 ESP8285 模块和 MQTT 协议打通端云通信。利用定时器输出 PWM 信号驱动 MG996R 舵机模拟闸机开关,借助 LiteOS 多任务,把屏幕显示、网络控制拆分为两个任务,互不干扰。
整体流程为云平台下发指令,开发板接收解析后控制舵机执行开闸 / 关闸,再将道闸状态回传给云端保存,串口与 LCD 同步展示运行信息。
踩坑主要集中在 WiFi、产品密钥等网络参数配置错误,以及 PWM 参数异常导致舵机乱转。通过这个项目切实理解物联网端‑云协同逻辑。还可以拓展红外自动开门、本地按键双控、故障报警、低功耗休眠等功能,是一套很不错的物联网练手项目。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐