ARTICLE DETAIL

资讯详情

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

用 CounterFit 虚拟光敏传感器搭建智能夜灯:IoT-For-Beginners 虚拟设备实战指南

用 CounterFit 虚拟光敏传感器搭建智能夜灯:IoT-For-Beginners 虚拟设备实战指南 用 CounterFit 虚拟光敏传感器搭建智能夜灯IoT-For-Beginners 虚拟设备实战指南【免费下载链接】IoT-For-Beginners12 Weeks, 24 Lessons, IoT for All!项目地址: https://gitcode.com/GitHub_Trending/io/IoT-For-Beginners本篇指南对应 IoT-For-Beginners 课程第 1 部分第 3 课「传感器与执行器」Sensors and Actuators中虚拟 IoT 硬件分支。课程面向零基础与进阶开发者用 12 周 24 课覆盖从传感器到云端的完整 IoT 学习路径。本文聚焦虚拟设备 光敏传感器这一场景在 CounterFit 模拟器中创建虚拟光敏传感器通过 Python 读取光照强度数值为后续构建光照过低自动点亮 LED的智能夜灯打下基础。读完本文你将掌握 CounterFit 模拟器创建/配置模拟传感器的完整操作流程以及counterfit_shims_grove库读取模拟模拟量的编程范式。前置背景什么是虚拟 IoT 硬件在 IoT-For-Beginners 的第 3 课 1-getting-started/lessons/3-sensors-and-actuators/README.md 中课程同时支持 Wio Terminal、Raspberry Pi 与虚拟设备三种硬件路径Arduino - Wio Terminal单片机平台Single-board computer - Raspberry Pi单板计算机平台Single-board computer - Virtual device虚拟设备平台本文主题。虚拟设备方案不需要任何真实硬件而是使用CounterFit这个 IoT 外设模拟器它以 Web 应用的形式运行在开发机上把真实的传感器/执行器替换为图形界面中可手动操作的虚拟组件配合名为counterfit_shims_grove的 Python 兼容库你的业务代码与真实硬件版本几乎完全一致从而实现先模拟、后移植的开发体验。需要说明的是本文讲解的传感器逻辑同样适用于真实硬件——Raspberry Pi 版本仅需将导入语句从counterfit_shims_grove...换成grove...即可可对照 pi-sensor.md 查看差异。光敏传感器从物理原理到虚拟化夜灯需要一个传感器来感知环境光它就是光敏传感器light sensor。物理实现在真实 IoT 设备上光敏传感器通常基于光电二极管photodiode将入射光转换为电信号信号类型光敏传感器属于模拟传感器analog sensor其输出的整数只表示相对光量并不映射到勒克斯lux这类标准计量单位取值区间以 Grove 光敏传感器为例其输出范围约为 0–1,023在 Raspberry Pi 版本中文档明确给出 0–1,000 的刻度说明详见 pi-sensor.md本课程代码中的阈值判断如 300即基于这一相对刻度。关于模拟传感器的详细工作原理电压、ADC 模数转换、二进制表示课程在 1-getting-started/lessons/3-sensors-and-actuators/README.md 的 Analog sensors 一节中有系统讲解——模拟值必须经 ADC 转换成数字信号后才能被 IoT 设备处理而这些转换通常已被传感器配套库封装好开发者在代码层面只需调用light属性即可这正是本文代码如此简洁的根本原因。在 CounterFit 中添加虚拟光敏传感器使用虚拟光敏传感器的前提是把它添加进 CounterFit 应用。以下为完整操作步骤对应课程任务 add the sensors to CounterFit确认 CounterFit Web 应用正在运行。如果未运行先按前一部分虚拟设备连接与初始化的说明启动它在Sensors面板的Create sensor区域从Sensor type下拉框中选择Light将Units保持为NoUnits因为光敏值没有标准计量单位确认Pin设置为0点击Add按钮在 Pin 0 上创建光敏传感器。创建界面设置如下Sensor type Light、Units NoUnits、Pin 0创建完成后传感器会出现在传感器列表中后续部分virtual-device-actuator.md还会在Actuator面板中创建一个 Pin 5 的 LED与本文的传感器协同完成夜灯闭环。编写程序读取光敏传感器虚拟设备创建好传感器后即可在 VS Code 中编程读取数据。继续使用上一部分创建好的 nightlight 项目若终端环境不是虚拟环境可关闭并重新创建终端kill后新建确保.venv生效。第一步导入依赖库在app.py文件顶部与其他import语句一起添加以下代码import time from counterfit_shims_grove.grove_light_sensor_v1_2 import GroveLightSensorimport time导入 Python 标准库time模块稍后用于让程序休眠from counterfit_shims_grove.grove_light_sensor_v1_2 import GroveLightSensor从CounterFit Grove shim兼容库中导入GroveLightSensor类。这个库封装了与 CounterFit 应用中虚拟光敏传感器交互的代码——v1_2对应 Grove Light Sensor v1.2 硬件版本shim 层让虚拟代码与真实 Grove 库保持同构。第二步创建传感器实例在文件末尾添加如下代码创建管理光敏传感器的类实例light_sensor GroveLightSensor(0)GroveLightSensor(0)中的参数0是 CounterFit Grove 引脚编号即之前在 Web 界面中把传感器创建在 Pin 0 的原因——两者必须一一对应。第三步编写无限轮询循环在上面的代码之后添加一个无限循环持续读取光敏值并输出到控制台while True: light light_sensor.light print(Light level:, light)light_sensor.light是GroveLightSensor类的light属性它读取引脚上的模拟值返回 0–1,023 范围内的整数该值随后通过print输出到控制台。第四步降低轮询频率光照水平无需持续不断地检查因此在循环末尾加 1 秒休眠既避免控制台刷屏也降低设备功耗对真实硬件而言尤为重要电池供电设备因此可续航更久time.sleep(1)完整的参考实现仓库中已有完整可运行的参考代码位于 code-sensor/virtual-device/nightlight/app.py内容如下import time from counterfit_connection import CounterFitConnection from counterfit_shims_grove.grove_light_sensor_v1_2 import GroveLightSensor CounterFitConnection.init(127.0.0.1, 5000) light_sensor GroveLightSensor(0) while True: light light_sensor.light print(Light level:, light) time.sleep(1)注意参考代码中多了一行CounterFitConnection.init(127.0.0.1, 5000)——这是虚拟设备方案独有的连接初始化步骤建立与本地 CounterFit 服务默认地址127.0.0.1端口5000的通信通道属于本文前一教学环节配置虚拟环境与 CounterFit 连接的内容。若运行时报连接错误请优先检查 CounterFit 应用是否启动、地址端口是否一致。第五步运行程序在 VS Code 终端中执行python3 app.py光照值会持续输出到控制台。初始值通常为 0因为还没有在 CounterFit 中设置任何值。在 CounterFit 中动态改变传感器读数要让程序读到不同的光照值需要回到 CounterFit 应用中对光敏传感器进行设置有两种方式固定值在光敏传感器的Value输入框中输入一个数字然后点击Set按钮——你输入的数字就是传感器将返回的值随机值勾选Random复选框并填写Min和Max两个边界值然后点击Set按钮——此后每次传感器被读取都会返回Min与Max之间的一个随机整数。你设置的值会立即反映到控制台输出中。反复调整Value或Random参数即可模拟环境光变化(.venv) ➜ GroveTest python3 app.py Light level: 143 Light level: 244 Light level: 246 Light level: 253这段示例输出展示了随机模式下的典型效果相邻读数在 143–253 之间波动模拟了从较暗到较亮的环境变化。原理剖析shim 层如何联通虚拟与现实从源码结构看counterfit_shims_grove是一组与真实 Seeed Grove Python 库 API 完全对齐的兼容模块shimAPI 同构无论是虚拟设备的counterfit_shims_grove.grove_light_sensor_v1_2还是真实硬件的grove.grove_light_sensor_v1_2都暴露相同的GroveLightSensor类与light属性。这意味着你为虚拟设备编写的业务逻辑移植到 Raspberry Pi 时只需替换 import 行底层差异被封装真实硬件上light属性背后是 GPIO/ADC 的模拟读取与转换虚拟设备上则是向 CounterFit 服务发起 HTTP 请求获取你在 Web 界面中设置或随机生成的数值。对上层业务代码而言两者无感知与执行器联动本文只完成了读传感器的一半。下一环节 virtual-device-actuator.md 会在循环中加入if light 300: led.on() else: led.off()逻辑完整版参考代码见 code-actuator/virtual-device/nightlight/app.py——届时在 CounterFit 中把光照值调到 300 以下Pin 5 的虚拟 LED 就会点亮夜灯即告完成。常见问题排查程序启动即报连接错误确认 CounterFit Web 应用正在运行且CounterFitConnection.init的地址端口与 CounterFit 一致默认127.0.0.1:5000读数一直是 0这是正常现象——尚未在 CounterFit 中点击Set设置Value或启用Random之前虚拟传感器返回默认值 0数值不变化若使用固定值模式只有点击Set后新值才会生效若需持续变化请勾选Random并设置Min/Max导入失败确认已按前序环节在虚拟环境中安装counterfit-shims-grove与counterfit-connection依赖并确认当前终端使用的是项目虚拟环境.venv。至此你的虚拟夜灯已经成功采集到光照数据。结合 3-sensors-and-actuators 课程其余部分你可以继续为它添加 LED 执行器完成一个光照过低自动亮灯的完整闭环项目。【免费下载链接】IoT-For-Beginners12 Weeks, 24 Lessons, IoT for All!项目地址: https://gitcode.com/GitHub_Trending/io/IoT-For-Beginners创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表