ARTICLE DETAIL

资讯详情

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

IoT-For-Beginners 虚拟硬件实战:用 CounterFit 模拟 Grove 继电器构建土壤湿度自动浇灌控制

IoT-For-Beginners 虚拟硬件实战:用 CounterFit 模拟 Grove 继电器构建土壤湿度自动浇灌控制 IoT-For-Beginners 虚拟硬件实战用 CounterFit 模拟 Grove 继电器构建土壤湿度自动浇灌控制【免费下载链接】IoT-For-Beginners12 Weeks, 24 Lessons, IoT for All!项目地址: https://gitcode.com/GitHub_Trending/io/IoT-For-Beginners本文以IoT-For-Beginners开源课程的「自动化植物浇灌Automated plant watering」一课为背景完整讲解如何基于 CounterFit 虚拟 IoT 硬件在soil-moisture-sensor虚拟设备上新增一个模拟 Grove 继电器Relay并依据土壤湿度读数自动开关继电器、模拟水泵浇灌的完整过程。读完本文你将掌握在 CounterFit 中创建虚拟执行器的操作步骤、GroveRelayshim 库的编程方式、基于模拟 ADC 阈值450的控制逻辑以及如何用仓库源码验证最终行为。为什么虚拟设备也需要继电器在上一课 2-farm/lessons/2-detect-soil-moisture/virtual-device-soil-moisture.md 中你已经通过 CounterFit 在虚拟设备上创建了电容式土壤湿度传感器并借助模拟的 10 位 ADC 读取 11,023 范围内的数值。本课则是在此基础上补全浇灌系统的另一半一个执行器——继电器。在物理世界中IoT 开发板只能提供 3.3V 或 5V 的低压信号远不足以直接驱动水泵这类大功率设备继电器的作用就是用小电流的控制电路去通断大电流的输出电路。虚拟设备中的模拟 Grove 继电器保留了这一语义使整个实验流程与使用树莓派 实体 Grove 继电器完全一致。正如 2-farm/lessons/3-automated-plant-watering/README.md 所说明的继电器是数字执行器——高电平信号将其打开低电平信号将其关闭实体 Grove 继电器是常开型normally-open在没有信号时输出电路保持断开可承载最高 250V、10A 的输出回路。虚拟硬件模拟 Grove 继电器在 CounterFit 的虚拟环境中继电器以“执行器Actuator”的形式存在于模拟器中可通过 Web 界面直接观察其开关状态。对应的 Python shim 库是counterfit_shims_grove.grove_relay.GroveRelay它模拟了实体 Grove 继电器的on()与off()两个核心方法。任务一在 CounterFit 中添加继电器前置条件沿用上一课的soil-moisture-sensor项目包含app.py、Python 虚拟环境与 CounterFit pip 包并确保 CounterFit Web 应用正在运行。若尚未搭建该项目可参考 1-getting-started/lessons/1-introduction-to-iot/virtual-device.md 中关于创建 CounterFit Python 项目的说明。添加继电器的具体步骤在 VS Code 中打开soil-moisture-sensor项目。确认 CounterFit Web 应用正常运行。在Actuators执行器面板的Create actuator区域中在Actuator type下拉框中选择Relay将Pin设置为5点击Add按钮在 Pin 5 上创建继电器。创建成功后继电器会出现在执行器列表中任务二编程控制虚拟继电器现在可以为soil-moisture-sensor应用添加继电器控制代码了。导入 GroveRelay在app.py现有导入语句下方新增from counterfit_shims_grove.grove_relay import GroveRelay该语句从 Grove Python shim 库中导入GroveRelay类用于与虚拟 Grove 继电器交互。创建继电器实例在ADC类的实例声明即adc ADC()下方添加relay GroveRelay(5)这会在Pin 5上创建一个继电器实例——正是你在 CounterFit 中为继电器分配的引脚。测试继电器是否工作在while True:循环中加入以下三行代码relay.on() time.sleep(.5) relay.off()这段代码先打开继电器等待 0.5 秒再关闭继电器。由于上一课的循环末尾保留了time.sleep(10)每 10 秒读取一次传感器运行 Python 应用后虚拟继电器会每 10 秒完成一次“开—0.5 秒—关”的动作在 CounterFit 界面中你可以直观看到继电器触点闭合与断开的过程任务三依据土壤湿度自动控制继电器测试通过后删除上述三行测试代码替换为以下基于阈值的控制逻辑if soil_moisture 450: print(Soil Moisture is too low, turning relay on.) relay.on() else: print(Soil Moisture is ok, turning relay off.) relay.off()这段代码读取土壤湿度传感器数值若高于 450说明土壤偏干打开继电器相当于接通水泵供电若低于 450说明湿度足够关闭继电器。 注意电容式土壤湿度传感器的读数方向读数越低土壤中的水分越多反之读数越高代表土壤越干。因此“高于 450”反而意味着需要浇水。运行应用后可在 CounterFit 中调整土壤湿度传感器的Value固定值或勾选Random并设置Min/Max随机范围来模拟土壤干湿变化观察继电器的开合典型输出如下Soil Moisture: 638 Soil Moisture is too low, turning relay on. Soil Moisture: 452 Soil Moisture is too low, turning relay on. Soil Moisture: 347 Soil Moisture is ok, turning relay off.源码级验证仓库中的完整实现本课的完整可运行代码存放在 2-farm/lessons/3-automated-plant-watering/code-relay/virtual-device/soil-moisture-sensor/app.py。将前面各步骤组合起来正是仓库中该文件的全部内容from counterfit_connection import CounterFitConnection CounterFitConnection.init(127.0.0.1, 5000) import time from counterfit_shims_grove.adc import ADC from counterfit_shims_grove.grove_relay import GroveRelay adc ADC() relay GroveRelay(5) while True: soil_moisture adc.read(0) print(Soil moisture:, soil_moisture) if soil_moisture 450: print(Soil Moisture is too low, turning relay on.) relay.on() else: print(Soil Moisture is ok, turning relay off.) relay.off() time.sleep(10)从源码结构可以确认几点关键设计初始化顺序先通过CounterFitConnection.init(127.0.0.1, 5000)与本地 CounterFit 服务建立连接随后导入依赖并创建ADC与GroveRelay实例引脚约定土壤湿度传感器挂在模拟 ADC 的Pin 0继电器挂在Pin 5两者分别通过adc.read(0)与GroveRelay(5)访问采样节奏主循环末尾的time.sleep(10)使每轮“读湿度—判断—控制继电器”的周期约为 10 秒这也是前面测试阶段“每 10 秒开合一次”的直接原因数字执行器语义relay.on()/relay.off()对应继电器输出回路的接通与断开与实体 Grove 继电器的数字控制行为一致。对应的树莓派实体硬件版本位于 2-farm/lessons/3-automated-plant-watering/pi-relay.md 与 code-relay/pi两者仅在导入路径grove.grove_relayvscounterfit_shims_grove.grove_relay与接线方式上不同逻辑完全一致这也印证了虚拟硬件实验与真实硬件的高度一致性。延伸从设备本地控制到云端集中控制本课在设备本地完成“读湿度—控继电器”的闭环后2-farm/lessons/3-automated-plant-watering/README.md 还给出了两个进阶方向MQTT 云端控制将控制逻辑从设备端上移到本地服务器设备只负责上报soil_moisture遥测并执行relay_on命令。可参考 code-mqtt/virtual-device/soil-moisture-sensor/app.py 中的实现——设备订阅命令主题收到{relay_on: True}时调用relay.on()收到False时调用relay.off()。传感器与执行器时序timing水泵启动后水分需要时间渗透土壤才能被传感器感知因此不能像夜灯那样“一检测到就立即响应”。课程给出的浇灌周期建议是“开泵 5 秒 → 等待 20 秒让水分渗透 → 重新检测湿度”并通过线程 MQTT 退订/重订阅遥测来实现完整服务端实现见 code-timing/server/app.py。小结至此你的虚拟土壤湿度传感器程序已经成功学会控制继电器从在 CounterFit 中创建模拟 Grove 继电器到通过GroveRelayshim 库编程控制其开合再到基于 450 阈值的自动浇灌判断逻辑最后以仓库code-relay/virtual-device中的完整源码完成闭环验证。这套“传感器读数 → 阈值判断 → 执行器动作”的链路正是后续把控制逻辑迁移到云端MQTT与加入时序控制的基础。【免费下载链接】IoT-For-Beginners12 Weeks, 24 Lessons, IoT for All!项目地址: https://gitcode.com/GitHub_Trending/io/IoT-For-Beginners创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表