目录

引言

光照传感器GY-30

ELF-RK3506开发板硬件接口

I2C接口测试

扫描 I2C1 总线

读传感器数据

结束语


引言

昨天针对ELF-RK3506开发板完成了AI编程环境的搭建,不过那个测试程序比较简单,接下来要进行硬件接口的测试,我们首先测试的官方提供的光照传感器GY-30。

光照传感器GY-30

GY-30 传感器(核心芯片为 BH1750)采用I2C 通信协议,需通过 4 根线(VCC、GND、SDA、SCL)与开发板所提供的树莓派 40Pin 引脚连接。

GY-30 模块通常为 4 引脚或 5 引脚设计(5 引脚多 1 个 ADDR 地址选择脚,默认可不用),核心引脚功能如下:

GY-30 引脚功能说明关键参数
VCC电源输入支持 3.3V~5V(推荐 3.3V,与树莓派匹配)
GND接地电源地,需与树莓派共地
SDAI2C 数据引脚双向数据传输线
SCLI2C 时钟引脚同步时钟信号线
ADDR(可选)地址选择悬空 = 0x23(默认),接 VCC=0x5C,接 GND=0x23

ELF-RK3506开发板硬件接口

ELF-RK3506 的 40Pin 2.54mm 连接器兼容树莓派 40Pin 连接器。包含了 I2C 、 SPI 、 UART 和若干 GPIO 。

在40pin中,提供了I2C2和I2C0。其中I2C2在核心板上连接EEPROM,所以在连接外设上必须保证地址不会冲突,否则系统无法启动。

按以下表格将 GY-30 与树莓派40pin引脚直接连接,严禁接反电源正负极:

GY-30 引脚树莓派 40Pin 物理引脚连线颜色建议注意事项
VCC1 号(3.3V)红色必须接 3.3V,接 5V 可能烧毁传感器
GND6 号(GND)黑色确保与树莓派共地,否则通信不稳定
SDA3 号(SDA1)蓝色严格对应 I2C2 的 SDA 引脚,不可接错
SCL5 号(SCL1)黄色严格对应 I2C2的 SCL 引脚,不可接错

I2C接口测试

扫描 I2C1 总线

输入以下命令扫描 I2C2 总线,该命令用于扫描 I2C 总线 2(对应设备节点 /dev/i2c-2) 上挂载的所有 I2C 从设备,输出结果显示总线上的设备地址及状态。

i2cdetect -y 2

得到如下输出:

root@elf3506-buildroot:~# i2cdetect -y 2
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- 23 -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: 50 -- -- -- -- -- -- -- 58 -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --

表格结构:

  • 横向(列):从 00 到 f,代表 I2C 从设备地址的低 4 位(十六进制);
  • 纵向(行):从 00 到 70,代表 I2C 从设备地址的高 4 位(十六进制);
  • 单元格内容:-- 表示 “该地址无设备”,23/50/58 表示 “该地址有设备响应”(十六进制地址)。

表格中3 个非--的地址(23、50、58)是核心信息,每个地址对应特定的 I2C 设备,结合硬件常识和之前的引脚表信息可精准定位:

I2C 地址(十六进制)对应设备类型关键特征与关联信息
0x23光照传感器(如 BH1750)1. 这是 GY-30 模块(BH1750 芯片)的默认地址(ADDR 引脚悬空时);2. 功能:测量环境光照强度,单位为 lux;3. 与之前讨论的 “GY-30 连接” 场景完全匹配,说明传感器已成功挂载到 I2C2 总线。
0x50EEPROM 存储芯片1. 这是核心板预设的 EEPROM(在之前引脚表 “使用说明” 中明确提到:I2C2 挂载地址 1010000R/W 的 EEPROM,二进制1010000即十六进制0x50);2. 功能:存储开发板配置信息(如硬件版本、序列号);3. 硬件特性:核心板已为其配置 2K 上拉电阻,无需额外外接。
0x58其他 I2C 设备(需结合硬件确认)1. 常见可能性: - 温度传感器(如 TMP102,默认地址 0x48/0x58,需看硬件接线); - 触摸控制器、ADC 芯片等;2. 关键提示:该设备是额外挂载的硬件(非核心板默认),需查看实际接线或硬件设计图确认具体型号。

读传感器数据

读取光照数据用i2cget命令测试读取(需先发送测量命令),示例:

# 发送“连续高分辨率测量”命令(0x10)
i2cset -y 2 0x23 0x10
sleep 0.2  # 等待测量完成
# 读取2字节数据(光照强度 = (高字节<<8 + 低字节)/1.2)
i2cget -y 2 0x23 0x00 w  # w表示读取16位数据

