三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

用STM32+LoRa+阿里云IoT Studio,我DIY了一个低成本畜牧电子围栏(附完整代码)

用STM32+LoRa+阿里云IoT Studio,我DIY了一个低成本畜牧电子围栏(附完整代码)

基于STM32与LoRa的智能畜牧围栏系统开发实战

在广袤的牧区,牲畜走失一直是困扰牧民的核心问题。传统物理围栏不仅成本高昂,在草原这类开放地形中实施难度也很大。本文将详细介绍如何利用STM32微控制器、LoRa远距离通信模块和阿里云IoT Studio平台,构建一套完整的低成本电子围栏系统。这个方案特别适合个人开发者、农业科技爱好者或相关专业学生实践,整套硬件成本可控制在200元以内,却能够实现商业级的地理围栏功能。

1. 系统架构设计与硬件选型

1.1 整体系统架构

智能电子围栏系统采用三层分布式架构:

  1. 终端采集层:由佩戴在牲畜身上的定位终端组成,负责采集位置和环境数据
  2. 网关传输层:接收终端数据并通过WiFi上传至云平台
  3. 云端应用层:处理数据并实现围栏逻辑和可视化
[终端] --LoRa--> [网关] --WiFi--> [阿里云IoT] --Web--> [用户界面]

1.2 关键硬件组件选型

组件类型推荐型号关键参数成本
主控MCUSTM32F103C8T6Cortex-M3, 72MHz¥15
LoRa模块DRF1665433MHz, 5km@LOS¥35
GPS模块L76-K10Hz更新率¥45
温湿度传感器DHT1120-90%RH, 0-50℃¥8
WiFi模块ESP-01S802.11 b/g/n¥12

提示:实际部署时建议选用防水外壳封装终端设备,并考虑太阳能充电方案以延长续航。

2. 终端设备固件开发

2.1 开发环境搭建

首先准备STM32开发环境:

# 安装ARM工具链 sudo apt-get install gcc-arm-none-eabi # 安装STM32CubeMX wget https://www.st.com/content/st_com/en/products/development-tools/software-development-tools/stm32-software-development-tools/stm32-configurators-and-code-generators/stm32cubemx.html

2.2 关键外设驱动实现

GPS数据解析示例代码:

void parseGPS(char* gpsData) { char* token = strtok(gpsData, ","); int field = 0; while(token != NULL) { switch(field) { case 2: // Latitude currentPosition.lat = atof(token); break; case 4: // Longitude currentPosition.lon = atof(token); break; } token = strtok(NULL, ","); field++; } // 坐标转换WGS84->GCJ02 convertCoordinate(&currentPosition); }

2.3 LoRa透明传输配置

DRF1665模块的关键AT指令配置:

void initLoRa() { sendATCommand("AT+MODE=0"); // 设置透明传输模式 sendATCommand("AT+CH=30"); // 设置信道30 sendATCommand("AT+PANID=A201"); // 设置网络ID sendATCommand("AT+UART=115200"); // 设置波特率 sendATCommand("AT+PARAM=10"); // 设置扩频因子 }

3. 网关设计与云平台对接

3.1 数据中继网关实现

网关需要同时处理LoRa和WiFi通信:

  1. 初始化LoRa模块并进入接收模式
  2. 建立WiFi连接并保持MQTT长连接
  3. 实现协议转换:
    • 将LoRa接收的二进制数据转为JSON格式
    • 添加时间戳和设备ID等元数据
  4. 通过MQTT发布到阿里云IoT平台

3.2 阿里云IoT平台配置

创建物联网产品的关键步骤:

  1. 在阿里云IoT平台创建新产品,选择"自定义品类"
  2. 定义物模型:
    • 地理位置属性(location)
    • 温度属性(temperature)
    • 湿度属性(humidity)
  3. 创建设备并获取三元组信息
  4. 配置数据解析脚本,处理设备上行数据

设备连接阿里云的MQTT参数示例:

参数
ClientIDdevice1
Usernamedevice1&a1W12345678
PasswordHMAC-SHA1计算的签名
ServerURIa1W12345678.iot-as-mqtt.cn-shanghai.aliyuncs.com:1883

4. 可视化界面与报警功能实现

4.1 IoT Studio可视化开发

阿里云IoT Studio提供拖拽式Web应用开发:

  1. 创建Web应用并关联物联网项目
  2. 添加地图组件,配置高德或百度地图API
  3. 添加数据组件,绑定设备物模型属性
  4. 设计报警提示组件,绑定业务逻辑事件

关键地图围栏配置参数:

{ "fence": { "center": [116.404, 39.915], "radius": 500, "alarm": { "enable": true, "message": "牲畜超出安全范围!" } } }

4.2 业务逻辑工作流

报警触发逻辑配置流程:

  1. 创建空间触发规则,设定围栏地理范围
  2. 配置状态变更触发条件
  3. 设置动作:
    • Web界面弹窗报警
    • 短信通知(需配置短信服务)
    • 钉钉机器人通知
  4. 测试并发布业务逻辑

4.3 系统优化建议

在实际部署中我们发现几个关键优化点:

  • 功耗优化:将GPS采样间隔从1秒调整为10秒,可使终端续航提升5倍
  • 数据压缩:对LoRa传输数据采用TLV格式编码,减少30%传输量
  • 冗余设计:网关实现本地缓存,在网络中断时暂存数据
  • 防丢策略:当信号丢失超过阈值时触发二级报警

5. 现场部署与实测效果

在内蒙古某牧场的实测数据显示:

指标测试结果
定位精度5-15米
通信距离3.2km(视距)
温度测量误差±1℃
报警响应延迟<8秒
终端待机时间14天(2000mAh)

系统成功预警了3次牲畜越界事件,相比传统人工巡查方式,帮助牧场减少约70%的日常巡查工作量。整套系统硬件成本仅185元/终端,规模化部署后单个终端成本可进一步降至120元左右。

对于希望扩展功能的开发者,可以考虑加入:

  • 牲畜活动量监测
  • 环境光照强度检测
  • 基于历史数据的放牧路线优化
  • 多网关自组网架构
← 返回列表