news 2026/9/14 19:09:27

IoT-For-Beginners 实战:在 Wio Terminal 上使用 DHT11 传感器测量温度(Grove 温湿度传感器接入指南)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
IoT-For-Beginners 实战:在 Wio Terminal 上使用 DHT11 传感器测量温度(Grove 温湿度传感器接入指南)

IoT-For-Beginners 实战:在 Wio Terminal 上使用 DHT11 传感器测量温度(Grove 温湿度传感器接入指南)

【免费下载链接】IoT-For-Beginners12 Weeks, 24 Lessons, IoT for All!项目地址: https://gitcode.com/GitHub_Trending/io/IoT-For-Beginners

导读

本篇技术指南源自开源课程 IoT-For-Beginners 的「用 IoT 预测植物生长」一课,讲解如何在 Seeed Wio Terminal 上接入 Grove DHT11 温湿度传感器并读取环境温度。你将完成硬件接线、PlatformIO 工程配置、DHT 库引入与串口读数,最终在串口监视器中持续输出摄氏温度——这是后续基于生长度日(Growing Degree Days, GDD)计算作物成熟度的第一步数据采集环节。

课程背景:为什么要测温度

在 2-farm 项目第 1 课 中,核心业务是"用 IoT 预测植物生长"。植物除了需要水、二氧化碳、光照和养分外,还需要热量才能生长。通过测量空气温度并计算 GDD(当日平均气温减去植物基准温度的累积值),农民可以预判作物何时接近成熟,从而减少人工巡查成本。

本课所处链路为:温度传感器采集 → 微控制器读取 → 串口输出。采集到可靠温度后,下一步才会上报 MQTT(参见 wio-terminal-temp-publish.md)并由服务端落盘 CSV 用于 GDD 计算。因此本文聚焦的 Wio Terminal 温度读取,是整个农业数字化方案中最底层的硬件采集环节。

硬件准备

DHT11 温湿度传感器

本课选用的传感器是DHT11 温湿度传感器(Grove 接口版本),它在同一个封装内集成了两个传感器:

  • 温度传感组件:负温度系数(NTC)热敏电阻,其电阻值随温度升高而降低;
  • 湿度传感组件:电容式湿度感应元件;
  • 片上 ADC:DHT11 是数字传感器,内部集成模数转换器,将温度和湿度数据编码为数字信号,微控制器可直接读取,无需外接模拟采样电路。

补充:市场上常见的 DHT 系列还有 DHT22(AM2302),精度与量程优于 DHT11。本课使用的 Seeed Grove 温湿度传感器库同时支持多种 DHT 变体,代码中仅需改变构造函数第二个参数即可切换。

接线任务:连接温度传感器

连接步骤:

  1. 将 Grove 4-pin 连接线的一端插入温湿度传感器插座——接口有防呆设计,只能以一个方向插入;
  2. 在 Wio Terminal 断电状态下(从电脑或其它电源断开),将连接线另一端插入 Wio Terminal 的右侧 Grove 端口(正对屏幕时,离电源键最远的那个端口)。

为什么是右侧端口?右侧 Grove 端口在 Seeed Wio Terminal 的 Arduino 引脚映射中对应数字引脚D0,这是 DHT 库实例化时使用的引脚号(下文会看到DHT dht(D0, DHT11);)。

编程实现:读取温度

创建工程与配置依赖

  1. 使用 PlatformIO 新建 Wio Terminal 工程,命名为temperature-sensor,并在setup函数中预留串口配置代码。若需要复习工程创建步骤,可参考 1-getting-started 项目第 1 课 Wio Terminal 指南。

  2. 在工程的platformio.ini中添加 Seeed Grove 温湿度传感器库依赖:

lib_deps = seeed-studio/Grove Temperature And Humidity Sensor @ 1.0.1

仓库内完整工程配置文件见 code-temperature/wio-terminal/temperature-sensor/platformio.ini,其环境声明如下:

[env:seeed_wio_terminal] platform = atmelsam board = seeed_wio_terminal framework = arduino lib_deps = seeed-studio/Grove Temperature And Humidity Sensor @ 1.0.1

