IoT-For-Beginners:在 Wio Terminal 上接入 DHT11 传感器实测环境温度(农业 IoT 第一课实战) IoT-For-Beginners在 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 仓库中用 IoT 预测植物生长课程2-farm 项目第 1 课的 Wio Terminal 温度测量章节编写。读完本篇你将掌握如何为 Seeed Wio Terminal 硬件接线 DHT11 温湿度传感器、如何用 PlatformIO 搭建并配置temperature-sensor项目、如何调用 Seeed Grove 传感器库读取温度值并通过串口监视器验证每秒级的实时读数——这是后续用生长度日GDD, Growing Degree Days算法预测作物成熟度的数据采集基础。1. 任务背景为什么农业场景要测温度在该课程的完整脉络中见 2-farm/lessons/1-predict-plant-growth/README.md植物生长需要水、二氧化碳、养分、光照和热量。温度决定了植物从基础温度base到最适温度optimum再到最高温度maximum之间的生长速率曲线农民依赖温度数据结合 GDD 计算来预测作物生长与成熟。因此本课的第一个动手任务就是给你的 IoT 设备Wio Terminal接上一个温度传感器并把真实温度值读出来。本课根据设备类型提供了分轨教程Arduino 类设备Seeed Wio Terminal本文主题原文档为 wio-terminal-temp.md单板计算机类设备Raspberry Pi见 pi-temp.md2. 硬件准备DHT11 温湿度传感器Wio Terminal 本身不内置温度传感器需要外接一个。本教程使用的传感器是DHT11 湿度与温度传感器Grove 接口版本它把温度与湿度两个传感单元封装在同一个外壳里。这类温湿度一体传感器在市面上非常常见不少商用型号还会额外集成气压测量。其温度传感元件是一个负温度系数热敏电阻NTC thermistor——一种阻值随温度升高而降低的电阻器件。关键点这是一个数字传感器。传感器内部自带模数转换器ADC把模拟传感信号转换为由微控制器可以直接读取的数字信号内含温度与湿度数据。这意味着你不需要在 Wio Terminal 上再配置 ADC 通道只要按正确的协议时序与传感器通信即可。2.1 任务连接温度传感器Grove 温度传感器可以连接到 Wio Terminal 的任意数字 Grove 端口本教程指定使用右侧面向屏幕方向时的右侧那个端口。接线步骤将 Grove 线缆的一端插入温湿度传感器上的插座。接口做了防呆设计只能以一个方向插入。在 Wio Terminal 与电脑或其他电源断开连接的状态下将线缆另一端插入面向屏幕时右侧的 Grove 插座——即距离电源按钮最远的那个插座。这个右侧最远的插座在软件层面就是D0端口后面的代码会用到这个定义。3. 编程用 PlatformIO 读取 DHT11 温度硬件接好后下面进入编程环节共 7 个步骤。3.1 创建 PlatformIO 项目使用 PlatformIO 创建一个全新的 Wio Terminal 项目命名为temperature-sensor。如需回顾项目创建流程可参考第 1 课第 1 节的教程1-getting-started/lessons/1-introduction-to-iot/wio-terminal.md 中的 Create a PlatformIO project 与 Write the hello world app 小节。在项目的platformio.ini中添加 Seeed Grove 温湿度传感器库依赖lib_deps seeed-studio/Grove Temperature And Humidity Sensor 1.0.1添加库的通用方法可参考第 1 课第 4 节的教程1-getting-started/lessons/4-connect-internet/wio-terminal-mqtt.md 中的 Install the WiFi and MQTT Arduino libraries 小节。仓库中配套的完整platformio.ini位于 code-temperature/wio-terminal/temperature-sensor/platformio.ini除了上面的lib_deps外还固定了构建环境[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 所用的 ATmel SAM 系列平台board seeed_wio_terminal指定开发板型号framework arduino使用 Arduino 框架。注意库名是精确锁版本的 1.0.1可保证课程代码在不同时间构建行为一致。3.2 引入头文件在主源文件顶部、已有的#include Arduino.h之下添加#include DHT.h #include SPI.hDHT.h头文件包含与传感器通信的核心代码DHT类定义加入SPI.h是为了确保编译链接阶段把与传感器交互所需的代码一并链入。3.3 声明 DHT 传感器实例在setup函数之前声明传感器DHT dht(D0, DHT11);这声明了DHT类DigitalHumidity andTemperature数字温湿度传感器的一个实例第一个参数D0传感器所连接的 Grove 端口即 Wio Terminal 右侧那个插座第二个参数DHT11告诉库当前使用的是 DHT11 型号。该库同时支持 DHT 系列的其他变体如 DHT22因此必须显式指明。3.4 setup 函数初始化串口与传感器void setup() { Serial.begin(9600); while (!Serial) ; // Wait for Serial to be ready delay(1000); dht.begin(); }逐段说明Serial.begin(9600)以 9600 波特率打开串口与后续platformio device monitor使用的 9600 波特率一致while (!Serial);空循环等待串口硬件就绪避免早期输出的字符丢失这是 SAM 系开发板的标准写法delay(1000)再等待 1 秒给传感器上电稳定留出余量dht.begin()在setup末尾调用启动 DHT 传感器之后的readTempAndHumidity才能工作。3.5 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 个浮点数的数组并初始化为 0调用dht.readTempAndHumidity(temp_hum_val)该调用会把两个值填入数组——湿度填入下标 0C 数组从 0 开始编号下标 0 是第一个元素温度填入下标 1从下标 1 取出温度值打印到串口格式为Temperature: 25.00°Cdelay(10000)每隔 10 秒读取一次——这也是 DHT11 这类传感器建议的最小采样间隔频繁读取会降低精度并可能读到无效值。单位说明传感器读数以摄氏度为单位。如需换算成华氏度摄氏度值 ÷ 5 × 9 32。例如 20°C → ((20/5)×9)32 68°F。3.6 完整参考实现仓库为这一步提供了可直接对照或直接使用的完整工程位于 code-temperature/wio-terminal 目录。其主源文件 src/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); }可见调用链非常直接setup()中dht.begin()初始化 →loop()中readTempAndHumidity()阻塞读取一次 →Serial输出 → 10 秒后再循环。3.7 构建、上传与串口验证使用 PlatformIO 构建并把代码上传到 Wio Terminal上传方法同样见 1-getting-started/lessons/1-introduction-to-iot/wio-terminal.md 中 Write the hello world app 小节。上传完成后用串口监视器观察温度输出命令为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注意输出中 Miniterm 行显示的是9600,8,N,1与setup()中的Serial.begin(9600)对应。若串口无输出优先检查监视器波特率是否为 9600、Grove 线是否插到位、传感器是否插在了 D0右侧最远插座上。到这里你已经成功让 Wio Terminal 周期性地读出真实环境温度了。4. 源码视角这个读数如何流转到后续环节从仓库的源码结构看本课代码是整个温度遥测链的第一环后续环节都有配套工程可以对照本地读取本文code-temperature/wio-terminal —— 只读传感器并打印MQTT 上云code-publish-temperature/wio-terminal —— 在本文代码基础上增加了rpcWiFi.h、PubSubClient.hMQTT与ArduinoJson.h。其 src/main.cpp 中传感器初始化方式与本文完全相同DHT dht(D0, DHT11); dht.begin();差别在于loop()里把temp_hum_val[1]序列化进 JSONdoc[temperature] temp_hum_val[1];后发布到 MQTT 主题并把轮询间隔拉长到 10 分钟delay(10 * 60 * 1000)服务端处理code-server/temperature-sensor-server 中的 Python 服务端接收遥测。相关的配套教程分别是 wio-terminal-temp-publish.md发布温度到云端与 single-board-computer-temp-publish.md。可以推断课程刻意把读传感器与传传感器拆成两个递进任务先把硬件抽象与串口调试做扎实再叠加网络层。5. 小结要素本文取值/做法传感器DHT11 温湿度一体Grove 接口NTC 热敏电阻内置 ADC 的数字传感器连接端口Wio Terminal 右侧距电源键最远Grove 插座软件端口名D0构建环境platform atmelsam、board seeed_wio_terminal、framework arduino库依赖seeed-studio/Grove Temperature And Humidity Sensor 1.0.1锁定版本传感器实例DHT dht(D0, DHT11);setup中dht.begin()启动读取 APIdht.readTempAndHumidity(temp_hum_val)下标 0 湿度下标 1 温度°C采样间隔delay(10000)每 10 秒一次验证方式platformio device monitor9600 波特率输出Temperature: xx.xx°C至此完成了温度采集端的完整闭环。下一步可沿仓库继续推进将读数通过 MQTT 发布到云端code-publish-temperature最终汇入生长度日GDD计算流程实现对植物生长速度与成熟期的定量预测。【免费下载链接】IoT-For-Beginners12 Weeks, 24 Lessons, IoT for All!项目地址: https://gitcode.com/GitHub_Trending/io/IoT-For-Beginners创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考