使用 Wio Terminal 与 DHT11 测量环境温度:IoT 植物生长预测实战指南
2026/9/17 20:18:52 网站建设 项目流程

使用 Wio Terminal 与 DHT11 测量环境温度:IoT 植物生长预测实战指南

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

导读

本文基于 IoT-For-Beginners 课程「2-farm/lessons/1-predict-plant-growth」中面向 Wio Terminal 的温度测量实操文档(wio-terminal-temp.md),完整讲解如何将 Grove DHT11 温湿度传感器接入 Wio Terminal,并通过 PlatformIO + Arduino 框架读取温度数值。完成本指南后,你将掌握:数字温湿度传感器的工作原理、Grove 接口接线方法、DHT 库的配置与调用,以及串口监视温度数据的完整流程——这是后续通过生长度日(GDD)模型预测植物成熟时间的第一步,也是理解「精准农业」中温度遥测(telemetry)采集链路的基础。

为什么要在农场里测量温度

在 2-farm 项目第 1 课中,课程反复强调一个核心观点:植物的生长不仅依赖水分、光照、二氧化碳和养分,还依赖热量。每种植物都有其基础温度(低于此温度不生长)、最适温度(生长最快)与最高温度(高于此温度停止生长以保存水分)。

温度数据一旦被 IoT 设备采集,就可以通过 MQTT 发布到服务端保存,再在夜间任务中计算当日 GDD(生长度日)累计值,从而在作物接近成熟时自动提醒农户,避免人工逐日巡检的巨大劳动力开销。因此,在 Wio Terminal 上稳定地测量并读出环境温度,是整个智慧农业数据管线的起点

硬件准备:DHT11 数字温湿度传感器

本课使用的传感器是 Grove 温湿度传感器 DHT11,它将两个传感器封装在同一个器件中,是一个相当流行的选择。市场上还存在不少同时集成温度、湿度甚至大气压力的商用传感器。

从工作原理上看,DHT11 的温度传感元件是一个NTC 负温度系数热敏电阻——即电阻值随温度升高而降低。由于这是一个数字传感器,它内部集成了 ADC(模数转换器),能够直接输出包含温度与湿度数据的数字信号,微控制器无需自行进行模拟采样转换,只需按协议解析数字帧即可。

该文档对应的完整硬件接线图示可参考 images/grove-dht11.png 与 images/wio-temperature-sensor.png。

连接传感器:Grove 接口与 Wio Terminal 的数字口

Grove 温湿度传感器需要连接到 Wio Terminal 的数字口(digital port)。接线分两步:

  1. 将 Grove 线缆的一端插入 DHT11 传感器上的插座——线缆只有一种插入方向,反了插不进去;
  2. Wio Terminal 断电(断开与电脑或其他电源的连接)的前提下,将线缆另一端插入 Wio Terminal 屏幕朝向你时的右侧 Grove 插座,即离电源按键最远的那个插座。

⚠️ 接线必须在断电状态下进行,这是所有 Grove 硬件操作的基本安全规范。

编程前的工程准备:PlatformIO 项目与库依赖

Wio Terminal 的固件开发使用 PlatformIO + Arduino 框架。请先创建一个全新的 Wio Terminal 工程并命名为temperature-sensor(若不清楚如何创建 PlatformIO 工程,可参考 第 1 项目第 1 课的 PlatformIO 建工程指南)。

在 platformio.ini 中声明传感器库

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

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

仓库中完整的工程配置如下(code-temperature/wio-terminal/temperature-sensor/platformio.ini),其中atmelsam平台与seeed_wio_terminal开发板对应 Wio Terminal 的 ATSAMD51 微控制器:

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

若需要回顾在 PlatformIO 中添加第三方库的完整步骤,可参考 第 1 项目第 4 课的 MQTT 库安装说明。

引入 DHT 头文件

main.cpp顶部已有的#include <Arduino.h>之下,加入以下两条#include指令:

#include <DHT.h> #include <SPI.h>
  • DHT.h包含了驱动 DHT11 传感器本身的代码;
  • SPI.h用于确保与传感器通信所需的底层代码在编译时被正确链接进来。

核心代码:声明并初始化 DHT 传感器

声明 DHT 实例

setup函数之前声明 DHT 对象:

DHT dht(D0, DHT11);

这行代码创建了一个DHT类的实例,用于管理这颗数字温湿度传感器(Digital Humidity and Temperature)

  • 第一个参数D0指定传感器挂接在 Wio Terminal 的D0引脚上,即右侧那个 Grove 插座;
  • 第二个参数DHT11告知库当前使用的是 DHT11 型号——所用库还支持该传感器的其他衍生型号(如 DHT22 等)。

setup:串口初始化与传感器启动

setup函数负责串口配置与传感器上电:

