IoT-For-Beginners 农场项目实战:在 Wio Terminal 上使用 DHT11 传感器测量温度
发布时间:2026/9/15 16:55:48 作者:尧图编辑部 阅读量:1,286

IoT-For-Beginners 农场项目实战在 Wio Terminal 上使用 DHT11 传感器测量温度【免费下载链接】IoT-For-Beginners12 Weeks, 24 Lessons, IoT for All!项目地址: https://gitcode.com/GitHub_Trending/io/IoT-For-Beginners本指南源自《IoT-For-Beginners》课程第 2 个项目Predict plant growth with IoT的第 1 课完整讲解如何在 Seeed Wio Terminal 上连接 Grove DHT11 温湿度传感器并通过 PlatformIO Arduino 框架编写固件读取环境温度。读完本文你将掌握 DHT11 的硬件原理、Grove 接口接线方法、DHT 库的调用方式以及通过串口监视器验证测量结果的完整流程为后续基于温度计算生长度日GDD打下基础。本文依据 translations/bn/2-farm/lessons/1-predict-plant-growth/wio-terminal-temp.md英文原版见 translations/en/2-farm/lessons/1-predict-plant-growth/wio-terminal-temp.md编写代码示例与 2-farm/lessons/1-predict-plant-growth/code-temperature/wio-terminal 目录下的完整工程一一对应。Grove DHT11 温湿度传感器一个封装内集成了温度与湿度两个传感器为什么农业需要测量温度在《IoT-For-Beginners》第 2 个项目「预测植物生长」中温度是衡量植物生长的核心指标。植物只有在达到其基准温度base temperature之上时才会开始生长而每个物种的基准温度、最适温度和最高温度各不相同。通过持续采集环境温度再结合公式GDD (Tmax Tmin) / 2 - Tbase计算生长度日Growing Degree Days, GDD农民即可预测作物何时接近成熟、何时适宜采收。本课要做的就是先用 Wio Terminal 完成「测量温度」这一环接上 DHT11 传感器、编写固件、在串口读出温度值。这一步是所有后续工作通过 MQTT 发布遥测、服务端存储 CSV、Jupyter Notebook 计算 GDD的数据源头。硬件准备DHT11 温湿度传感器Wio Terminal 本身不内置环境温度传感器需要外接。本课选用的传感器是 Seeed 的Grove DHT11 温湿度传感器型号标识Grove Temperature And Humidity Sensor它在同一个封装中集成了两个传感器温度传感器组件是一个NTC 热敏电阻负温度系数热敏电阻其物理特性是温度升高时电阻值下降。传感器正是通过测量这种电阻变化来推算温度。湿度传感器组件则用于测量空气相对湿度。DHT11 属于数字传感器它内部自带 ADC模数转换器能够将电阻/电容等物理量的变化转换为包含温度与湿度数据的数字信号微控制器MCU可以直接通过数字引脚读取而无需再做模拟量采集与校准。Grove 系列传感器统一采用标准化的 4 针接口信号、VCC、GND 等通过 Grove 线缆即可与 Wio Terminal 上的 Grove 插座即插即用。任务连接温度传感器接线是防呆设计过程非常简单将 Grove 线缆的一端插入温湿度传感器上的插座。该插座有方向限制只能以一个方向插入插反了插不进去。确保 Wio Terminal 已断开电源拔掉与电脑或其他电源的连接将 Grove 线缆的另一端插入 Wio Terminal右侧的 Grove 插座——以正对屏幕为准右侧即离电源按钮最远的那个插座。将 Grove 温度传感器连接到 Wio Terminal 右侧的 Grove 插座面对屏幕时离电源按钮最远的位置⚠️ 在断电状态下接线是为了避免热插拔损坏端口或器件。此插座对应的是 Wio Terminal 的D0 数字端口下文代码中传感器的声明正是基于这个引脚。使用 PlatformIO 创建工程软件部分使用 PlatformIO 开发环境。首先新建一个名为temperature-sensor的 Wio Terminal 工程。如果还不熟悉创建流程可以参考第 1 个项目第 1 课中的说明使用 PlatformIO 创建工程。仓库中的完整参考工程位于 code-temperature/wio-terminal/temperature-sensor其核心文件结构如下code-temperature/wio-terminal/temperature-sensor/ ├── include/ # 头文件目录默认占位 ├── lib/ # 第三方库目录默认占位 ├── src/ │ └── main.cpp # 主程序传感器读取与串口输出 ├── test/ # 测试目录默认占位 └── platformio.ini # PlatformIO 工程配置添加 DHT 传感器库依赖编辑工程的platformio.ini文件在lib_deps中添加 Seeed 官方 Grove 温湿度传感器库[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.ini 完全一致board seeed_wio_terminal指定目标开发板为 Wio Terminalplatform atmelsamWio Terminal 基于 Atmel SAMD51 微控制器使用 Atmel SAM 平台包framework arduino使用 Arduino 软件框架lib_deps中seeed-studio/Grove Temperature And Humidity Sensor 1.0.1指定从 PlatformIO 注册表拉取该库的 1.0.1 版本。如果你需要了解如何在 PlatformIO 工程中安装库可参考第 1 项目第 4 课的 安装 WiFi 与 MQTT Arduino 库 说明。编写温度读取程序完整源码可直接对照仓库中的 src/main.cpp。下面逐步拆解。1. 添加头文件在src/main.cpp顶部、已有的#include Arduino.h之下添加#include DHT.h #include SPI.hDHT.h是 DHT 传感器库的头文件包含操作传感器所需的类与方法引入SPI.h是为了保证编译时把与传感器通信所需的底层代码链接进固件Wio Terminal 的 Grove 数字端口经由 SPI 扩展器引出。2. 声明 DHT 传感器实例在setup函数之前声明 DHT 对象DHT dht(D0, DHT11);第一个参数D0指定传感器连接的引脚——正是前面接线时插入的 Wio Terminal 右侧 Grove 插座所对应的数字端口第二个参数DHT11告知库当前使用的是 DHT11 型号。该库还支持该系列的其他变体如 DHT22 等更换传感器时只需修改此处。3. 初始化串口与传感器在setup函数中完成串口初始化并在末尾调用dht.begin()启动传感器void setup() { Serial.begin(9600); while (!Serial) ; // 等待串口就绪 delay(1000); dht.begin(); }Serial.begin(9600)以 9600 波特率开启串口用于向电脑输出温度读数while (!Serial);在串口连接就绪前原地等待避免数据在串口未打开时丢失dht.begin()初始化 DHT11 传感器必须在读取前调用。4. 循环读取温度并打印在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); }代码逻辑说明float temp_hum_val[2] {0};声明一个包含 2 个 float 元素的数组作为读取结果的缓冲区dht.readTempAndHumidity(temp_hum_val);一次性读取温湿度并填充数组。C 数组下标从 0 开始因此湿度保存在第 0 个元素温度保存在第 1 个元素从temp_hum_val[1]取出温度值打印到串口delay(10000)让每次读取间隔 10 秒。温度不会瞬间剧变10 秒的采样周期足以稳定观测。 温度以摄氏度°C为单位读取。如需换算华氏度摄氏度数值除以 5、乘以 9、再加 32。例如 20°C → (20/5)*9 32 68°F。编译、上传与串口监视完成上述代码后通过 PlatformIO 将固件编译并上传到 Wio Terminal操作流程可参考第 1 项目第 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: CtrlC | Menu: CtrlT | Help: CtrlT followed by CtrlH --- Temperature: 25.00°C Temperature: 25.00°C Temperature: 25.00°C Temperature: 24.00°C串口输出中每次换行对应loop的一次迭代每 10 秒一次。读数会随环境温度自然波动——例如你用手握住传感器数值会缓慢上升松开后回落这正是 NTC 热敏电阻对温度变化的实时响应。进一步把温度发布到 MQTT 为 GDD 计算做准备测量到温度只是第一步。在 2-farm/lessons/1-predict-plant-growth 课程中紧接着的任务是把温度值通过 MQTT 发布出去由服务端代码订阅并写入 CSV最后用于 GDD 计算。对应的 Wio Terminal 进阶实现是 wio-terminal-temp-publish.md参考工程位于 code-publish-temperature/wio-terminal/temperature-sensor。发布版本的关键改动见 code-publish-temperature 的 main.cpp在platformio.ini中追加 WiFirpcWiFi与 MQTTPubSubClient相关依赖头文件增加ArduinoJson.h、PubSubClient.h、rpcWiFi.h并包含config.h其中配置 WiFi 的SSID/PASSWORD、MQTTBROKER地址与CLIENT_NAMEsetup中依次调用connectWiFi()与createMQTTClient()建立连接loop中不再打印温度而是构造 JSON 遥测消息发布DynamicJsonDocument doc(1024); doc[temperature] temp_hum_val[1]; string telemetry; serializeJson(doc, telemetry); client.publish(CLIENT_TELEMETRY_TOPIC.c_str(), telemetry.c_str()); delay(10 * 60 * 1000); // 10 分钟发布一次注意发布版的采样间隔从 10 秒放宽到了10 分钟10 * 60 * 1000毫秒环境温度短时间内变化很小无需频繁上报这样既节省带宽也降低功耗。串口监视器会输出类似Sending telemetry {temperature:25}的日志。服务端收到后即可记录日期与温度为 GDD 计算积累数据。小结本课完成了 Wio Terminal 温度测量的完整闭环理解 DHT11 数字传感器原理 → 通过 Grove 接口接线到 D0 端口 → 配置platformio.ini依赖 → 编写setup/loop读取温度 → 用串口监视器验证输出。仓库 code-temperature 提供了可直接对照/复用的完整工程。有了稳定的温度数据源下一步就可以把它发布到 MQTT迈入 GDD 计算与作物成熟度预测的农业物联网实战。免责声明本文基于仓库中的 AI 翻译文档孟加拉语版编写核心事实与代码均以仓库源码为权威依据如有疑问建议以英文原版文档与 code-temperature 中的工程代码为准。【免费下载链接】IoT-For-Beginners12 Weeks, 24 Lessons, IoT for All!项目地址: https://gitcode.com/GitHub_Trending/io/IoT-For-Beginners创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考