ARTICLE DETAIL

资讯详情

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

基于 Raspberry Pi 构建 IoT 夜灯:Grove 光传感器接入与 Python 编程实战(IoT-For-Beginners 课程)

基于 Raspberry Pi 构建 IoT 夜灯:Grove 光传感器接入与 Python 编程实战(IoT-For-Beginners 课程) 基于 Raspberry Pi 构建 IoT 夜灯Grove 光传感器接入与 Python 编程实战IoT-For-Beginners 课程【免费下载链接】IoT-For-Beginners12 Weeks, 24 Lessons, IoT for All!项目地址: https://gitcode.com/GitHub_Trending/io/IoT-For-Beginners本篇技术指南出自 GitHub 精选项目IoT-For-Beginners12 周、24 课时的物联网入门课程第 3 课「传感器与执行器」聚焦于在 Raspberry Pi树莓派单板计算机上接入 Grove 光传感器并编写 Python 程序读取环境光照为后续用 LED 构建自动夜灯打下基础。读完本篇你将掌握光电二极管传感器的硬件接线方法、模拟传感器与 ADC 转换原理以及使用 Grove Python 库轮询传感器并打印光照数值的完整实操流程。硬件准备Grove 光传感器与光电二极管本课使用的传感器是光传感器light sensor其核心元件是 光电二极管。光电二极管能够将光转换为电信号光越强产生的电流或电压变化越大。这是一个模拟传感器它输出一个0 到 1,023 之间的整数值表示相对光照量而不是映射到 lux 这样的标准照度单位——也就是说该读数只在同一颗传感器、同一个电路条件下具有相对比较意义。Grove 光传感器是 Seeed Studio Grove 生态中的外部传感器模块需要借助 Grove Base Hat树莓派扩展帽接入 Raspberry Pi。Grove Base Hat 插在 Pi 的 GPIO 引脚上将 Grove 模块的 4 针接口VCC、GND、SIG 等统一转为易于插拔的 Grove 线缆接口无需焊接。传感器在课程中的定位在本课所在的完整项目中传感器是夜灯系统的「输入」它负责感知物理世界的光照变化并将信息传送给 IoT 设备。正如本课 README.md 所述传感器是感知物理世界的硬件设备可测量温度、按钮按压、光照、图像、加速度、声音等属性其共同点是将感知到的物理量转换为 IoT 设备可解释的电信号。硬件连接将光传感器接入 Grove Base Hat 的 A0 模拟接口连接步骤按照 pi-sensor.md 的说明将 Grove 光传感器连接到 Raspberry Pi全程需要保证安全断电操作将 Grove 线缆的一端插入光传感器模块上的插座。该插座有防呆设计只能以一个方向插入。保持 Raspberry Pi 处于断电状态将 Grove 线缆的另一端连接到 Grove Base Hat 上标有A0的模拟插座。这个插座位于 GPIO 引脚旁边那排插座的右数第二个位置。注意A0 属于模拟引脚。在 Grove Base Hat 中模拟传感器必须连接到标有 AAnalog的端口因为该端口经过板载 ADC模拟-数字转换器后才能通过 GPIO 引脚把数字信号送给 Pi。为什么模拟传感器必须走 A0 端口ADC 转换原理Raspberry Pi 的 GPIO 是纯数字接口只能处理 0 和 1无法直接读取 1V、2.5V 这类连续模拟电压。因此 Grove Base Hat 板载了ADC模拟-数字转换器负责把模拟电压转换为数字量课程 README.md 中给出了一个直观示例假设光传感器在 3.3V 供电下输出 1V按 Seeed Grove 光传感器 0–1,023 的量程换算1V 对应数值300ADC 会把 300 转换为其二进制表示0000000100101100再通过 GPIO 引脚送入 Pi 处理从编码角度看这种转换完全由传感器配套库封装开发者无需自行处理——这正是我们接下来直接调用light属性即可拿到整数值的原因。编程实现读取光照值的完整 Python 代码现在可以对设备编程了。代码文件位于仓库的 code-sensor/pi/nightlight/app.py完整代码如下import time from grove.grove_light_sensor_v1_2 import GroveLightSensor light_sensor GroveLightSensor(0) while True: light light_sensor.light print(Light level:, light) time.sleep(1)下面按文档中的任务步骤逐步拆解这段代码的每一部分及其原理。第一步导入所需库在 VS Code 中打开上一课创建的 nightlight 项目可直接在 Pi 上运行 VS Code或通过 Remote SSH 扩展远程连接清空app.py后先加入两行导入语句import time from grove.grove_light_sensor_v1_2 import GroveLightSensorimport time导入 Python 标准库的time模块稍后用于在循环末尾添加休眠降低设备功耗from grove.grove_light_sensor_v1_2 import GroveLightSensor从 Grove Python 库中导入GroveLightSensor类。该库封装了与 Grove 光传感器交互的全部底层代码在 Pi 的初始化设置阶段已被全局安装因此无需额外安装依赖。第二步创建传感器实例light_sensor GroveLightSensor(0)这行代码创建GroveLightSensor类的实例参数0表示连接到A0引脚——即光传感器实际插入的模拟 Grove 端口。类库内部会通过 A0 对应的 ADC 通道读取电压并转换为 0–1,023 的整数值。第三步无限循环轮询光照值while True: light light_sensor.light print(Light level:, light)light_sensor.light属性从引脚读取当前的模拟转换值量程为0–1,023print(Light level:, light)将读数输出到控制台。第四步添加一秒休眠time.sleep(1)在循环末尾加入 1 秒休眠。光照水平不需要被持续不间断地检测加入休眠既能避免刷屏也能显著降低设备的功耗这对电池供电的 IoT 设备尤为重要。该语句必须缩进在while循环体内部。第五步运行程序在 VS Code 终端中执行python3 app.py光照值会持续输出到控制台。用手遮住再移开光传感器数值会随之变化典型输出如下piraspberrypi:~/nightlight $ python3 app.py Light level: 634 Light level: 634 Light level: 634 Light level: 230 Light level: 104 Light level: 290可以观察到当手遮住传感器时如数值 230、104光照值明显下降移开遮挡后如数值 634、290数值回升。由于该值是相对量而非 lux 绝对照度不同光线环境下数值范围会不同这是正常现象。源码佐证与下一步从传感器到完整夜灯仓库中 code-sensor/pi/nightlight/app.py 与该指南中的代码完全一致可作为对照参考同目录下还提供了 Wio Terminal 版本使用analogRead读取 A0以及虚拟设备版本方便不同硬件路线的学习者对照学习。在 pi-actuator.md 中本课继续用数字引脚D5接入 Grove LED通过如下逻辑完成完整的夜灯Check the light level. If the light is less than 300 Turn the LED on Otherwise Turn the LED off即在本段光传感器代码的基础上导入GroveLed、创建led GroveLed(5)实例并在while循环内time.sleep之前加入if light 300: led.on() else: led.off()的阈值判断使 LED 在光照低于 300 时自动点亮——至此「感知物理世界光传感器 影响物理世界LED 执行器」的完整 IoT 闭环便构建完成。排障要点小结数值不变化检查 Grove 线缆是否完全插紧、是否插反插座防呆设计下反插是插不进去的数值为 0 或异常跳变确认传感器插在A0模拟端口而非数字端口程序报 ModuleNotFoundError确认 Grove Python 库已在 Pi 全局安装设置阶段完成或尝试重新执行pip3 install grove.py以 Pi 环境的实际安装方式为准调试期间建议保持休眠time.sleep(1)不仅省电也让输出便于肉眼观察遮挡与移开时的数值变化。【免费下载链接】IoT-For-Beginners12 Weeks, 24 Lessons, IoT for All!项目地址: https://gitcode.com/GitHub_Trending/io/IoT-For-Beginners创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表