nongye/STM32F103_App1/HardWare/SENSOR/sensor.h

52 lines
2.2 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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 */