# 发布温度 - Wio Terminal 在本节课程中,您将通过 MQTT 发布 Wio Terminal 检测到的温度值,以便后续用于计算 GDD。 ## 发布温度 一旦读取到温度值,就可以通过 MQTT 发布到某些“服务器”代码,这些代码将读取这些值并存储起来,以便用于 GDD 计算。微控制器不会直接从互联网读取时间,也不会默认使用实时时钟来跟踪时间,设备需要进行编程才能实现这一功能,前提是它具备必要的硬件。 为了简化本课程的内容,传感器数据不会附带时间信息,而是由服务器代码在接收到消息后添加时间。 ### 任务 编程设备以发布温度数据。 1. 打开 `temperature-sensor` Wio Terminal 项目 1. 重复您在第 4 课中完成的步骤,连接到 MQTT 并发送遥测数据。您将使用相同的公共 Mosquitto broker。 具体步骤如下: - 将 Seeed WiFi 和 MQTT 库添加到 `.ini` 文件 - 添加配置文件和连接 WiFi 的代码 - 添加连接到 MQTT broker 的代码 - 添加发布遥测数据的代码 > ⚠️ 如果需要,请参考 [连接到 MQTT 的说明](../../../1-getting-started/lessons/4-connect-internet/wio-terminal-mqtt.md) 和 [发送遥测数据的说明](../../../1-getting-started/lessons/4-connect-internet/wio-terminal-telemetry.md)(第 4 课)。 1. 确保 `config.h` 头文件中的 `CLIENT_NAME` 反映了当前项目: ```cpp const string CLIENT_NAME = ID + "temperature_sensor_client"; ``` 1. 对于遥测数据,不再发送光照值,而是发送从 DHT 传感器读取的温度值,并将其作为 JSON 文档中的 `temperature` 属性。为此,请修改 `main.cpp` 中的 `loop` 函数: ```cpp float temp_hum_val[2] = {0}; dht.readTempAndHumidity(temp_hum_val); DynamicJsonDocument doc(1024); doc["temperature"] = temp_hum_val[1]; ``` 1. 温度值不需要频繁读取——在短时间内它不会有太大变化,因此将 `loop` 函数中的 `delay` 设置为 10 分钟: ```cpp delay(10 * 60 * 1000); ``` > 💁 `delay` 函数的时间单位是毫秒,为了便于阅读,时间以计算结果的形式传递。1,000 毫秒为 1 秒,60 秒为 1 分钟,因此 10 x (60 秒/分钟) x (1000 毫秒/秒) 得到 10 分钟的延迟。 1. 将代码上传到您的 Wio Terminal,并使用串口监视器查看温度值是否已发送到 MQTT broker。 ```output --- 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 --- Connecting to WiFi.. Connected! Attempting MQTT connection...connected Sending telemetry {"temperature":25} Sending telemetry {"temperature":25} ``` > 💁 您可以在 [code-publish-temperature/wio-terminal](../../../../../2-farm/lessons/1-predict-plant-growth/code-publish-temperature/wio-terminal) 文件夹中找到此代码。 😀 您已成功将设备的温度值作为遥测数据发布。 **免责声明**: 本文档使用AI翻译服务 [Co-op Translator](https://github.com/Azure/co-op-translator) 进行翻译。尽管我们努力确保翻译的准确性,但请注意,自动翻译可能包含错误或不准确之处。应以原文档的原始语言版本为权威来源。对于关键信息,建议使用专业人工翻译。我们对因使用此翻译而引起的任何误解或误读不承担责任。