IoT-For-Beginners 虚拟设备温度测量实战:使用 CounterFit 模拟 DHT11 温湿度传感器

发布时间:2026/9/15 17:13:06

IoT-For-Beginners 虚拟设备温度测量实战:使用 CounterFit 模拟 DHT11 温湿度传感器 IoT-For-Beginners 虚拟设备温度测量实战使用 CounterFit 模拟 DHT11 温湿度传感器【免费下载链接】IoT-For-Beginners12 Weeks, 24 Lessons, IoT for All!项目地址: https://gitcode.com/GitHub_Trending/io/IoT-For-Beginners导读本文基于 Microsoft IoT-For-Beginners 课程中 Predict plant growth with IoT第 2 单元第 1 课的虚拟设备实验文档完整讲解如何在不购买任何硬件的前提下使用 CounterFit 虚拟硬件平台在本地电脑上模拟一个 Grove DHT11 温湿度传感器并用 Python 编写代码读取温度值。读完本文你将掌握 CounterFit 传感器创建流程、counterfit-shims-seeed-python-dht垫片shim库的使用、温湿度传感器轮询编程模式以及虚拟设备与真实树莓派Raspberry Pi硬件在代码上的对比迁移方法为后续的温度遥测发布与 GDD生长度日计算实验打下基础。背景数字农业为什么需要测量温度在本实验所属的课程单元中IoT 设备被用来测量空气温度进而计算作物的生长速率与成熟度。植物需要水、二氧化碳、养分、光照和热量才能生长而每种植物都有各自的基础温度base temperature、最适温度optimum temperature和最高温度maximum temperature。温度数据经 IoT 设备采集后可以结合生长度日Growing Degree Days, GDD公式预估作物成熟时间从而减少人工巡查成本。温度数据采集的完整链路是IoT 设备测量温度 → 通过 MQTT 发布遥测 → 服务器订阅并存储 → 离线计算 GDD。本篇文章聚焦这条链路的第一步——如何在虚拟设备上完成温度测量。在继续阅读前如果你还未配置过 CounterFit Python 项目可以参考 第 1 单元第 1 课的虚拟设备文档 完成环境搭建。虚拟硬件原理模拟的 Grove DHT11 传感器本实验的虚拟 IoT 设备使用一个模拟的 Grove 数字湿度与温度传感器Digital Humidity and Temperature sensor也就是与真实树莓派实验中使用的 Grove DHT11 传感器保持一致保证两条实验路径的代码逻辑几乎完全相同。DHT11 将温度传感器与湿度传感器封装在一个元件中但本实验只使用其中的温度传感器部分。在真实物理设备中温度传感器通常是热敏电阻thermistor 中可以看到真实的 Grove DHT11 温度部分是一个负温度系数NTC热敏电阻——温度升高时阻值下降并板载 ADC 输出数字信号供微控制器读取。在 CounterFit 中添加传感器CounterFit 是一个在本机运行、用于模拟传感器与执行器的 Web 应用。使用虚拟温湿度传感器时需要在 CounterFit 应用中同时创建两个传感器一个湿度传感器和一个温度传感器。这是因为 DHT 垫片会把组合传感器拆分为两个独立传感器来模拟。任务在 CounterFit 中添加传感器第一步创建项目与环境。在电脑上新建一个名为temperature-sensor的文件夹其中包含一个app.py文件配置好 Python 虚拟环境并安装 CounterFit 相关 pip 包CounterFit、counterfit-connection、counterfit-shims-grove。若需要详细指引可参考 第 1 单元第 1 课虚拟设备文档 中的 Configure a Python virtual environment 一节。第二步安装 DHT11 垫片包。在已激活虚拟环境的终端中执行pip install counterfit-shims-seeed-python-dht这个包提供了 Seeed Grove 生态 DHT 传感器在 CounterFit 下的垫片实现使你可以像操作真实物理传感器一样编写代码。第三步确认 CounterFit Web 应用已启动。第四步创建湿度传感器。在Sensors面板的Create sensor输入框中从Sensor type下拉列表选择HumidityUnits保持为Percentage百分比确认Pin设置为5点击Add按钮在引脚 5 上创建湿度传感器。创建成功后湿度传感器会出现在传感器列表中。第五步创建温度传感器。在Sensors面板的Create sensor输入框中从Sensor type下拉列表选择TemperatureUnits保持为Celsius摄氏度确认Pin设置为6点击Add按钮在引脚 6 上创建温度传感器。创建成功后温度传感器同样会出现在传感器列表中。 关键细节CounterFit 通过连接两个传感器来模拟这个组合式温湿度传感器——湿度传感器位于创建DHT实例时指定的引脚温度传感器则位于下一个引脚。因此当湿度传感器位于引脚 5 时垫片会期望温度传感器位于引脚 6。编写温度传感器应用现在可以使用 CounterFit 中的传感器来编写温度读取程序了。任务编写温度传感器应用第一步在 VS Code 中打开temperature-sensor应用打开app.py文件。第二步在app.py顶部添加以下代码将应用连接到 CounterFitfrom counterfit_connection import CounterFitConnection CounterFitConnection.init(127.0.0.1, 5000)这段代码从counterfit_connection模块来自之前安装的counterfit-connectionpip 包导入CounterFitConnection类并初始化与127.0.0.1即本机localhost上 5000 端口的 CounterFit 应用的连接。如果 5000 端口被其他程序占用可以同时修改代码中的端口号并用counterfit --port port_number方式启动 CounterFit。第三步添加以下代码以导入所需库import time from counterfit_shims_seeed_python_dht import DHT这里的from seeed_dht import DHT从counterfit_shims_seeed_python_dht模块导入DHT传感器类通过垫片与虚拟的 Grove 温度传感器交互。注意它与真实树莓派代码中from seeed_dht import DHT对应seeed-python-dht包仅模块名不同这保证了虚拟设备代码可以平滑迁移到真实硬件。第四步在上述代码之后添加以下代码创建管理虚拟温湿度传感器的类实例sensor DHT(11, 5)该代码声明了一个DHT类实例用于管理虚拟的数字湿度与温度传感器。第一个参数告知代码使用的是虚拟DHT11传感器第二个参数告知代码传感器连接在端口5上。第五步添加一个无限循环轮询温度传感器值并打印到控制台while True: _, temp sensor.read() print(fTemperature {temp}°C)read()方法返回一个包含湿度与温度的元组。因为本实验只需要温度值所以用_忽略湿度值温度值打印到控制台。第六步在循环末尾添加十秒的休眠因为温度水平不需要连续检查休眠可以降低设备功耗time.sleep(10)综合以上代码最终的完整程序与仓库中的示例实现一致参见 code-temperature/virtual-device/temperature-sensor/app.pyfrom 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 建议新开一个 VS Code 终端来运行app.py因为当前终端可能正被 CounterFit 应用占用。验证与调试修改传感器值观察输出运行应用后CounterFit 的状态会变为Connected。接下来可以在 CounterFit 应用中改变温度传感器的值让应用读取到不同的数值验证程序确实在与虚拟传感器交互。有两种方式固定值方式在温度传感器的Value输入框中输入一个数字点击Set按钮。你输入的数字就是传感器返回的值。随机值方式勾选Random复选框输入Min和Max值然后点击Set按钮。之后每次传感器读取数值时都会返回Min与Max之间的一个随机数。你可以在控制台看到设置的数值出现。不断修改Value或Random设置来观察数值变化。典型输出如下(.venv) ➜ temperature-sensor python app.py Temperature 28.25°C Temperature 30.71°C Temperature 25.17°C 在后续的 GDD 数据采集实验中参见 2-farm/lessons/1-predict-plant-growth/README.md课程建议为虚拟设备勾选Random复选框并设置范围避免每次读取都得到相同温度值从而获得更有意义的数据集。与真实硬件代码的对比虚拟设备如何平滑迁移将虚拟设备的app.py与树莓派版本的 code-temperature/pi/temperature-sensor/app.py 对比可以发现两者高度一致import time from seeed_dht import DHT sensor DHT(11, 5) while True: _, temp sensor.read() print(fTemperature {temp}°C) time.sleep(10)唯一实质区别在于导入语句真实硬件使用from seeed_dht import DHT来自seeed-python-dht包虚拟设备使用from counterfit_shims_seeed_python_dht import DHT来自counterfit-shims-seeed-python-dht包。DHT(11, 5)中第二个参数在两种场景下含义一致——在虚拟场景对应 CounterFit 中的引脚号在真实场景对应 Grove Base HAT 上的数字端口 D5。正是这种垫片抽象让学习者可以在无硬件环境下完整走通实验流程再无缝迁移到真实设备。下一步从测量到发布遥测温度测量是数据链路的第一步。在本课的后续实验wio-terminal-temp-publish.md与single-board-computer-temp-publish.md中温度数据将通过 MQTT 发布到服务器。仓库中已提供对应的完整示例 code-publish-temperature/virtual-device/temperature-sensor/app.py它在测温代码的基础上增加了paho.mqtt.client与json导入并通过mqtt_client.publish(client_telemetry_topic, telemetry)将{temperature: temp}遥测数据发布到test.mosquitto.org轮询间隔也调整为time.sleep(10 * 60)10 分钟。服务器端程序code-server/temperature-sensor-server/app.py订阅该主题并将数据以 CSV 格式落盘课程还提供了 Jupyter Notebookcode-notebook/gdd.ipynb用于可视化 GDD 计算。这些内容共同构成了测温 → 发布 → 存储 → 计算 GDD的完整数字农业数据闭环。相关资源速查资源仓库路径本实验英文原版文档2-farm/lessons/1-predict-plant-growth/virtual-device-temp.md本课完整 README含 GDD 公式与数据采集2-farm/lessons/1-predict-plant-growth/README.md虚拟设备测温完整代码2-farm/lessons/1-predict-plant-growth/code-temperature/virtual-device/temperature-sensor/app.pyMQTT 发布版完整代码2-farm/lessons/1-predict-plant-growth/code-publish-temperature/virtual-device/temperature-sensor/app.py树莓派硬件版实验2-farm/lessons/1-predict-plant-growth/pi-temp.md树莓派硬件版代码2-farm/lessons/1-predict-plant-growth/code-temperature/pi/temperature-sensor/app.pyCounterFit 环境搭建指南1-getting-started/lessons/1-introduction-to-iot/virtual-device.md【免费下载链接】IoT-For-Beginners12 Weeks, 24 Lessons, IoT for All!项目地址: https://gitcode.com/GitHub_Trending/io/IoT-For-Beginners创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/9/15 17:13:06

