ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

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

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),仅供参考
返回列表