IoT-For-Beginners 实战使用 CounterFit 虚拟硬件测量温度为植物生长预测采集数据【免费下载链接】IoT-For-Beginners12 Weeks, 24 Lessons, IoT for All!项目地址: https://gitcode.com/GitHub_Trending/io/IoT-For-Beginners导读本文是 IoT-For-Beginners 课程「使用 IoT 预测植物生长」2-farm/lessons/1-predict-plant-growth系列中「测量温度」一章的虚拟硬件实操指南。它讲解如何在不购买任何实体硬件的前提下用 CounterFit 模拟 Grove 数字温湿度传感器DHT11并通过 Python 编写一个完整的温度读取程序。读完本文你将掌握虚拟 IoT 设备的搭建方法、CounterFit 传感器的创建流程、DHT 类 shim 的调用方式以及如何验证温度数据的采集结果为后续计算生长度日GDD奠定数据基础。为什么要在「植物生长预测」课程中测量温度在 2-farm/lessons/1-predict-plant-growth/README.md 中课程引入了数字农业Digital Agriculture的概念通过传感器采集农田数据并加以分析帮助农民提高产量、减少化肥农药与水资源消耗。植物生长不仅需要水、光照、二氧化碳和养分还需要热量——这就是温度测量在本课中的核心地位。课程通过温度数据计算**生长度日Growing Degree Days, GDD**来量化植物生长GDD (T_max T_min) / 2 - T_base其中 T_max 为当日最高温℃、T_min 为当日最低温℃、T_base 为植物基础温度℃。而 GDD 的计算依赖可靠的环境温度采集这正是本文要解决的问题先用虚拟硬件把温度测出来。虚拟硬件模拟 Grove 数字温湿度传感器本实验的虚拟 IoT 设备使用一个模拟的 Grove 数字温湿度传感器它与真实硬件方案保持一致——在 Raspberry Pi 上使用物理 Grove DHT11 传感器的实验在虚拟环境中用同一个 DHT11 模型完成。这个传感器将温度传感器与湿度传感器合二为一但本课只关心温度部分。在物理 IoT 设备中温度传感器通常是热敏电阻thermistor它通过感知温度变化引起的电阻变化来测量温度而实际出货的温度传感器大多是数字传感器内部将测量到的电阻换算为摄氏度或开尔文、华氏度输出。虚拟环境下这一物理过程由 CounterFit 的模拟逻辑代替但对外暴露的编程接口完全一致。在 CounterFit 中添加温湿度传感器CounterFit 是一个在本地运行、用于模拟传感器与执行器的应用。使用前需要先完成两件事创建 Python 项目新建名为temperature-sensor的文件夹内含单个文件app.py配置 Python 虚拟环境并安装 CounterFit 相关 pip 包CounterFit、counterfit-connection、counterfit-shims-grove。完整的环境搭建步骤可参考 1-getting-started/lessons/1-introduction-to-iot/virtual-device.md。安装 DHT11 shim 包在激活虚拟环境的终端中执行pip install counterfit-shims-seeed-python-dht该包提供counterfit_shims_seeed_python_dht模块让 Python 代码以操作真实 Grove 传感器的方式访问虚拟 DHT11。确保 CounterFit Web 应用正在运行后按以下步骤创建传感器截图来自 translated_images/el 目录与虚拟实验界面一一对应步骤一创建湿度传感器在Sensors面板的Create sensor框中打开Sensor type下拉框选择Humidity将Units保持为Percentage百分比确认Pin设置为5点击Add按钮在 Pin 5 上创建湿度传感器。创建成功后传感器会出现在传感器列表中。步骤二创建温度传感器在Create sensor框中打开Sensor type下拉框选择Temperature将Units保持为Celsius摄氏度确认Pin设置为6点击Add按钮在 Pin 6 上创建温度传感器。Pin 编号为什么是 5 和 6CounterFit 用一个 DHT 类同时模拟温湿度二合一传感器湿度传感器位于创建DHT类时指定的引脚而温度传感器位于下一个引脚。当湿度传感器在 Pin 5 时shim 会期待温度传感器在 Pin 6——所以两个传感器必须按此规则依次创建顺序不能颠倒。编写温度传感器应用在 VS Code 中打开temperature-sensor项目编辑app.py逐步添加以下代码。连接 CounterFit在文件顶部加入连接代码把应用接入运行在本地 5000 端口的 CounterFitfrom counterfit_connection import CounterFitConnection CounterFitConnection.init(127.0.0.1, 5000)127.0.0.1是始终指向本机的回环地址即 localhost5000是 CounterFit 的默认端口。若端口被占用可修改此处并用CounterFit --port port_number指定新端口启动。导入所需库import time from counterfit_shims_seeed_python_dht import DHTfrom counterfit_shims_seeed_python_dht import DHT通过 shim 引入了DHT类用于与虚拟 Grove 温湿度传感器交互——这段代码与在真实树莓派上使用 Grove DHT 包的写法几乎一致这正是 shim 的设计目的。创建传感器实例sensor DHT(11, 5)这里声明了一个管理虚拟DigitalHumidity andTemperature 传感器的DHT实例第一个参数11表示传感器型号为虚拟DHT11第二个参数5表示传感器连接到引脚 5温度部分自动落到引脚 6。无限循环轮询温度while True: _, temp sensor.read() print(fTemperature {temp}°C)sensor.read()返回一个包含湿度和温度的 tuple。由于只需要温度值湿度用下划线_忽略温度则打印到控制台。添加采样间隔time.sleep(10)温度不会瞬间剧变无需持续高频采样在循环末尾加入 10 秒休眠既能满足数据采集需求也能降低设备功耗——这一点在真实电池供电的 IoT 设备上尤为重要。完整代码将上述片段按顺序组合后最终app.py与仓库中 2-farm/lessons/1-predict-plant-growth/code-temperature/virtual-device/temperature-sensor/app.py 的参考实现完全一致from counterfit_connection import CounterFitConnection CounterFitConnection.init(127.0.0.1, 5000) import time from counterfit_shims_seeed_python_dht import DHT sensor DHT(11, 5) while True: _, temp sensor.read() print(fTemperature {temp}°C) time.sleep(10)运行程序并验证数据在 VS Code 的终端确保虚拟环境已激活中执行python app.py回到 CounterFit 应用修改温度传感器将被程序读取的数值有两种方式固定值在温度传感器的Value输入框中填入一个数字点击Set按钮。填入的数字即传感器每次返回的值随机值勾选Random复选框填入Min和Max值点击Set按钮。此后传感器每次读取都会返回 Min 与 Max 之间的随机数——这种方式非常适合模拟真实环境中波动的温度。观察控制台输出你设置的数值会逐行打印(.venv) ➜ temperature-sensor python app.py Temperature 28.25°C Temperature 30.71°C Temperature 25.17°C修改Value或Random设置可以直观看到温度值随之变化从而验证传感器模拟与代码读取链路均工作正常。下一步把温度数据发布出去测出温度只是第一步。在本课后续内容中温度数据需要经 MQTT 发布到服务器端存储如写入 CSV 文件再据此计算每日 GDD。仓库中 2-farm/lessons/1-predict-plant-growth/code-publish-temperature/virtual-device/temperature-sensor/app.py 提供了扩展示例在读取温度后通过paho.mqtt.client将 JSON 格式的遥测数据发布到test.mosquitto.org并设置time.sleep(10 * 60)每 10 分钟采样一次以覆盖整日数据采集。while True: _, temp sensor.read() telemetry json.dumps({temperature : temp}) print(Sending telemetry , telemetry) mqtt_client.publish(client_telemetry_topic, telemetry) time.sleep(10 * 60)在采集全天数据时建议在 CounterFit 中开启Random模式并设置合理范围避免每次返回相同温度导致 GDD 计算失真参见 2-farm/lessons/1-predict-plant-growth/README.md 的说明。小结本文完整走通了虚拟硬件测温的全部链路在 CounterFit 中创建 DHT11 温湿度传感器Pin 5 湿度 Pin 6 温度→ 安装counterfit-shims-seeed-python-dhtshim → 用DHT(11, 5)实例化传感器 → 通过sensor.read()读取温度并打印。整个过程无需任何实体硬件但代码与真实 Grove DHT11 方案保持一致读者可以无缝迁移到 Raspberry Pi 等单板机上。获取到可靠的温度数据后即可进入本课下一阶段——通过 MQTT 发布遥测并计算生长度日GDD让植物成熟期预测成为可能。【免费下载链接】IoT-For-Beginners12 Weeks, 24 Lessons, IoT for All!项目地址: https://gitcode.com/GitHub_Trending/io/IoT-For-Beginners创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考 SEO 优化官网定制响应式建站教育培训建站