
基于 Raspberry Pi 与 Grove 光敏传感器的夜灯实战从硬件接线到 Python 数据采集【免费下载链接】IoT-For-Beginners12 Weeks, 24 Lessons, IoT for All!项目地址: https://gitcode.com/GitHub_Trending/io/IoT-For-Beginners本教程是 IoT-For-Beginners 课程第 3 课「使用传感器与执行器与物理世界交互」的 Raspberry Pi 实战篇。你将学习如何将一个基于光电二极管photodiode的 Grove 模拟光敏传感器连接到树莓派Raspberry Pi的 Grove Base hat并通过 Python 程序持续读取环境光强度为后续「光线变暗时自动点亮 LED」的夜灯nightlight应用打下基础。完成本部分后你将掌握模拟传感器的接线方法、Grove Python 库的调用方式以及如何编写一个低功耗的轮询循环读取传感器数据。传感器概述基于光电二极管的模拟光敏传感器本节使用的传感器是光敏传感器light sensor其核心元件是光电二极管——当光线照射到二极管上时会产生与光照强度成正比的电流从而将光信号转换为电信号。这是一个模拟传感器analog sensor它返回一个 0 到 1,000 之间的整数值用于表示相对光照强度。需要特别注意的是这个数值并不映射到任何标准的物理光照单位如 lux它只是一个相对的、可比较的读数。例如数值从 634 降到 104说明环境光显著变暗但 634 具体对应多少 lux 是无法直接换算的。在硬件层级上该传感器是 Seeed Grove 生态系统的外部模块需要连接到 Raspberry Pi 上的 Grove Base hat扩展板才能工作。模拟信号为何需要 ADC 转换Raspberry Pi 是数字设备只能处理 0 和 1无法直接理解模拟电压值。因此Grove Base hat 上内置了模数转换器ADCAnalog-to-Digital Converter模拟传感器接入 hat 上特定的模拟端口hat 将电压值转换为数字信号后再通过 GPIO 引脚传给 Pi。以本课的 Seeed Grove 光敏传感器为例其输出数值范围为 0 到 1,023。假设传感器运行在 3.3V 电压下返回 1V 电压换算得到的模拟值约为 300Grove hat 会将其转换为二进制0000000100101100即十进制 300交给设备处理。值得庆幸的是从编码角度看这一转换过程通常被传感器附带的库函数封装好了——正如后文所示我们只需要调用GroveLightSensor类的light属性即可拿到最终数值无需自己处理 ADC 细节。这部分原理的完整论述可参见本课主文档 1-getting-started/lessons/3-sensors-and-actuators/README.md。硬件接线将光敏传感器连接到 Grove Base hatGrove 光敏传感器通过 Grove 标准化线缆与 Raspberry Pi 连接整个过程非常简单。任务连接光敏传感器将 Grove 线缆的一端插入光敏传感器模块上的插座。该插座有防反插设计只有一个方向能插入。在 Raspberry Pi断电的状态下将 Grove 线缆的另一端连接到 Pi 上 Grove Base hat 的模拟插座A0。该插座位于 GPIO 引脚旁边那一排插座的右起第二个位置。⚠️ 接线时务必在 Pi 断电后进行避免热插拔对传感器或扩展板造成损伤。连接完成后硬件部分即告完成光敏传感器通过 A0 模拟端口接入 Grove Base hathat 内置的 ADC 会将模拟电压数字化供后续 Python 程序读取。编写 Python 程序读取光强数据在上一部分1-getting-started系列前序课程中你应该已经在 Pi 上创建了nightlight项目目录。接下来将app.py改写为光强采集程序。任务编程实现光强读取启动 Pi 并等待系统启动完成。在 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)构造函数参数0表示该传感器连接在A0模拟 Grove 引脚上——正是上一步硬件接线所使用的端口。添加一个无限循环持续轮询传感器数值并输出到控制台while True: light light_sensor.light print(Light level:, light)light是GroveLightSensor类的属性每次访问都会从引脚读取当前的模拟值范围 0–1,023。该值随后被打印到控制台。在while循环末尾添加 1 秒的休眠time.sleep(1)环境光不需要连续不断地被采样加入休眠可以显著降低设备功耗。这是低功耗 IoT 编程中的常见实践传感器读数频率越慢设备耗电越少电池续航越长。在 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从输出可以看到手遮住传感器时数值骤降至 104 附近移开后恢复到 200–600 以上的水平。这些相对数值正是后续夜灯逻辑判断的输入依据。仓库源码对照完整的 app.py 实现本教程的完整示例代码保存在仓库的code-sensor/pi目录中即 1-getting-started/lessons/3-sensors-and-actuators/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)这段代码与上述分步讲解完全一致可以直接复制运行。通过对照仓库源码可以确认程序结构为「导入库 → 实例化传感器 → 无限循环读取」的标准模式GroveLightSensor(0)的构造参数 0 即对应 Grove Base hat 上的 A0 模拟端口while循环内依次完成读取、打印、休眠三步循环周期约 1 秒。进阶将传感器与执行器结合完成夜灯闭环本部分只完成了「感知」环节。在下一步 pi-actuator.md 中你将添加一个数字执行器——LED构建完整的夜灯逻辑Check the light level. If the light is less than 300 Turn the LED on Otherwise Turn the LED off即将 LED 连接到 Grove Base hat 的D5数字插座然后在循环中加入if light 300: led.on() else: led.off()的判断。完整的传感器 执行器实现参见仓库中的 code-actuator/pi/nightlight/app.pyimport time from grove.grove_light_sensor_v1_2 import GroveLightSensor from grove.grove_led import GroveLed light_sensor GroveLightSensor(0) led GroveLed(5) while True: light light_sensor.light print(Light level:, light) if light 300: led.on() else: led.off() time.sleep(1)这正是本课核心作业的完整闭环传感器读取物理世界光照→ 程序决策 → 执行器改变物理世界点亮 LED。整个流程可参考课程主文档中的 作业流程图。故障排查要点数值始终不变检查 Grove 线缆是否完全插入、是否接在 A0 端口而非数字端口。数值异常偏高/偏低用手遮挡传感器表面测试响应确认光电二极管朝向正确。运行报ModuleNotFoundError确认 Grove Python 库已在 Pi 上全局安装该库在课程 Pi 环境搭建阶段完成安装。需要调整采样频率修改time.sleep()的参数单位秒但注意采样越频繁功耗越高。小结通过本部分学习你完成了以下关键技术动作将基于光电二极管的模拟光敏传感器接入 Raspberry Pi 的 Grove Base hat A0 端口理解了模拟传感器、ADC 模数转换与数字化读数0–1,023之间的对应关系使用GroveLightSensor类与light属性编写了 1 秒间隔的轮询采集循环为下一步「光强低于阈值时点亮 LED」的夜灯功能提供了可靠的传感器数据输入。至此你的夜灯项目已经拥有了「感知光线」的能力——接下来只需添加执行器即可完成整个闭环。【免费下载链接】IoT-For-Beginners12 Weeks, 24 Lessons, IoT for All!项目地址: https://gitcode.com/GitHub_Trending/io/IoT-For-Beginners创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考