使用ESP32 MicroPython I2C功能读取 BH1750光度传感器模块数据

Posted 卓晴

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用ESP32 MicroPython I2C功能读取 BH1750光度传感器模块数据相关的知识,希望对你有一定的参考价值。

简 介: 使用ESP32读取BH1750的光度传感器的数据。但是最终不知道甚么原因,所读取的数据都是0 ?
后面通过证明,说明在原来进行I2C写的时候出现了语法错误。

关键词 BH1750ESP32

 

§01 度传感器


  今天(2021-09-24 16:40:56)测试了 接近光电开关DF-11N 光强的基本特征。看到在之前的光度传感器BH1750模块。下面利用ESP32 MicroPython完成对其驱动,以备之后实验使用。

一、实验背景

1、光度传感器BH1750

  在 强度光照模块rimg02 BH1750光度传感器模块 使用了STC单片机测试了对于光度传感器 BH1750 的数据初步实验。在这次试验中,利用BH1750在普通环境下测量了光度大约为几百的数值。在 使用BH1750测量激光发射器的强度 测试了激光发射器的光斑的光强度。

  很可惜在上面几个实验中,并没有对于BH1750测量数据并没有得到进一步分析,比如噪声,数值标定等。

▲ 图1.1.1 转换速度

2、MicroPython I2C

龙邱MPU9250传感器 | 使用ESP32 模块进行测试 测试了 ESP32 MicroPython实验模块 测试了 MicroPython的软件I2C功能对于IMU 9250的数据读取功能。那么在本实验中利用ESP32对于BH1750的I2C访问,来访问光度数据。

二、实验方案

1、管脚配置

ESP32 I2C管脚配置:
SCL:GPIO15
SDA:GPIO2

▲ 图1.2.1 实验管脚配置

2、搭建实验平台

  下面是利用面包板搭建的实验电路。利用两个 4.7kΩ电阻对于SCL,SDA进行上拉到3.3V电压。

▲ 图1.2.2 利用面包板搭建的实验电路

 

§02 试BH1750


一、基本I2C总线操作

1、I2C扫描

(1) 实验代码

from machine                import Pin,SoftI2C,Timer
import time

i2c = SoftI2C(scl=Pin(15), sda=Pin(2), freq=100000)
scan = i2c.scan()
print(scan)

(2) 扫描结果

  程序运行输出结果:

[35]

(3) 结果分析

  根据BH1750的读取协议,可以看到它的的地址应该是 0x23,这与读出的数值35是相同的。

▲ 图2.1.1 BH1750读取协议

二、读取数据

1、读取H-Resolution数据

  根据前面给出的Continuously H-resolution读取协议,利用I2C读取相应的数据。

(1) 实验代码

from machine                import Pin,SoftI2C,Timer
import time
i2c = SoftI2C(scl=Pin(16), sda=Pin(17), freq=100000)
str = i2c.scan()
print('%x'%str[0])

BH1750_CMD_POWERDOWN        = 0x0
BH1750_CMD_POWERON          = 0x1
BH1750_CMD_RESET            = 0x7
BH1750_CMD_H_RESOLUTION     = 0x10
BH1750_CMD_H_RESOLUTION2    = 0x11
BH1750_CMD_L_RESOLUTION     = 0x13
BH1750_CMD_ONETIME_H        = 0x20
BH1750_CMD_ONETIME_H2       = 0x21
BH1750_CMD_ONETIME_L        = 0x23

BH1750_I2C_ADD  = 0x23

buf = bytearray(1)
buf[0] = BH1750_CMD_H_RESOLUTION

i2c.writeto(BH1750_I2C_ADD, buf)
time.sleep_ms(200)

while True:
    buf = i2c.readfrom(BH1750_I2C_ADD, 0x2)
    data = buf[0] * 256 + buf[1]
    print(data)
    time.sleep_ms(200)

(2) 读取数据波形

▲ 图2.2.1 SDA, SCL波形

(3) 读取数据

▲ 图2.2.2 读取的数据

 

试结果 ※


  知道为什么,最终使用ESP32 没有能够读取BH1750的数据。读出的数据都是0.

#!/usr/local/bin/python
# -*- coding: gbk -*-
#============================================================
# TEST1.PY                     -- by Dr. ZhuoQing 2021-09-25
#
# Note:
#============================================================
from machine                import Pin,SoftI2C,Timer
import time
i2c = SoftI2C(scl=Pin(16), sda=Pin(17), freq=100000)
str = i2c.scan()
print('%x'%str[0])
#------------------------------------------------------------
BH1750_CMD_POWERDOWN        = 0x0
BH1750_CMD_POWERON          = 0x1
BH1750_CMD_RESET            = 0x7
BH1750_CMD_H_RESOLUTION     = 0x10
BH1750_CMD_H_RESOLUTION2    = 0x11
BH1750_CMD_L_RESOLUTION     = 0x13
BH1750_CMD_ONETIME_H        = 0x20
BH1750_CMD_ONETIME_H2       = 0x21
BH1750_CMD_ONETIME_L        = 0x23
BH1750_I2C_ADD  = 0x23
#------------------------------------------------------------
buf = bytearray(1)
buf[0] = BH1750_CMD_H_RESOLUTION
i2c.writeto(BH1750_I2C_ADD, buf)
time.sleep_ms(200)
#------------------------------------------------------------
while True:
    buf = i2c.readfrom(BH1750_I2C_ADD, 0x2)
    data = buf[0] * 256 + buf[1]
    print(data)
    time.sleep_ms(200)
#------------------------------------------------------------
#        END OF FILE : test1.PY
#============================================================


■ 相关文献链接:

● 相关图表链接:

以上是关于使用ESP32 MicroPython I2C功能读取 BH1750光度传感器模块数据的主要内容,如果未能解决你的问题,请参考以下文章

MicroPython ESP32扫描I2C设备地址

MicroPython esp32读取DHT11温湿度传感器数据+ 0.96“I2C oled显示

MicroPython ESP32ssd1306驱动0.96“I2C屏幕显示

MicroPython ESP32ssd1306驱动0.96“I2C屏幕汉字显示示例

MicroPython ESP32ssd1306模块基于GB2312字库驱动0.96“I2C屏幕汉字显示示例

MicroPython ESP32ssd1306驱动0.96“I2C屏幕+mpu6050图形控制