使用ESP32 MicroPython I2C功能读取 BH1750光度传感器模块数据
Posted 卓晴
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用ESP32 MicroPython I2C功能读取 BH1750光度传感器模块数据相关的知识,希望对你有一定的参考价值。
简 介: 使用ESP32读取BH1750的光度传感器的数据。但是最终不知道甚么原因,所读取的数据都是0 ?
后面通过证明,说明在原来进行I2C写的时候出现了语法错误。
关键词
: BH1750,ESP32
§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
#============================================================
■ 相关文献链接:
- 接近开关的初步测试 : DF-11N
- 强度光照模块rimg02 BH1750光度传感器模块
- BH1750
- 使用BH1750测量激光发射器的强度
- 龙邱MPU9250传感器 | 使用ESP32 模块进行测试
- ESP32-S模块转接板设计与实现
● 相关图表链接:
以上是关于使用ESP32 MicroPython I2C功能读取 BH1750光度传感器模块数据的主要内容,如果未能解决你的问题,请参考以下文章
MicroPython esp32读取DHT11温湿度传感器数据+ 0.96“I2C oled显示
MicroPython ESP32ssd1306驱动0.96“I2C屏幕显示
MicroPython ESP32ssd1306驱动0.96“I2C屏幕汉字显示示例