这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » 【e起DIY】低功耗蓝牙温湿度计+2.温湿度测量

共1条 1/1 1 跳转至

【e起DIY】低功耗蓝牙温湿度计+2.温湿度测量

菜鸟
2026-06-14 21:42:29     打赏

         DHT22单总线,按照湿度整数部分(1B)+湿度小数部分 (1B)+温度整数部分(1B)+温度小数部分(1B)+校验和(1B)格式对外发送数据,这里设置PTB5做数据口,

#define DHT22_GPIO_PIN    5

static const struct device *dht_gpio_dev;

 dht_gpio_dev = DEVICE_DT_GET(DT_NODELABEL(gpiob));

主要读取函数:

int dht22_read(struct dht22_data *data)

{

    uint8_t buf[5] = {0};

    dht22_set_output(0);

    k_msleep(18);

    dht22_set_output(1);

    delay_us(20);

    dht22_set_input();

    delay_us(30);

 

    if (gpio_pin_get(dht_gpio_dev, DHT22_GPIO_PIN)) return -EIO;

    while (!gpio_pin_get(dht_gpio_dev, DHT22_GPIO_PIN));

    while (gpio_pin_get(dht_gpio_dev, DHT22_GPIO_PIN));

 

    for (int i = 0; i < 5; i++) {

         buf[i] = dht22_read_byte();

     }

 

     printk("Data=%02x %02x %02x %02x %02x\n",

            buf[0], buf[1], buf[2], buf[3], buf[4]);

 

uint16_t check = buf[0] + buf[1] + buf[2] + buf[3];

     if ((uint8_t)check != buf[4]) {

         printk("Check fail\n");

         return -EINVAL;

     }

    data->humidity = (buf[0] << 8 | buf[1]) / 10.0f;

    data->temperature =  ((buf[2] & 0x7F) << 8 | buf[3]) / 10.0f;

    if (buf[2] & 0x80) data->temperature = -data->temperature;

 

    return 0;

}

或者配置设备树:

/ {

         aliases {

                  dht22 = &dht22;

         };

 

         dht22: dht22 {

                  compatible = "aosong,dht22";

                  dio-gpios = <&gpiob 5 GPIO_ACTIVE_LOW>; /* P500 */

                  status = "okay";

         };

};

运行后可以看到温湿度数据:

温湿度测量.PNG



共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]