void setup() { Serial.begin(9600); while (!Serial) ; // Wait for Serial to be ready delay(1000); dht.begin(); }
  • Serial.begin(9600)以 9600 波特率开启串口,用于打印温度读数;
  • while (!Serial) ;阻塞等待串口就绪(此时枚举 USB 虚拟串口需要时间);
  • delay(1000)再等待 1 秒,确保 USB 串口完全稳定;
  • dht.begin()必须在delay之后调用,完成 DHT 传感器内部状态初始化。

loop:读取温度并打印

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. 声明一个包含 2 个float的空数组temp_hum_val
  2. 调用dht.readTempAndHumidity(temp_hum_val),该调用会把传感器读数写入数组——湿度存入第 0 个元素,温度存入第 1 个元素(C++ 数组下标从 0 开始,第 0 个即"第一个"元素);
  3. 从第 1 个元素取出温度,连同单位°C一起打印到串口;
  4. delay(10000)使每次采样间隔 10 秒——环境温度变化缓慢,无需更高频采样,同时也避免对传感器造成过多读写压力。

完整可编译代码可在仓库中直接查看:code-temperature/wio-terminal/temperature-sensor/src/main.cpp。

🇺🇸 温度默认以摄氏度读取。若要转换为华氏度:将摄氏度值除以 5,乘以 9,再加 32。例如 20°C → ((20/5)*9) + 32 = 68°F。

编译、烧录与串口监视

完成代码编写后,在 PlatformIO 中执行构建并烧录到 Wio Terminal(构建与烧录的完整步骤可参考 第 1 课 Hello World 烧录指南)。

烧录成功后,通过串口监视器(PlatformIO 的device monitor任务)观察输出,应看到类似以下内容:

> 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

/dev/cu.usbmodem1201是 macOS 下 Wio Terminal 的串口设备路径;在 Windows 上通常显示为COMx,在 Linux 上则是/dev/ttyACM0之类的设备节点。9600,8,N,1表示波特率 9600、8 数据位、无校验、1 停止位的串口参数,与代码中Serial.begin(9600)一致。

进阶:从本地读数到 MQTT 遥测发布

温度测量本身只是第一步。在 wio-terminal-temp-publish.md 中,课程进一步把温度数据通过 MQTT 发布到公共 Mosquitto broker,供服务端保存并用于后续 GDD 计算。仓库中对应的完整实现位于 code-publish-temperature/wio-terminal,其要点包括:

  • platformio.ini中追加 MQTT 与 WiFi 相关依赖(查看完整配置):
lib_deps = seeed-studio/Grove Temperature And Humidity Sensor @ 1.0.1 knolleary/PubSubClient @ 2.8 bblanchon/ArduinoJson @ 6.17.3 seeed-studio/Seeed Arduino rpcWiFi @ 1.0.5 seeed-studio/Seeed Arduino FS @ 2.1.1 seeed-studio/Seeed Arduino SFUD @ 2.0.2 seeed-studio/Seeed Arduino rpcUnified @ 2.1.3 seeed-studio/Seeed_Arduino_mbedtls @ 3.0.1
  • config.h中配置 WiFi 凭据与 MQTT broker(config.h 完整内容),默认 broker 为test.mosquitto.org、端口 1883;
  • loop中改用DynamicJsonDocument构造 JSON 遥测载荷,并只发送温度字段:
float temp_hum_val[2] = {0}; dht.readTempAndHumidity(temp_hum_val); DynamicJsonDocument doc(1024); doc["temperature"] = temp_hum_val[1];
  • 由于温度在短时间内变化不大,发布间隔从本课的 10 秒调整为 10 分钟(delay(10 * 60 * 1000),即 10 × 60 秒 × 1000 毫秒)。

发布成功时,串口输出形如:

Connecting to WiFi.. Connected! Attempting MQTT connection...connected Sending telemetry {"temperature":25} Sending telemetry {"temperature":25}

与课程整体的衔接:GDD 计算管线

本节温度采集属于 「Predict plant growth with IoT」 课程「测量环境温度(Measure ambient temperature)」环节。在完成本地读数后,课程会引导你:

  1. 通过 MQTT 发布温度遥测(见上文);
  2. 编写服务端代码订阅遥测并追加时间戳写入 CSV(见 code-server/temperature-sensor-server/app.py);
  3. 依据简化 GDD 公式GDD = (Tmax + Tmin) / 2 - Tbase逐日计算作物累计生长度日,进而判断成熟期。

Wio Terminal 的串口温度采样即这条数据链路的源头——温度数据的准确性与采样节奏,直接决定了后续 GDD 计算的质量。

常见问题与注意事项

  • 串口无输出:检查while (!Serial)阻塞是否因 USB 串口未就绪导致,以及串口监视器波特率是否与代码中的9600一致;
  • 传感器读数异常:确认 Grove 线缆是否插牢、是否连接到右侧(D0)而非左侧插座,因为DHT dht(D0, DHT11)中的引脚参数必须与物理接线对应;
  • 接线安全:所有 Grove 线缆的连接与断开都应在 Wio Terminal 断电状态下进行;
  • 采样频率:本课代码以 10 秒为周期打印读数用于调试;正式采集场景可参考发布版本把间隔放大到 10 分钟,以降低功耗与网络占用。

至此,你已完整走通「Wio Terminal + DHT11 温度采集」的全部流程——从硬件接线、库配置、代码编写到串口验证,为后续通过 MQTT 上云并计算 GDD 奠定了坚实的硬件基础。

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

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

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询