news 2026/9/16 16:19:02

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于 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-Beginners(12 周、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,全程需要保证安全断电操作:

  1. 将 Grove 线缆的一端插入光传感器模块上的插座。该插座有防呆设计,只能以一个方向插入
  2. 保持 Raspberry Pi 处于断电状态,将 Grove 线缆的另一端连接到 Grove Base Hat 上标有A0的模拟插座。这个插座位于 GPIO 引脚旁边那排插座的右数第二个位置。

注意:A0 属于模拟引脚。在 Grove Base Hat 中,模拟传感器必须连接到标有 A(Analog)的端口,因为该端口经过板载 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 对应数值300
  • ADC 会把 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 GroveLightSensor
  • import 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,023
  • print('Light level:', light)将读数输出到控制台。

第四步:添加一秒休眠

time.sleep(1)

在循环末尾加入 1 秒休眠。光照水平不需要被持续不间断地检测,加入休眠既能避免刷屏,也能显著降低设备的功耗,这对电池供电的 IoT 设备尤为重要。该语句必须缩进在while循环体内部。

第五步:运行程序

在 VS Code 终端中执行:

python3 app.py

光照值会持续输出到控制台。用手遮住再移开光传感器,数值会随之变化,典型输出如下:

pi@raspberrypi:~/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),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/16 16:17:42

STM32多传感器融合:PPG心率与MPU6050计步系统设计

简介&#xff1a;本资源是一套完整的STM32单片机毕业设计项目&#xff0c;面向电子类、自动化及物联网方向的本科生与进阶学习者&#xff0c;聚焦健康可穿戴设备开发&#xff0c;实现心率脉搏实时监测、运动计步与移动端可视化三大核心功能。项目采用SW-1801P震动传感器采集步数…

作者头像 李华
网站建设 2026/9/16 16:15:33

STM32环境监测实战:20元开发板搭建温湿度烟雾报警系统

简介&#xff1a;面向物联网与嵌入式初学者的家庭环境监测系统完整工程&#xff0c;基于STM32F103C8T6&#xff0c;结合DHT11温湿度传感器、MQ-2烟雾传感器与0.9寸OLED屏&#xff0c;实现数据采集、实时显示与阈值报警。适合毕业设计、课程实训或智能家居入门&#xff0c;覆盖G…

作者头像 李华
网站建设 2026/9/16 16:14:25

毕业论文写作利器paperxie:AI辅助全流程解决方案

1. 毕业论文写作痛点与解决方案作为一名经历过毕业论文"洗礼"的过来人&#xff0c;我深知从选题到答辩的每个环节都充满挑战。记得当年我为了格式调整熬到凌晨三点&#xff0c;查重报告出来时手都在发抖。这种经历促使我深入研究了paperxie这款专为学术写作设计的智能…

作者头像 李华