数据科学入门实战:从爬虫采集到随机森林房价预测

1. 项目概述与整体思路拆解1.1 为什么选择这个项目作为数据科学入门样板先说说我为什么拿“房价预测”来拆这个完整流程。原因其实很简单:房价数据既有明确的数值型目标(价格),又有大量结构化特征(面积、朝向、楼层、区…

2026/9/15 17:23:07

SQL Server AlwaysOn可用性组从零部署:高可用架构实战指南

我有个习惯,技术圈里只要刮起“部署”风,我总会先往数据库这层瞟一眼。这不,最近大家聊本地部署聊得火热,从大模型到Docker再到CI/CD自动部署,人人都能把几十个容器跑起来,但真正轮到底层数据库的高可用部署…

2026/9/15 17:23:07

SpringBoot+Vue+Element UI图书管理系统从零搭建实战

刚带完一个实习生做完这套前后端分离的图书管理系统,趁热把整个项目的落地过程整理出来。这套《SpringBoot Vue Element UI MySQL》的组合,今天已经算是 Web 开发入门的经典套餐了,很多培训机构和毕设选题都在用,但它远不止一个…

2026/9/15 17:23:07

内点法求解最优潮流:原理、MATLAB实现与工程实践

简介:这是一份面向电力系统研究人员与电气工程学生的内点法优化计算资源,聚焦原对偶内点法在电力系统最优潮流(OPF)中的应用。资源包含1个Matlab源程序(.m)和1个说明文档(.doc)&…

2026/9/15 17:23:07

SpringBoot流浪动物救助平台:从数据库设计到部署全流程

简介:本毕业设计资源围绕基于Spring Boot的流浪动物救助平台,提供完整项目源码、MySQL数据库脚本及配套说明文档,适合计算机相关专业学生用于毕业设计、课程设计或新手项目实践。系统采用Spring Boot Vue MySQL技术栈,功能覆盖用…

2026/9/15 4:54:30

拯救者Y7000黑屏故障排查与维修实战指南

1. 项目概述:一台黑屏的拯救者Y7000,到底卡在哪一步? 联想拯救者Y7000系列笔记本,从2018年第一代搭载i5-8300H开始,到后来的i7-9750H、i7-10750H、i5-11400H,再到2023年款的R7-7840HS,它始终是学…

2026/9/15 0:01:16

AI英语单词APP开发:自适应学习算法与移动端优化实践

1. 项目概述 作为一名在移动应用开发领域摸爬滚打多年的老手,我最近完成了一个AI英语单词APP的开发项目。这个项目将传统单词记忆方法与现代AI技术相结合,打造了一款能够智能适应不同用户学习习惯的英语学习工具。 市面上大多数单词APP都存在一个通病&a…

2026/9/15 0:01:16

Flutter与OpenHarmony结合开发手语学习APP实战

1. 项目背景与核心价值作为一名同时接触过Flutter和OpenHarmony的开发者,最近我完成了一个基于Flutter for OpenHarmony的手语学习APP实战项目。这个项目最大的特点在于实现了跨平台框架与国产操作系统深度结合的创新实践——用Flutter开发的应用能完美运行在OpenHa…

2026/9/15 0:01:16

六个月成为机器人工程师:从ROS2到SLAM的实战路径

1. 六个月的紧迫感从哪来:先搞清楚你要成为哪种机器人工程师说实话,六个月的期限并不是一个宽松的时间线。市面上任何一本正经的机器人学教材都超过五百页,ROS2的官方文档可以翻到你怀疑人生,再加上ABB、KUKA这些工业机器人厂家动…

2026/9/15 14:22:53

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/14 13:53:59

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/15 11:42:23

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码