拓冰建站拓冰建站
首页 / 资讯中心 / 正文

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

使用 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。接线分两步将 Grove 线缆的一端插入 DHT11 传感器上的插座——线缆只有一种插入方向反了插不进去在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.hDHT.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); }这段代码的逻辑要点声明一个包含 2 个float的空数组temp_hum_val调用dht.readTempAndHumidity(temp_hum_val)该调用会把传感器读数写入数组——湿度存入第 0 个元素温度存入第 1 个元素C 数组下标从 0 开始第 0 个即第一个元素从第 1 个元素取出温度连同单位°C一起打印到串口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: CtrlC | Menu: CtrlT | Help: CtrlT followed by CtrlH --- 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 brokerconfig.h 完整内容默认 broker 为test.mosquitto.org、端口 1883loop中改用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」环节。在完成本地读数后课程会引导你通过 MQTT 发布温度遥测见上文编写服务端代码订阅遥测并追加时间戳写入 CSV见 code-server/temperature-sensor-server/app.py依据简化 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),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门