使用BH1750FVI I2C数字光传感器

15

BH1750设备是使用I2C接口的数字光传感器。这样就可以仅用四根线将其连接到Raspberry Pi。

该模块可进行快速,廉价的环境光水平测量,并且由于内置16位模数转换器,因此可以数字形式从中读取光水平。该设备本身通常用于移动电话,LCD电视和数码相机。

BH1750光传感器模块

的模组 I’尺寸仅为32 x 16mm。我将五针插头焊接到PCB上,这使我可以将其插入一块面包板上。

BH1750环境光传感器IC数据表 提供了所有技术细节,其中一些在我的示例Python脚本中使用。

配置I2C接口

In order to use this 模组 you must enable the I2C 接口 上 the Raspberry Pi as it is not enabled by default. This is a fairly easy process and is described in my Enabling 的I2C Interface On 的Raspberry Pi 教程。

将光传感器硬件连接到Pi

的following table shows how I connected the 模组 pins 上 the 印刷电路板 to the Pi’s 通用输入输出头(P1)。请参考我的 通用输入输出头指南 为图。

模块PCB描述通用输入输出接头引脚
地线地面P1-14
地址选择P1-14
SDAI2C SDAP1-03
SCLI2C SCLP1-05
VCC3.3VP1-01

Here is a diagram of a breadboard setup. If you are connecting the 模组’五个直接连接到Pi的引脚,您只需要五根母-母线即可。

BH1750模块设置

该Fritzing图使用了为模块创建的自定义零件。其他模块的插针排列可能有所不同,因此如果您的插针稍微不同,请确保将正确的插针连接到Pi。

连接设备并打开Pi电源“i2cdetect”命令应显示地址为0x23的设备。

示例Python脚本显示光照水平

You can download an example script to read the light level from the 模组 and 打印it to the 屏幕.

使用以下命令:

wget //bitbucket.org/MattHawkinsUK/rpispy-misc/raw/master/python/bh1750.py

或使用 这个连结 在浏览器中。

为了运行它,您可以使用:

蟒蛇 bh1750.py

或对于Python 3:

蟒蛇3 bh1750.py

的output should look something like :

BH1750示例输出

的while loop keeps taking readings every half second until you press CTRL-C.

蟒蛇脚本注意事项:

  • import语句将导入其余代码中使用的Python库,包括处理I2C接口的smbus。
  • 所有I2C设备都必须有一个地址。在此示例中,我将ADDR引脚接地,因此设备使用的地址为0x23。如果ADDR引脚连接到3.3V,则地址变为0x5C。
  • 常数块在数据表中列出,并定义了器件可以工作的不同模式。我定义了所有常数,但仅使用“ONE_TIME_HIGH_RES_MODE_1”。其他模式只有在需要获取高速读数时才有意义。
  • 的“smbus.SMBus(1)”函数设置I2C接口。
  • 的“read_i2c_block_data”函数用于使用ONE_TIME_HIGH_RES_MODE_1从设备读取2个字节的数据。
  • 然后使用convertToNumber函数将这2个字节的数据转换为数字。数据表中定义了计算中的1.2值。

购买BH1750模块

的模组 is available from various 上line sellers :

分享。

15条留言

  1. 出色的教程,效果很好,我想知道您是否可以将其与BMP180压力传感器混为一谈以一起工作和记录。

    非常感谢

    德里克

  2. 帕勃罗·奎洛兹(Pablo Queiroz)

    你好,
    我已经在触摸LCD上使用了GPIO端口。如何更改用于使用传感器的GPIO端口?

    谢谢

    • 不幸的是你可以 ’t更改I2C引脚。但是,如果您的屏幕是I2C设备,则可以将多个I2C设备添加到同一引脚(如果它们具有不同的内部地址)。

      • 托斯滕·埃斯达尔

        嗨,很棒的教程,非常感谢。对我来说很好。我只是想知道,是否有人尝试将多个BH1750连接到单个Raspberry。这是否可能,例如使用两个,一个将ADDR连接到GND,另一个将ADDR连接到VCC,以便两个传感器具有不同的地址?甚至可以连接两个以上吗?
        谢谢回答我的问题。

  3. 感谢您的教程。

    我是否需要使用面包板进行连接?在这篇文章中,ADD和GND都连接到P1-06。当我直接将模块连接到pi时,我将ADD连接到P1-06,将GND连接到P1-14。当我跑步时“i2cdetect -y 1” it doesn’t show anything.

    我是新来的,因此感谢您的帮助

    • 那应该工作。这两个引脚都接地。仔细检查其他连接,确保您没有’t交换了SCL / SDA并确保您’已成功完成“配置I2C接口” step.

  4. 设法使它起作用。非常感谢您学习本教程。

    我总是得到0的读数。为什么会这样呢?我可以看到设备已连接。

  5. 加根吉特·雷恩(Gaganjeet Reen)

    当我运行文件时,出现以下错误:
    追溯(最近一次通话):
    文件“bh1750.py”, line 64, in
    主要()
    文件“bh1750.py”, line 60, in main
    打印“Light Level : ”+ str(readLight())+” lx”
    文件“bh1750.py”在readLight中,第54行
    数据= bus.read_i2c_block_data(addr,ONE_TIME_HIGH_RES_MODE_1)
    IOError:[Errno 121]远程I / O错误

  6. 你好
    非常感谢您或本教程,它在第一次尝试时就起作用了! ðŸ™,
    但是我想知道:为什么将读取值除以1.2?不能’在数据表上找不到理由…
    谢谢!

    • 传感器有一个“Measurement Accuracy”数据表中所述的数值在0.96-1.44之间变化,但典型值为1.2。他们希望您能够校准传感器时更新此值。所以在这个例子中’ve仅使用1.2的典型值来调整数据。

  7. 皮曼·史蒂夫

    这很完美,正是我想要的,谢谢。但是,有一个问题,当我将其放置一段时间(几小时)然后返回进行读取时,它返回零。如果我随后进行阅读,则会返回正确的读数(现在是’类似于45236.667)。一世’m wondering if it’没有从睡眠中醒来,或其他什么。如何检查POWER_ON / POWER_DOWN状态,然后如何告诉它执行或重置?

  8. 比尔·罗德里格斯(Bill Rodriguez)

    不管使用哪个Pi,我都会收到bus = smbus(1),‘module’对象不可调用。 i2cdetect在0x23处检测到传感器,并且Pis与其他设备一起工作。任何想法,将不胜感激。
    谢谢,
    法案

发表评论

该网站使用Akismet减少垃圾邮件。 了解如何处理您的评论数据.