第一条命令:i2cset -y 2 0x23 0x10—— 发送测量指令。这条命令的作用是向 GY-30 传感器发送 “启动光照测量” 的控制指令,各参数含义明确,对应 I2C 通信的核心要素:

命令参数含义解析与传感器的关联
i2csetI2C 工具命令,功能是 “向 I2C 从设备写入数据”(包括控制指令、寄存器配置等)用于触发传感器执行特定操作(此处是启动测量)
-y可选参数,含义是 “跳过交互确认”(无需手动输入y确认操作)简化脚本自动化操作,避免手动干预
2核心参数,指定 “目标 I2C 总线编号”,对应系统设备节点/dev/i2c-2与之前扫描结果一致(GY-30 挂载在 I2C2 总线)
0x23核心参数,指定 “I2C 从设备地址”(十六进制)是 GY-30 的默认地址(ADDR 引脚悬空时),与扫描结果中的23完全匹配
0x10核心参数,指定 “要写入的指令 / 数据”(十六进制)这是 BH1750 芯片的 **“连续高分辨率测量模式” 指令 **:1. “连续”:一旦启动,传感器会持续测量,无需重复发指令;2. “高分辨率”:测量精度最高(最小分辨率 1lux,测量范围 1~65535lux);3. 该模式是 GY-30 最常用的工作模式,适合需要实时光照数据的场景。

传感器收到0x10指令后,会立即启动光照采集电路,开始测量当前环境光照强度,测量过程约需 120ms(手册规定的最小测量时间)。

第二条命令:i2cget -y 2 0x23 0x00 w—— 读取光照数据。这条命令的作用是从 GY-30 传感器中读取 “已测量完成的光照数据”,各参数对应 I2C 数据读取的关键配置:

命令参数含义解析与传感器的关联
i2cgetI2C 工具命令,功能是 “从 I2C 从设备读取数据”(包括测量结果、状态寄存器等)用于获取传感器的测量输出
-y同前,跳过交互确认简化操作流程
2同前,指定 I2C2 总线(/dev/i2c-2)确保读取的是目标总线的设备
0x23同前,指定 GY-30 的设备地址确保读取的是目标传感器
0x00指定 “要读取的传感器寄存器地址”(十六进制)BH1750 的 “光照数据寄存器” 默认地址为0x00,测量结果会存储在此寄存器中
w可选参数,指定 “读取数据的长度”,w代表 “word(16 位,2 字节)”BH1750 的光照数据是 16 位无符号整数(范围 0~65535),需读取 2 字节才能完整获

返回的结果如下:

root@elf3506-buildroot:~# i2cset -y 2 0x23 0x10
root@elf3506-buildroot:~# i2cget -y 2 0x23 0x00 w
0x0900

0x0900是十六进制的 16 位数据,不能直接作为光照值使用,需按 BH1750 的数据格式规则转换为实际光照强度(单位:lux,勒克斯):

步骤 1:十六进制转十进制

0x0900是十六进制表示,转换为十进制的计算过程:

  • 高位字节(前两位09):0x09 = 9,左移 8 位后为 9 × 256 = 2304
  • 低位字节(后两位00):0x00 = 0
  • 完整十进制值:2304 + 0 = 2304(即0x0900对应的十进制数)

步骤 2:按传感器精度换算光照值

BH1750 在 “高分辨率模式” 下,有固定的换算公式(手册明确规定):实际光照强度(lux)= 十进制数据值 ÷ 1.2

代入当前数据计算:光照强度 = 2304 ÷ 1.2 = 1920 lux

结果说明:1920 lux 代表什么?

1920 lux 属于中等偏强的光照环境,对应实际场景参考:

  • 室内强光照射(如窗边正午阳光):约 1000~3000 lux
  • 阴天室外:约 500~1000 lux
  • 晴天室外阴影处:约 10000~20000 lux
  • 普通办公室照明:约 300~500 lux

我用东西把光照传感器遮挡了一下,再次读光照数据,此次得到的数据是0x0200,换算下来是426.7 lux,光照强度明显降低。

结束语

本次基于 ELF-RK3506 开发板完成了 GY-30 光照传感器的全流程测试,从硬件接线规范、I2C 总线扫描到传感器数据读取与换算,验证了开发板 I2C2 接口的正常工作,也掌握了 BH1750 芯片的基础使用逻辑。

需要注意的是,实际项目中若需持续采集光照数据,接下来我们还会在AI 编程环境编写C 语言程序实现自动化读取与数据处理。如果在测试过程中遇到问题,欢迎在评论区交流,也可以关注后续的硬件接口测试系列内容。

更多推荐