一:实现目标
基于 FRDM-MCXW71开发板,使用DHT11对温湿度进行采集,最后通过BLE将数据上传到微信小程序
二:开发环境搭建
项目使用VSCode构建Zepyhr开发环境,参考官方文档进行配置Zephyr lab installation and preparation — MCUXpresso for VS Code 26.05 documentation
在VSCode插件商店搜索MCUXpresso for VS Code插件进行安装
在MCUXpresso Installer中安装以下SDK

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

三、获取DHT11传感器数据
在pri.conf文件中,开启CONFIG_SENSOR、CONFIG_DHT、CONFIG_DHT_LOCK_IRQS三个开关

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

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

/* 启用 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参数

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

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或者其他的测试器件

我要赚赏金