关键点说明:

  • platform = atmelsam:Wio Terminal 基于 Microchip ATSAMD51 系列(ARM Cortex-M4F),需使用 atmel SAM 平台;
  • board = seeed_wio_terminal:PlatformIO 内置的板卡标识;
  • framework = arduino:使用 Arduino 框架编写固件;
  • lib_deps:PlatformIO 会自动从官方库注册表拉取Grove Temperature And Humidity Sensor @ 1.0.1(固定版本 1.0.1)。

添加库的通用流程可参考 1-getting-started 项目第 4 课的 MQTT 章节。

  1. main.cpp顶部、已有的#include <Arduino.h>之后加入两个头文件:
#include <DHT.h> #include <SPI.h>
  • DHT.h:DHT 传感器驱动库,封装了读取温湿度的核心逻辑;
  • SPI.h:确保编译时链接传感器通信所需的 SPI 相关代码。

说明:Seeed 的这款 Grove 温湿度传感器基于 DHT 协议(单总线时序),SPI 头文件用于满足库内部的底层依赖,保证链接完整。

声明 DHT 实例

setup函数之前声明传感器对象:

DHT dht(D0, DHT11);
  • 第一个参数D0:传感器所连接的引脚,即 Wio Terminal 右侧 Grove 端口对应的数字引脚;
  • 第二个参数DHT11:指定传感器型号。该库还支持 DHT22 等其它 DHT 变体,直接替换型号即可。

初始化串口与传感器

setup函数中配置串口,等待串口就绪后调用dht.begin()启动传感器:

