GY-302是一款基于BH1750FVI光照强度传感器芯片的模块。该模块能够直接测量出环境中的光照强度,并将光照强度转换为数字信号输出。其具体参数如下表所示。
参数名称 | 参数特性 |
测量范围 | 0-65535 LX |
测量精度 | 在环境光下误差小于±20%,能够自动忽略50/60Hz的闪烁光源 |
分辨率和测量时间 | 从低分辨率快速模式(4 LX分辨率,最快16ms测量时间) 到高分辨率模式(0.5LX分辨率,最慢120ms测量时间) |
通信方式 | 标准IIC通信,最大通信速率为400kHz |
元件:
- GY-302光照强度模块
- ESP32 DEVKIT_C开发板
- 杜邦线
- USB Type-C
接线:
ESP32 DEVKIT_C | GY-302 |
VIN或3V3 | VCC |
GND | GND |
D18 | SCL |
D19 | SDA |
注:GY-302中的ADDR引脚悬空不接;GY-302中的SCL和SDA引脚也可以连接到ESP32中的其他硬/软件IIC引脚,只需在代码中做出相应的配置
代码:
from machine import Pin
import time
gy302_addr = 0x23 # 光线传感器I2C地址
from machine import I2C
i2c = I2C(0, freq = 1_000_000) #初始化IIC0,使用默认引脚“SCL=18、SDA=19”,传输速度:100 Kbps
#i2c = I2C(1, freq = 1000000) #初始化IIC1,使用默认引脚“SCL=25、SDA=26”,传输速度:100 Kbps
#from machine import SoftI2C
#i2c = SoftI2C(scl=Pin(5), sda=Pin(4), freq=1000000) #初始化软件IIC,SCL=5、SDA=4,传输速度:100 Kbps
#i2c = SoftI2C(scl=Pin(33), sda=Pin(32), freq=4_000_000) #初始化软件IIC,SCL=33、SDA=32,传输速度:400 Kbps
#print(hex(i2c.scan()[0])) # 打印器件I2C地址
def gy_302_Init():
i2c.writeto(gy302_addr, chr(0x01)) # 发送上电命令
#i2c.writeto(gy302_addr, chr(0x07)) # 发送复位命令
#i2c.writeto(gy302_addr, chr(0x10)) # 发送高分辨率连续测量命令 分辨率:1Lx 测量时间:120ms
i2c.writeto(gy302_addr, chr(0x11)) # 发送高分辨率连续测量命令2 分辨率:0.5Lx 测量时间:120ms
#i2c.writeto(gy302_addr, chr(0x13)) # 发送低分辨率连续测量命令 分辨率:4Lx 测量时间:16ms
def gy_302():
gy = i2c.readfrom(gy302_addr, 2) # 从gy302_addr地址设备读取2位数据
gy302 = float(gy[0] << 8 | gy[1]) / 1.2 # 左移,可以理解为 gy[0]*0xff
return gy302
gy_302_Init()
while True:
#print("光照值 = %d Lx" %round(gy_302()))
print("光照值 = ", gy_302()," Lx")
time.sleep(1)