type
status
date
slug
summary
tags
category
icon
password
Property
Apr 15, 2025 12:16 AM
Created time
Jan 27, 2025 07:56 AM
家里的气象传感器总在发生故障,我想着重新做一个算了,大概有这样的需求:
- 高精度测量气温、空气湿度、大气压力
- 能够记录现有的翻斗式雨量筒的计数脉冲
- 能够不依赖市电运行,停电时也可靠
- 通过一定手段将数据从8楼天台传回5楼的网关
目前家里的气象相关设备大致是这样的
- 7楼是架空隔热层,目前主要作为杂物间,这里有一根从5楼拉上来的网线,同时放了一台路由器作为AP以提供WIFI信号给7楼和8楼天台的设备
- 设备连接到WIFI后将采样数据以MQTT消息的形式发送到5楼的主路由器,五楼的小服务器有一个专门的脚本会订阅MQTT报文并解析,处理,存储这些数据到数据库;同时还有另一个脚本对这些数据解析之后发送到一块很小的显示屏幕上
- 有一个闲鱼淘来的专业自动气象站成品,这个设备最关键的是具有光学雨量传感器和超声风速传感器。设备使用12V供电,对供电稳定性要求较高且做不到超低功耗,使用485总线通信,内容为ASCII文本。我把这个设备架设在顶楼天台的最高处,7楼放置一个12V电源、485转串口模块、ESP32C3模块,通过长度大概十米的网线进行供电和接收数据,ESP32接收到数据后会原封不动地将数据以MQTT报文形式发送出去。
- 目前已知故障:温湿度传感器读数异常,气压传感器损坏,从去年下半年起再未接收到设备发来的485报文过。
- 顶楼天台
头有些痛,有空再补充。。。
后面是一些零零散散的测试日志
通信测试:
在五楼和八楼天台启动两个搭载PINGPONG测试例程的Lora模块,统一设置频宽125kHz,扩频因子SF=9,编码率4/6,频率433Mhz,发射功率22dbm,前导码长度8;测得五楼接收到的数据平均Rssi约为-98.2dbm;Snr约为-6.2dbm,基本可用;
后续部署工作中,统一将参数调整为频宽125kHz,扩频因子SF=10,编码率4/8,频率470Mhz,发射功率22dbm,前导码长度6
协议规范
数据说明
一份lora报文包含 1字节报文前缀+n字节报文实际内容
报文前缀
- 报文前缀的高四位代表设备地址,低四位代表数据类型
- 设备地址目前分配如下:
设备地址 | 对应设备 | 设备功能 |
0x0 | ESP32+Lora主控 | ㅤ |
0x1 | 翻斗式机械雨量桶 | ㅤ |
0x2 | SHT BMP温湿度气压传感器集成 | ㅤ |
0x3 | MULTI-5P 自动气象站 | ㅤ |
0xf | 广播地址,暂时不使用 | ㅤ |
1. 除主控外的各采样传感器上传数据时地址写设备自身的; 2. 主控下发数据、ACK响应等行为时地址写需要发送到的对应传感器的; 3. 一般来说,主控的地址不会出现在实际运行的交互中报文中,该地址将考虑用作后续协议扩展
- 数据类型目前分配如下
数据类型 | 类型名称 | 报文实际内容 | 内容长度 |
0x0 | ACK响应报文 | ㅤ | 0 |
0x1 | 校时报文 | uint32秒级别,数据到达时的时间戳,已预估空中时间和设备处理时间;各设备RTC校正结果的误差不应超过±2s | 4 |
0x2 | 雨量计数报文 | uint32时间戳s uint16降水计数值0.2mm uint16温度℃ uint16电压mV | 10 |
ㅤ | ㅤ | ㅤ | ㅤ |
- - 数据类型: - 0x0 ACK响应报文,实际数据:无 - 0x1 校时报文 内容包含时间戳(已经附加上传输的空中时间和处理时间预估了,RTC校正结果的误差不应超过±2s)4字节 uint32 - 0x2 雨量计数数据报文,实际数据:【时间戳 降水计数值 温度 电压】4+2+1+2 = 9字节 - 0x3 雨量传感器心跳帧报文,实际数据:【时间戳 降水计数值 温度 电压】4+2+1+2 = 9字节
- 青空气象站报文
## 主控行为
- 主控监听并接收所有来自传感器设备的数据
- 主控接收到一般数据将回复ACK响应报文
- 主控接收到心跳报文将回复校时报文
含义 | 字节 |
时间戳 | 4 |
TMP119温度 最大值 | 2 |
TMP119温度 最小值 | 2 |
TMP119温度 平均值 | 2 |
BMP581温度 最大值 | 2 |
BMP581温度 最小值 | 2 |
BMP581温度 平均值 | 2 |
BMP581气压 最大值 | 3 |
BMP581气压 最小值 | 3 |
BMP581气压 平均值 | 3 |
HDC3022温度 最大值 | 2 |
HDC3022温度 最小值 | 2 |
HDC3022温度 平均值 | 2 |
HDC3022湿度 最大值 | 2 |
HDC3022湿度 最小值 | 2 |
HDC3022湿度 平均值 | 2 |
HDC3022湿度 加热状态 | 1 |
STM32温度 | 1 |
STM32电压 | 2 |
共计 | 41 |
- ## 报文发送时隙分配 - 雨量传感器心跳帧在每日06:00:35发送 - 温湿度气压传感器心跳帧在每日06:05:35发送 - 风速雨量传感器心跳帧在每日06:10:35发送 - 温湿度气压传感器数据在每分钟15秒发送 - 风速雨量传感器数据在每分钟25秒发送 - 雨量传感器数据由在每分钟05秒发送,无降水时则不发送 - 当前分钟发送的数据内容均截至上一分钟结束 ## 冲突处理 - 若未收到主控的ACK报文,将进行信道空闲判断和至多2次重传
设备地址 | 对应设备 | 设备功能 |
0x0 | ESP32+Lora主控 | ㅤ |
0x1 | 翻斗式机械雨量桶 | ㅤ |
0x2 | SHT BMP温湿度气压传感器集成 | ㅤ |
0x3 | MULTI-5P 自动气象站 | ㅤ |
0xf | 广播地址,暂时不使用 | ㅤ |
- 作者:叶修齐
- 链接:https://notion.siuze.top/article/18851c8e-64d0-80f7-af02-d1954b76bcce
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。