Z-Stack中DHT11温湿度传感器
作者:互联网
hal_dht11.h
hal_dht11.h对外提供了一个简单的结构体
typedef struct {
unsigned char ok; //!< 数据是否合法
unsigned char temp; //!< 温度数据, 0~50.
unsigned char humi; //!< 湿度数据, 20~95.
} halDHT11Data_t;
不难看出,halDHT11Data_t结构体里同时打包了测量的温度数据和湿度数据,因此以结构体形式传递数据时,也是两个测量数据一起传。
得到halDHT11Data_t型数据的方法是hal_dht11.h提供的getData方法:
halDHT11Data_t halDHT11GetData(void);
这个方法也是直接返回打包好的数据,终端用halDHT11Data_t型变量接收。
除此之外hal_dht11.h的方法就只有init的了,不多说了。
接收数据实例
既然结构体里有打包有两个测量数据,那么我们读取的时候也可以同时读两个。不过实际项目中并不推荐这样,还是建议分别处理测量数据,实例代码如下:
void zb_port_get_and_report_temperature()
{
static int16_t present_temperature_ = 0xFF; // 保存历史数据
halDHT11Data_t data = halDHT11GetData();//从温湿度驱动程序拿到数值
if (!data.ok) return;//数据不合法,返回
HalLcdWriteStringValue("temp:", data.temp, 10, 1);
if (present_temperature_ == data.temp) return;//避免没有必要的report
if (!zbnwk_->joined()) return;//避免非法report
present_temperature_ = (int16_t)data.temp;
zbnwk_->report(ENDPOINT_ZHA, 0, ENDPOINT_ZHA,
ZCL_CLUSTER_ID_MS_TEMPERATURE_MEASUREMENT,
ATTRID_MS_TEMPERATURE_MEASURED_VALUE,
ZCL_DATATYPE_INT16,
&(present_temperature_));
}
void zb_port_get_and_report_relative_humidity()//获取湿度同理
{
static int16_t present_humidity_ = 0xFF;
halDHT11Data_t data = halDHT11GetData();
if (!data.ok) return;
HalLcdWriteStringValue("humi:", data.humi, 10, 2);
if (present_humidity_ == data.humi) return;
if (!zbnwk_->joined()) return;
present_humidity_ = (int16_t)data.humi;
zbnwk_->report(ENDPOINT_ZHA, 0, ENDPOINT_ZHA,
ZCL_CLUSTER_ID_MS_RELATIVE_HUMIDITY,
ATTRID_MS_RELATIVE_HUMIDITY_MEASURED_VALUE,
ZCL_DATATYPE_INT16,
&(present_humidity_));
}
标签:return,温湿度,humi,halDHT11Data,report,data,Stack,present,DHT11 来源: https://www.cnblogs.com/shanzr/p/16188033.html