基于 Huawei LiteOS 智慧农业虚拟电子围栏实战
文章目录
前言
`
本次实验基于 STM32+Huawei LiteOS 操作系统,使用两路 DYP‑R01‑V1.0 激光测距传感器,搭建一套非接触式虚拟电子围栏系统,面向智慧农业周界入侵检测场景CSDN博…。
利用单串口分时复用技术驱动两个激光传感器,依靠 Modbus‑RTU 协议读取测距数据;LiteOS 多任务完成数据采集、入侵逻辑判断、屏幕显示;当物体遮挡激光光路,触发蜂鸣器本地报警、串口打印告警,同时将围栏状态上报物联网云平台,遮挡消失自动解除报警。
与传统实体围栏对比:虚拟激光围栏无需金属线缆,不会被农机破坏,适合大田作业环境。
🛠硬件环境
- 主控:STM32L431VC,华为智慧农业实训箱,Huawei LiteOS 系统
- 传感器:DYP‑R01‑V1.0 激光测距传感器 ×2,Modbus‑RTU,TTL 3.3V 电平
- 外设:蜂鸣器、TFT 显示屏、ESP8266WiFi 模块
- 调试工具:串口调试助手、物联网平台
传感器参数:供电 3.3‑5V;盲区 2cm;室内量程 2‑400cm;默认从机地址0x01;读距离寄存器0x0100,单位 mm。
硬件接线
设备 引脚 STM32 引脚 说明
传感器 1 TX/RX PB11/PB10 交叉连接,3.3V TTL 电平
传感器 2 TX/RX PC0/PC1 交叉连接,3.3V TTL 电平

整个系统由 STM32 核心板、智慧农业扩展板、电子围栏模块组成,通过 WiFi 接入物联网平台,PC 端串口调试,平台、微信端可以查看围栏报警状态。
硬件原理图

核心方案:仅使用LPUART1 这一个串口外设,通过软件反初始化、引脚重映射、标志位切换,分时驱动两路传感器,节约硬件串口资源。
📡通信协议:Modbus‑RTU
主机读取距离寄存器命令帧(8 字节):
01 03 01 00 00 01 85 F6
01:从机地址03:读保持寄存器功能码01 00:寄存器起始地址00 01:读取 1 个寄存器85 F6:CRC‑16 校验,低字节在前
💻软件架构:LiteOS 三任务并发
系统创建 3 个独立任务并行工作,任务之间依靠全局缓存共享传感器数据:
- fence_task(测距任务,周期 100ms)
发送 Modbus 读取指令,调用UART_Change()切换串口引脚,轮流读取两路传感器距离,解析存入全局缓存;通信超时则距离清零,防止脏数据误报。
VOID fence_task(VOID)
{
while(1)
{
DYP_Send_Data(); //发送Modbus读命令帧
DYP_Read_State(&data1_cache, &data2_cache);
LOS_TaskDelay(100);
}
}
2.UART_Change 串口切换核心函数
void UART_Change()
{
HAL_UART_DeInit(&hlpuart1); //反初始化串口外设
if(uart_flag) uart_flag = 0;
else uart_flag = 1;
HAL_Delay(1); //等待引脚电平稳定
MX_LPUART1_UART_Init(115200);
HAL_Delay(1);
}
关键点:必须先
DeInit销毁旧配置;增加延时保证引脚电平稳定;去掉延时会出现丢包、第二路传感器读不到数据。
3.Fence_Function 围栏入侵判断函数
static void Fence_Function(void)
{
uint16_t data1, data2;
uint8_t state = 0;
static uint8_t old_state = 0;
DYP_Read_Data(&data1, &data2);
if(((data1>50)&&(data1<100)) && ((data2>50)&&(data2<100)))
state = 0; //无闯入
else
state = 1; //非法闯入
if(state != old_state){ //状态跳变才触发报警,抑制抖动
if(state == 1) beep_open();
else beep_close();
}
old_state = state;
}
逻辑:两路测距同时落在 50‑100mm 判定围栏正常;任意一路超出阈值判定入侵;边沿检测,只有状态发生变化才开关蜂鸣器,避免频繁抖动报警。
4.control_task(控制任务,周期 100ms)
调用围栏判断函数,LED 闪烁控制,处理 WiFi 心跳,将围栏状态上报物联网平台。
5. view_task(显示任务)
TFT 屏幕实时显示两路测距值以及围栏工作状态。

配置 WiFi 账号密码、产品 ID、MQTT 订阅发布主题,设备完成和物联网平台对接,实现围栏状态云端上报。
📝实验现象与测试结果
实验分为三种场景:正常无遮挡、入侵遮挡、遮挡恢复。
1. 正常状态(无物体遮挡光路)
两路测距稳定 50‑100mm。
- TFT 屏幕:电子围栏状态正常
- 蜂鸣器:关闭无声
- 串口:打印传感器测距数据
- 云平台:
EnclosureInput = 0(正常)
2. 入侵状态(手放入两传感器中间遮挡光路)
- TFT 屏幕:显示存在非法闯入
- 蜂鸣器:持续蜂鸣报警
- 串口调试助手输出告警信息
- 云平台:
EnclosureInput = 1(非法闯入)
串口调试助手实际效果截图:

3. 恢复状态(手移开,遮挡消失)
测距回到 50‑100mm 区间;蜂鸣器停止;TFT 恢复正常;串口打印入侵结束;云端状态恢复 0。
物联网平台设备数据截图:

🐛调试踩坑记录
- 传感器无任何数据返回
排查:TX/RX 接反;波特率不匹配;电平 5V 烧毁传感器;硬件没有共地。 - 第二路传感器读取不到数据
排查:uart_flag标志逻辑错误;UART_Change()缺少延时;引脚配置错误。延时是串口切换稳定的关键! - 系统频繁误报警
排查:阈值设置不合理;传感器安装偏移;强光环境干扰激光测距。 - Modbus CRC 校验报错
排查:CRC16 字节顺序错误,切记低字节在前。
📚实验总结与优化思考
✨收获
- 掌握 DYP‑R01‑V1 激光传感器硬件特性,吃透 Modbus‑RTU 协议帧、CRC‑16 校验、大端数据解析。
- 理解单串口分时复用:一套硬件串口外设,软件反初始化 + 引脚切换,实现驱动多路传感器,节省硬件资源。
- LiteOS 多任务开发思路:采集任务负责硬件读取,控制任务执行业务逻辑,显示任务负责 UI 输出;多任务之间使用全局缓存交互。
- 边沿状态检测实现防抖动报警,只有状态跳变触发告警,减少系统负载。
⚠️现存不足
- 距离阈值写死在代码,传感器间距改动需要修改固件,缺少云端参数下发功能。
- DYP‑R01‑V1 强光环境测距性能下降,大田部署需要光照补偿算法。
- 只能检测是否入侵,无法区分是人、动物等目标类型。
💡创新扩展方向
- 硬件扩展:实现 4 路激光周界防护,继续扩展串口分时复用逻辑;缺点采集周期变长;也可以新增硬件串口。
- 算法优化:增加多次采样滤波,连续 N 次检测入侵才告警,过滤短暂环境扰动。
- 农业场景升级:太阳能供电;接入声光驱赶模块;搭配毫米波雷达弥补激光大雾强光短板;LoRa 远距离通信适配无公网农田。
- 功能升级:云端下发修改报警阈值,云端持久存储入侵报警时间日志。
更多推荐


所有评论(0)