这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » 基于FRDM-MCXW71+zephyr+DHT11温湿度采集

共1条 1/1 1 跳转至

基于FRDM-MCXW71+zephyr+DHT11温湿度采集

菜鸟
2026-06-22 21:52:34     打赏
  1. 一:实现目标

  2. 基于 FRDM-MCXW71开发板,使用DHT11对温湿度进行采集,最后通过BLE将数据上传到微信小程序

  3. 二:开发环境搭建

  4. 项目使用VSCode构建Zepyhr开发环境,参考官方文档进行配置Zephyr lab installation and preparation — MCUXpresso for VS Code 26.05 documentation

  5. 在VSCode插件商店搜索MCUXpresso for VS Code插件进行安装

  6. image.png

  7. MCUXpresso Installer中安装以下SDK



  8. image.png


  9. 在vscode中,通过New Project Wizard创建新工程即可


  10. image.png


  11. 三、获取DHT11传感器数据


  12. 在pri.conf文件中,开启CONFIG_SENSOR、CONFIG_DHT、CONFIG_DHT_LOCK_IRQS三个开关


  13. image.png


  14. 创建一个overlay文件,用来对设备树进行配置,注意文件名一定要与开发板的板级dts文件一致,只有后缀名不同


  15. image.png


  16. 在frdm_mcxw71.overlay文件中进行以下配置


  17. image.png

  18. /* 启用 GPIOB(PTB5 所在的 GPIO 端口)*/
    &gpiob {
        status = "okay";
    };
    
    /* 添加 DHT11 传感器节点 */
    / {
        dht11_sensor: dht11 {
            compatible = "aosong,dht";
            dio-gpios = <&gpiob 5 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>;
        };
    };


在main.c文件中,可以通过 DEVICE_DT_GET_ANY获取DHT11数据,传递的参数是在overlay文件中定义的设备树的compatible参数

image.png

通过sensor_channel_get函数可以获取温度、湿度数据,并且可以使用printf进行串口输出

image.png

while (1) {
    /* LED 闪烁 */
    ret = gpio_pin_toggle_dt(&led);
    if (ret < 0) {
        return 0;
    }
    led_state = !led_state;

    /* 读取 DHT11 */
    ret = sensor_sample_fetch(dht11);
    if (ret < 0) {
        printf("DHT11: sample fetch failed (ret=%d)\n", ret);
    } else {
        struct sensor_value temp, humidity;
        sensor_channel_get(dht11, SENSOR_CHAN_AMBIENT_TEMP, &temp);
        sensor_channel_get(dht11, SENSOR_CHAN_HUMIDITY, &humidity);
        printf("Temperature: %d.%d°C, Humidity: %d.%d%%\n",
               temp.val1, temp.val2 / 100000,
               humidity.val1, humidity.val2 / 100000);
    }

    k_msleep(SLEEP_TIME_MS);
}

DHT11的分辨率只能做到整数,无法实现小数点后的温湿度测量,若想提高分辨率,需要更换为DHT22或者其他的测试器件


共1条 1/1 1 跳转至

回复

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