本次选用的数字光传感器为M5 的Dlight 内部为一个BH1750
效果展示
BH1750 是一款数字光传感器,广泛用于环境光照强度的测量。其主要优点包括:
高精度和高灵敏度:
BH1750 提供了高精度的光照测量,适用于低光和高光环境。
测量范围从 1 到 65535 Lux,能够准确反映不同环境下的光照强度。
数字输出:
传感器通过 I2C 接口输出数字信号,避免了模拟信号的噪声干扰。
数据处理更简单,无需额外的模拟到数字转换(ADC)。
低功耗:
BH1750 工作在低功耗模式下,非常适合便携式设备和电池驱动的应用。
I2C 接口:
支持 I2C 通信协议,简化了与微控制器(如 ESP32、Arduino)的连接,且允许多个设备共享同一数据总线。
可通过 I2C 地址进行配置,轻松集成到不同的系统中。
多种工作模式:
提供几种不同的测量模式,允许用户根据需要选择测量频率和精度(如正常模式、快速模式和高分辨率模式)。
内建增益和低噪声:
内部增益调节和低噪声设计使其在各种光照条件下都能提供稳定的输出。
I2C 通信原理
I2C(Inter-Integrated Circuit)是一种常用的串行通信协议,用于微控制器与外部设备(如传感器、显示器、存储器等)之间的通信。BH1750 传感器采用 I2C 协议进行数据传输,下面是 I2C 通信的基本原理:
I2C 总线:
I2C 使用两根线进行通信:数据线(SDA)和时钟线(SCL)。
SDA 负责数据传输,SCL 负责提供时钟信号同步数据传输。
主从结构:
I2C 总线采用主从式通信,主设备控制时钟并发起通信,多个从设备共享同一总线。
BH1750 作为从设备,接收来自主设备(如 ESP32 或 Arduino)的指令并返回测量数据。
通信过程:
启动信号:主设备通过发送特定的信号启动通信。
地址选择:每个从设备都有唯一的地址,主设备在通信时需要选择目标设备的地址。BH1750 的 I2C 地址通常为 0x23 或 0x5C(取决于地址引脚的设置)。
读写操作:主设备可以选择读取或写入数据。读取模式用于从 BH1750 获取光照数据,写入模式用于向 BH1750 配置设置。
停止信号:通信结束时,主设备发送停止信号。
数据传输:
数据传输基于时钟同步的串行传输,数据通过逐位传输的方式从主设备发送到从设备,或从从设备发送到主设备。
在 BH1750 中,数据通常是光照强度的数字值,主设备通过 I2C 总线接收并处理这些值。
工作模式配置:
通过 I2C 命令,主设备可以选择 BH1750 的工作模式(如连续测量模式或单次测量模式),并读取传感器的测量结果。
I2C 通信读取BH1750I2C 通信流程示例(使用 Arduino)
初始化 I2C 总线:
Wire.begin(); // 初始化 I2C 总线
配置 BH1750 传感器(设置工作模式):
Wire.beginTransmission(0x23); // 设备地址,通常为 0x23 或 0x5C Wire.write(0x10); // 设置为连续高分辨率模式 Wire.endTransmission();
读取数据:
Wire.requestFrom(0x23, 2); // 请求 2 字节数据 uint16_t lightLevel = Wire.read() << 8 | Wire.read(); // 组合为一个 16 位值
处理读取的光照数据(单位 Lux):
float lux = lightLevel / 1.2; // 转换为 Lux 单位 Serial.println(lux);
通过 I2C 接口,BH1750 能够实现快速、稳定的光照数据传输,适用于各种智能设备中对环境光的实时检测。