前言
刚开始使用BH1750传感器模块的时候,看不懂它的数据手册,捣鼓了半天,我搞通了。所以通过写文章来记录一下怎么使用这个BH1750传感器模块的,方便今后的复盘。同时你们要是哪里不懂的也可以给我评论,我会回评论的。注:下面的模块都是指BH1750传感器模块。
产品介绍
1.测量程序步骤

2.BH1750指令集
通过发送1个字节的指令即可配置BH1750的模式。比如你给模块发送0x01(00000001),则将模块通电;你给模块发送0x10(00010000),则将模块设置成为连续H分辨率模式。通过上面的指令集可以看出来测量模式一共有6种:连续H分辨率模式、连续H分辨率模式2、连续L分辨率模式、一次H分辨率模式、一次H分辨率模式2、一次L分辨率模式。
你看上面的指令集有一次和连续模式。刚好就是对应1.测量程序步骤中的连续测量和一次测量。
3.测量模式说明
这个数据手册建议我们使用H分辨率模式,所以我们就不使用L分辨率模式了。那我我们测量模式就剩下四种了:连续H分辨率模式、连续H分辨率模式2、一次H分辨率模式、一次H分辨率模式2。你使用那个都行,我最终使用的是连续H分辨率模式2,因为这个分辨率高一点。
4.测量过程实例
这里一定一定一定要看懂,要不然代码都不知道怎么写。ADDR='L',ADDR='H',这两个到底什么意思?如果你对IIC设备很熟悉的话,一定懂得这两个东西。因为我也是刚开始接触这方面,我看不懂。我们得往下看手册了。
![]() |
这个就得从IIC层面来说了,简单易懂来说:
所有IIC设备都有一个专属的设备地址,BH1750也不例外,BH1750一共有2个设备地址,可以通过芯片的ADDR引脚切换。如果ADDR引脚置高电平(大于等于0.7V),则模块的设备地址为:1011100,如果ADDR引脚置低电平(小于等于0.3V),则模块的设备地址为:0100011,有朋友就会觉得疑惑了,地址不应该是8位的吗?为什么这里只有7位?(下面说)
所以我们回到测量过程实例,看到有两个实例(实例1和实例2)是吧。下面只说明
实例1就是说,ADDR='L'的情况下,将模块的模式设置为连续H分辨率模式,你的指令应该怎么发。
第一步:发送"连续H分辨率模式"指令。①ST:发送IIC的起始条件。②发送“01000110”给模块(0100011是表示模块设备的地址,0表示接下来的指令是写操作)。③ACK:等待模块给你回复。④00010000:给模块发送00010000,表示将模块的模式设置为:连续H分辨率模式。
第二步:延时180ms,这里是为什么?看回“3.测量模式说明”是不是有一个测量时间,这是延时180ms就是给模块测量的时间,他写着是120ms,我们避免出错,我们给他长一点的测量时间,让他测量得完完全全。
第三步:读测量结果。①ST:发送IIC的起始条件。②发送“01000111”给模块(0100011是表示模块设备的地址,1表示接下来的指令是读操作)。③ACK:等待模块给你回复。④High Byte:这个就是光照强度的高8位。⑤ACK:你给模块的回应。⑥Low Byte:这个就是光照强度的低8位。⑦ACK:你给模块的回应。⑧SP:发送IIC的结束条件。
通过这个实例,就可以写代码啦。