void setup() { Serial.begin(9600); while (!Serial) ; // Wait for Serial to be ready delay(1000); dht.begin(); }
  • Serial.begin(9600):以 9600 波特率初始化串口;
  • while (!Serial) ;:阻塞等待 USB 串口枚举完成(Wio Terminal 经 USB 连接时很有必要);
  • delay(1000):留出稳定时间;
  • dht.begin():必须在读取前调用,完成传感器初始化。

循环读取并打印温度

loop函数中读取传感器数据并输出到串口:

void loop() { float temp_hum_val[2] = {0}; dht.readTempAndHumidity(temp_hum_val); Serial.print("Temperature: "); Serial.print(temp_hum_val[1]); Serial.println ("°C"); delay(10000); }

工作原理解析:

  1. float temp_hum_val[2] = {0};声明一个包含 2 个元素的浮点数组;
  2. dht.readTempAndHumidity(temp_hum_val);由库内部读取一次完整测量,并就地填充该数组:
    • temp_hum_val[0]相对湿度(C++ 数组索引从 0 开始);
    • temp_hum_val[1]温度(单位摄氏度);
  3. 取出温度元素打印Temperature: 25.00°C
  4. delay(10000);每 10 秒采样一次——环境温度变化缓慢,无需更频繁读取,也避免对传感器造成过高的读取压力。

温度单位为摄氏度。如需换算华氏度:°F = (°C / 5) × 9 + 32,例如 20°C → (20/5)×9+32 = 68°F。

编译烧录与验证

  1. 编译并烧录到 Wio Terminal(上传与构建流程可参考 第 1 课的 Hello World 应用指南);
  2. 使用 PlatformIO 的串口监视器查看输出,仓库中对应实跑输出如下:
> Executing task: platformio device monitor < --- Available filters and text transformations: colorize, debug, default, direct, hexlify, log2file, nocontrol, printable, send_on_enter, time --- More details at http://bit.ly/pio-monitor-filters --- Miniterm on /dev/cu.usbmodem1201 9600,8,N,1 --- --- Quit: Ctrl+C | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H --- Temperature: 25.00°C Temperature: 25.00°C Temperature: 25.00°C Temperature: 24.00°C

监视器每 10 秒刷新一条Temperature: xx.xx°C记录,说明 DHT11 已正常工作。若数值跳动,属于传感器正常精度波动(DHT11 温度精度典型值为 ±2°C)。

源码参考

完整可运行工程位于仓库 2-farm/lessons/1-predict-plant-growth/code-temperature/wio-terminal,核心实现见 main.cpp。它与上文代码一一对应:

#include <Arduino.h> #include <DHT.h> #include <SPI.h> #include "config.h" DHT dht(D0, DHT11); void setup() { Serial.begin(9600); while (!Serial) ; // Wait for Serial to be ready delay(1000); dht.begin(); } void loop() { float temp_hum_val[2] = {0}; dht.readTempAndHumidity(temp_hum_val); Serial.print("Temperature: "); Serial.print(temp_hum_val[1]); Serial.println ("°C"); delay(10000); }

下一步:温度数据如何走向 GDD

本课完成的温度读取仅是数据链路的起点。在 课程主文档 的后续任务中:

  1. 发布温度:通过 MQTT 将{"temperature":25}形式的 JSON 遥测发布到公共 Mosquitto Broker(参见 wio-terminal-temp-publish.md),其中温度同样取自temp_hum_val[1],并将采样间隔放宽到 10 分钟(delay(10 * 60 * 1000););
  2. 服务端落盘:服务端订阅遥测主题,把datetemperature写入 CSV(见 code-server/temperature-sensor-server),并补充时间戳(ISO 8601 格式);
  3. GDD 计算:取当天最高与最低温,按简化公式GDD = (Tmax + Tmin) / 2 − Tbase计算当日生长度日,累加后即可判断作物是否接近成熟。

例如草莓基准温度为 10°C,某日最高 25°C、最低 12°C,则当日 GDD = (25+12)/2 − 10 = 8.5,而草莓结果约需累计 250 GDD。

总结

本文完整复现了 Wio Terminal 接入 Grove DHT11 的四个关键环节:硬件接线(右侧 D0 端口)、platformio.ini库依赖配置、DHT dht(D0, DHT11)实例化与初始化、以及readTempAndHumidity数组式读取温度。掌握这些步骤后,你便拥有了可靠的温度采集能力,可无缝衔接 MQTT 遥测发布与 GDD 计算,构建完整的"预测植物生长"IoT 应用。

【免费下载链接】IoT-For-Beginners12 Weeks, 24 Lessons, IoT for All!项目地址: https://gitcode.com/GitHub_Trending/io/IoT-For-Beginners

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/14 19:08:58

PHP性能优化:利用VDSO与FFI提升时间函数效率

1. VDSO技术背景与PHP性能瓶颈在Linux系统中&#xff0c;VDSO&#xff08;Virtual Dynamic Shared Object&#xff09;是一种内核提供的机制&#xff0c;用于将部分内核功能直接映射到用户空间。这种设计的主要目的是减少用户态和内核态之间的上下文切换开销&#xff0c;特别是…

作者头像 李华
网站建设 2026/9/14 19:08:28

人形机器人关节为何首选专用DSP芯片FCP32C335

1. 为什么人形机器人关节非得用方芯FCP32C335&#xff1f;不是ARM、不是FPGA、更不是通用MCU人形机器人关节&#xff0c;表面看是电机转不转、转多快、停不停的问题&#xff0c;但实际拆开来看&#xff0c;它是一场毫秒级的实时控制战争——电流环要每20微秒采样一次&#xff0…

作者头像 李华
网站建设 2026/9/14 19:08:00

uBlock Origin 免费开源:5 步把满是广告的网页变回快和干净

uBlock Origin 免费开源&#xff1a;5 步把满是广告的网页变回快和干净 【免费下载链接】uBlock uBlock Origin - An efficient blocker for Chromium and Firefox. Fast and lean. 项目地址: https://gitcode.com/GitHub_Trending/ub/uBlock 打开一个新闻网站&#xff…

作者头像 李华
网站建设 2026/9/14 19:04:33

长沙在职提升学历,2026年成考和自考到底怎么选

在长沙做成人学历咨询&#xff0c;被问最多的第二个问题就是&#xff1a;"成考和自考&#xff0c;我该选哪个&#xff1f;" 我的回答通常是一句反问&#xff1a;你每周能稳定拿出多少小时学习&#xff1f;因为这个问题的答案&#xff0c;几乎完全由这一点决定。一、三…

作者头像 李华
网站建设 2026/9/14 19:04:24

成考能提前毕业吗?政策边界与几种常见误解(2026 更新)

直接答案&#xff1a;一般情况下不能。学制是规定的学习年限&#xff0c;不能通过缴费或申请提前毕业&#xff1b;能缩短的只有“入学前的准备期”。 成考没有提前毕业这一操作。学制是规定的学习年限&#xff0c;缴费和申请都改不了它。流传的两年拿证&#xff0c;多半是把学制…

作者头像 李华