尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

IoT-For-Beginners 实战:在虚拟 IoT 硬件上构建夜灯——使用 CounterFit 创建并编程光敏传感器

IoT-For-Beginners 实战:在虚拟 IoT 硬件上构建夜灯——使用 CounterFit 创建并编程光敏传感器 IoT-For-Beginners 实战在虚拟 IoT 硬件上构建夜灯——使用 CounterFit 创建并编程光敏传感器【免费下载链接】IoT-For-Beginners12 Weeks, 24 Lessons, IoT for All!项目地址: https://gitcode.com/GitHub_Trending/io/IoT-For-Beginners本篇文章是微软开源课程 IoT-For-Beginners 第三课《传感器与执行器》虚拟硬件路线Virtual device的核心实操章节你将在不使用任何实体元器件的情况下通过 CounterFit 虚拟硬件模拟器 在电脑上创建一个光敏传感器并用 Python 代码读取环境光强。学完本文你将掌握 CounterFit 中虚拟模拟传感器analog sensor的添加、参数配置、代码驱动与动态调参的完整流程为后续组合 LED 执行器、组装完整的夜灯应用打好基础。课程背景夜灯项目与虚拟硬件路线本教程属于 1-getting-started/lessons/3-sensors-and-actuators 一课。该课的目标是借助传感器 执行器两个核心概念搭建一个经典 IoT 应用——夜灯nightlight持续读取环境光强当光线过暗时点亮 LED。为了降低硬件门槛本课提供三条硬件路线Wio TerminalArduino 单片机、Raspberry Pi树莓派单板机以及虚拟设备Virtual device。本篇文章聚焦虚拟设备路线不购买任何硬件而是通过本地运行 CounterFit 应用来模拟传感器与执行器用与树莓派上几乎一致的 Python 代码驱动它们。此前你需要先完成虚拟环境的搭建与 CounterFit 的连接详见 虚拟单板机入门其中包含 Python 虚拟环境配置与pip install CounterFit、counterfit-connection、counterfit-shims-grove三个包的安装步骤。虚拟硬件光敏传感器的原理夜灯需要一个传感器即光敏传感器light sensor。在真实物理设备中光敏传感器的核心通常是光电二极管photodiode——一种能把光照转换成电信号的半导体器件。光敏传感器属于模拟传感器analog sensor它返回一个表示相对光照量的整数值。需要特别强调的是这个数值不映射到任何标准计量单位例如勒克斯 lux它只是一个相对的、量纲化的读数只对变化趋势有意义——光照增强则数值增大光照减弱则数值减小。理解这一点对后续编程至关重要例如在后续夜灯逻辑中我们只需判断读数是否小于某个阈值如 300来决定开关灯而不必关心这个数字对应的物理照度。 更广泛的模拟/数字传感器分类电位器、按钮、数字温度传感器等可参考 本课 README 中的 Sensor types 章节其中还介绍了模拟量到数字量转换ADC的原理。在 CounterFit 中添加光敏传感器要在代码中读取光敏值第一步是在 CounterFit 应用中创建这个虚拟传感器。操作步骤确保 CounterFit 应用正在运行如果上一部分任务结束后已关闭请先启动它在 VS Code 终端中执行counterfit命令应用会在浏览器中打开并监听127.0.0.1:5000。如果此前终端被占用请新建一个 VS Code 终端确保其处于激活的 Python 虚拟环境中提示符前缀出现(.venv)。创建光敏传感器在左侧Sensors传感器面板的Create sensor创建传感器区域中展开Sensor type传感器类型下拉框选择Light将Units单位保持为NoUnits无单位这与上文读数无标准计量单位的原理一致确认Pin引脚设置为0点击Add添加按钮即在 Pin 0 上创建了一个光敏传感器。创建成功后光敏传感器会出现在下方的传感器列表中可随时修改其参数编程驱动光敏传感器设备创建完成后即可在代码中通过 CounterFit 的 Grove shim 库读取它的值。打开你在上一部分创建的nightlight项目中的app.py文件按以下步骤编写。第 1 步导入所需库在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 Python 库中导入GroveLightSensor类。这个库封装了与 CounterFit 应用中光敏传感器交互的底层代码——你以操作真实 Grove 传感器相同的方式编写代码实际数据则由 CounterFit 虚拟提供。 除了上述导入完整的可运行代码还需要连接 CounterFit 的连接库。仓库中的完整示例code-sensor/virtual-device/nightlight/app.py顶部还包含from counterfit_connection import CounterFitConnection CounterFitConnection.init(127.0.0.1, 5000)这两行初始化与本地 CounterFit 应用的连接地址127.0.0.1即本机 localhost端口5000它们来自上一节连接虚拟硬件任务的已有代码。第 2 步创建传感器实例在文件底部或在连接初始化之后添加light_sensor GroveLightSensor(0)这行代码创建GroveLightSensor类的一个实例并连接到引脚 0——即 CounterFit Grove 引脚上挂载光敏传感器的位置。这里传入的引脚号必须与你在 CounterFit 界面中配置的Pin保持一致本例为 0。第 3 步编写无限循环轮询光强在实例声明之后添加一个无限循环持续读取光敏值并输出到控制台while True: light light_sensor.light print(Light level:, light)light_sensor.light是GroveLightSensor类的light属性负责从引脚读取模拟量数值读取到的值通过print打印到控制台格式为Light level: 值。 从源码结构看light属性是对从模拟引脚读取值这一操作的封装真实 Grove 光敏传感器通过 Grove HAT 上的 ADC 把电压转换为 0~1023 的整数值shim 库则负责与 CounterFit 应用通信并返回同样的语义——对应用层代码而言两者读取方式完全一致。第 4 步加入休眠降低功耗在while循环末尾加入一秒的短暂休眠time.sleep(1)光照水平不需要被持续不间断地检查time.sleep(1)让每次轮询间隔 1 秒从而降低设备的功耗对于真实电池供电设备这一点尤为重要。第 5 步运行程序在 VS Code 终端中确保虚拟环境已激活运行python3 app.py控制台会开始输出光强读数初始状态尚未在 CounterFit 中设置值读数通常为 0。动态调整传感器读数Value 与 Random 两种模式程序运行期间你可以在 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 完整代码位于仓库 code-sensor/virtual-device 目录。从仓库源码验证完整实现仓库中提供了本节的完整可运行代码位于 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)可以看到代码与本文逐步讲解的片段完全对应额外增加了与 CounterFit 建立连接的两行。它与你随后要实现的夜灯版本code-actuator/virtual-device/nightlight/app.py共用同一个GroveLightSensor(0)与轮询骨架——下一节只需在此基础上叠加 LED 执行器即可。下一步组合 LED 构成完整夜灯至此夜灯的眼睛光敏传感器已经就绪。接下来只需添加手——一个 LED 执行器并用阈值判断点亮或熄灭它if light 300: led.on() else: led.off()LED 是数字执行器digital actuator只有开发送数字信号 1与关发送 0两种状态阈值 300 对应光线过暗的判定条件光强读数低于 300 时点亮 LED否则熄灭。这一部分在 CounterFit 中创建引脚 5 上的 LED、驱动夜灯逻辑、以及在浏览器中观察 LED 随光强明灭的完整步骤请继续阅读 虚拟设备——执行器篇构建夜灯。对照两份文档你将完整走通传感器采集 → 逻辑判断 → 执行器响应这条 IoT 设备端核心链路全程无需任何物理硬件。【免费下载链接】IoT-For-Beginners12 Weeks, 24 Lessons, IoT for All!项目地址: https://gitcode.com/GitHub_Trending/io/IoT-For-Beginners创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表