其他分享
首页 > 其他分享> > Z-Stack中DHT11温湿度传感器

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