52 lines
2.2 KiB
C
52 lines
2.2 KiB
C
#ifndef __SENSOR_H
|
||
#define __SENSOR_H
|
||
|
||
#include "main.h"
|
||
#include <stdint.h>
|
||
|
||
/* 采集终端传感器模块:USART2(PA2/PA3) 9600 485 总线,Modbus RTU 主机。
|
||
* 支持 9 种传感器(协议取自《485伴侣/多级菜单》Modbus.c,标识符对齐《采集终端/V3.0》):
|
||
* 0x01 水体PH-EC -> PH, EC
|
||
* 0x02 大气压温湿度 -> BS_T, BS_RH, BS_DO(气压kPa)
|
||
* 0x03 水体溶解氧DO59 -> DS_T(水温), DO
|
||
* 0x06 大气百叶箱 -> BY_TP, BY_RH, BY_HV, BY_CO2
|
||
* 0x07 叶面温湿度 -> YSMD_TP, YSMD_RH
|
||
* 0x08 土壤温湿度 -> SOIL_TP, SOIL_RH
|
||
* 0x09 土壤氮磷钾 -> SOIL_NV, SOIL_PV, SOIL_KV
|
||
* 0x0A 土壤PH -> SOIL_PH
|
||
* 0x0B 土壤电导率 -> SOIL_RV
|
||
* 一条总线可挂多个传感器(各自从机地址需按上表配置好,互不冲突)。
|
||
* 每 10s 本地查询刷新(OLED 实时显示);上传在"OTA 已确认"后 +5s/+30s/+60s 各一次,
|
||
* 之后每 5 分钟一次,在线传感器的参数各自组一条 iot.prop.post 上报。 */
|
||
|
||
/* 常规上传周期(联网后 +5s/+30s/+60s 暖机三次,之后按此周期) */
|
||
#define SENSOR_CYCLE_MS (5u * 60u * 1000u)
|
||
|
||
/* 传感器在线位掩码(bit0=PH-EC ... bit8=土壤EC,顺序同 sensor.c 表) */
|
||
extern uint16_t g_sensor_online;
|
||
|
||
/* 数值存储(单位见各字段注释) */
|
||
typedef struct {
|
||
float ph, ec; /* 水体PH-EC: PH值, 电导率uS/cm */
|
||
float air_t, air_rh, air_press; /* 大气压温湿度: ℃, %RH, kPa */
|
||
float water_t, do_mgl, do_sat; /* 溶解氧: 水温℃, DO mg/L, 饱和度% */
|
||
float by_t, by_rh; /* 百叶箱: ℃, %RH */
|
||
uint16_t by_hv, by_co2; /* 百叶箱: 光照Lux, CO2 ppm */
|
||
float leaf_t, leaf_rh; /* 叶面温湿度: ℃, %RH */
|
||
float soil_t, soil_rh; /* 土壤温湿度: ℃, %RH */
|
||
float soil_n, soil_p, soil_k; /* 氮磷钾: mg/kg */
|
||
float soil_ph; /* 土壤PH */
|
||
float soil_ec; /* 土壤电导率 uS/cm */
|
||
} sensor_data_t;
|
||
extern sensor_data_t g_sensor;
|
||
|
||
void sensor_init(void);
|
||
void sensor_process(void); /* app_task 循环调用:10s 本地读取 + 上传调度 */
|
||
void sensor_notify_ota_confirmed(void); /* "OTA 已确认"时调用,锚定上传计划 */
|
||
|
||
/* OLED 摘要:翻页输出在线传感器的显示内容(每 5s 翻一页,一页一路传感器,
|
||
* 最多两行)。返回 1=有内容(l1/l2 已填,用不到的行填空串),0=无在线传感器 */
|
||
int sensor_oled_summary(char *l1, char *l2, int cap);
|
||
|
||
#endif /* __SENSOR_H */
|