给智能灯、温室或者智慧农业加个“测光”的部件,很多人第一反应是用光敏电阻。但光敏电阻只能给个大概的阻值变化,想拿到精确的照度数值,还得靠BH1750这种数字光强传感器。它直接用I2C通信,读出来就是单位勒克斯(lx)的照度,不用自己换算。这篇文章讲清楚接线和读取。

GY-302板上都接了啥:电平转换加稳压
单颗BH1750芯片是6脚贴片,但我们买到手的往往是GY-302模块。这块板上把芯片本身需要的外围元件都焊好了,还做了两件事:加了稳压和电平转换。所以模块可以直接接受3.3V到5V供电,I2C信号也能和Arduino、树莓派、ESP32这些不同电平的单片机直接对接,省去自己搭电平匹配电路。
模块上丝印的引脚一般有VCC、GND、SCL、SDA、ADDR五个。VCC接3.3V或5V,GND接地,SCL和SDA分别接到主控的I2C时钟和数据脚。ADDR是地址选择脚,悬空时芯片地址是0x23,把它接到VCC地址就变成0x5C,总线地址紧张时可以靠这个错开多片。

怎么读:I2C地址扫一下,读数就出来
接线就三根线加两个电源脚,麻烦的是地址对不对。最稳妥的做法是先跑一遍I2C扫描,把挂在总线上的设备地址打出来,确认是0x23还是0x5C,再在代码里写对,能省掉一大半“读出来全是255”的排查时间。
读数的逻辑很固定:库里初始化后用两条指令,先发一条测光指令让芯片开始采样,然后等它量完再把结果读出来,返回的就是以勒克斯为单位的照度。芯片有一个测量精度分辨率,想快就降精度、两倍亮度计就配高分辨率,可按场景调。
应用和三个高频坑
照度数值能做很多事:智能台灯根据环境光自动调亮度、温室根据光照决定要不要补光、甚至在小车上判断经过了明暗区域。读出来的lx直接当变量用,比光敏电阻的“高/低电平”精细太多。
坑主要有三个。一是传感器的感光面朝向:它片上有个小窗口,要让窗口朝上且不被挡住,玻璃、标签纸一挡读数就明显偏低。二是漫射范围,贴得太靠近测量物或局部强光源,读的是局部值而不是房间整体,想测“人眼感受到的亮度”最好让传感器朝天花板方向。三是有的人把SDA/SCL交叉接反,I2C就搜不到,检查交叉比改代码快。
BH1750是个“开箱即用”的测光件,接线三根、地址扫一下、读数直接是勒克斯,做智能光控项目很靠谱。想给项目加个会“感知光线”的部件,它比光敏电阻省心不少。


感光窗口朝上这个细节真有人不知道,贴纸一挡读数就掉
智能灯自动调亮度用它做个环境光采样正合适
照度直接出勒克斯这点比光敏电阻省心太多,不用自己算半天
地址扫一下再读,我之前不扫直接读全是255,卡了好久