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

发布时间:2026/11/15 8:12:38

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/11/15 8:12:36

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

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

2026/11/15 8:08:51

醴陵电工证怎么复审,真实经历告诉你这些坑别踩

醴陵电工证怎么复审,真实经历告诉你这些坑别踩 急需特种作业证才能上岗找工作,特别是电工证,几乎是进入电力、建筑、制造等行业的一道门槛。很多人拿到电工证后,以为万事大吉,但殊不知, 复审…

2026/11/15 8:08:51

�璜塘特种作业操作证怎么报名?转岗人员最怕被中介坑

�璜塘特种作业操作证怎么报名?转岗人员最怕被中介坑 不知道去哪报名怕被中介坑,你是不是也在为 璜塘特种作业操作证怎么报名 这个问题发愁?尤其是像你这样从其他岗位转过来的从业者,面对五花八门的培训机构、真假难辨的报名渠道,很容易踩坑。别担心,…

2026/11/15 8:08:51

固安电工证复证去哪里 2026河南最新政策下如何顺利复审

固安电工证复证去哪里 2026河南最新政策下如何顺利复审 证书过期了不知道怎么复审延期,这是很多电工从业者面临的现实问题,特别是在河南固安地区,2026年最新政策对特种作业操作证的复审流程、报名条件和培训方式都有了新的调整。如果你正在为电工…

2026/11/15 8:08:51

考高压电工证软件怎么考

高压电工证过期了怎么处理?郑州报考避坑指南全解析 证书过期了不知道怎么复审延期?你不是一个人。很多在郑州从事电力行业的朋友都遇到过这种情况,尤其是高压电工证,不仅关系到日常工作的合规性,更是晋升和薪资的重要依据。别急,这篇【考高压电工证软件…

2026/11/15 8:03:50

特种工都指哪些职业呢郑州报考避坑指南

特种工都指哪些职业呢郑州报考避坑指南 实操考试心里没底怕挂科,你不是一个人。特别是像你这种刚毕业的洛阳工程类学生,面对特种作业操作证的考试,心里难免会打鼓。特种工证不仅关系到你能不能顺利入职,还直接关系到你的职业安全和发展空间。而郑州作为河…

2026/11/15 0:02:49

电工证考试口诉怎么准备值不值得考

电工证考试口诉怎么准备值不值得考 实操考试心里没底怕挂科,这是大多数准备考电工证的人心里最真实的感受。尤其是面对【电工证考试口诉】环节,很多人不知道该怎么准备,甚至担心自己说不好就被淘汰。其实,只要掌握方法, 值不值得考…

2026/11/15 0:02:49

桑植县考电工证千万别踩坑!报名全流程教你避坑

桑植县考电工证千万别踩坑!报名全流程教你避坑 你是不是也遇到过这种情况:想考个电工证,但不知道从哪儿下手,怕被中介坑,怕花冤枉钱,更怕考了证还不能用?别急,这正是你该看这篇文章的原因。在桑植县考电工证,确实有很多人被坑过,但只要你知道流程、…

2026/11/15 0:02:49

电工证考试口诉怎么准备值不值得考

电工证考试口诉怎么准备值不值得考 实操考试心里没底怕挂科,这是大多数准备考电工证的人心里最真实的感受。尤其是面对【电工证考试口诉】环节,很多人不知道该怎么准备,甚至担心自己说不好就被淘汰。其实,只要掌握方法, 值不值得考…

2026/11/15 0:02:49

桑植县考电工证千万别踩坑!报名全流程教你避坑

桑植县考电工证千万别踩坑!报名全流程教你避坑 你是不是也遇到过这种情况:想考个电工证,但不知道从哪儿下手,怕被中介坑,怕花冤枉钱,更怕考了证还不能用?别急,这正是你该看这篇文章的原因。在桑植县考电工证,确实有很多人被坑过,但只要你知道流程、…

2026/11/15 4:46:37

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/15 2:06:31

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

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

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

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