如何在Python3中通过USB-I2C模块从I2C设备BH1750获取数据? [英] How to get data from I2C device BH1750 over USB-I2C module in Python3?

查看:739
本文介绍了如何在Python3中通过USB-I2C模块从I2C设备BH1750获取数据?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是Linux用户,并且拥有以下设备:
USB-I2C转换器:
https://www.robot-electronics.co.uk/htm/usb_i2c_tech. htm
GY-30 I2C模块:
https://5.imimg.com/data5/TY/AK/MY-1833510/gy-30-bh1750-intensity-digital-light-sensor-module.pdf
GY-30与BH1750环境光传感器配合使用:
https://www.mylms.cz/wp- content/uploads/2017/07/bh1750-datasheet.pdf

I am Linux user and I have those devices:
USB-I2C convertor:
https://www.robot-electronics.co.uk/htm/usb_i2c_tech.htm
GY-30 I2C module:
https://5.imimg.com/data5/TY/AK/MY-1833510/gy-30-bh1750-intensity-digital-light-sensor-module.pdf
And GY-30 is with BH1750 Ambient light sensor:
https://www.mylms.cz/wp-content/uploads/2017/07/bh1750-datasheet.pdf

我需要通过Python3中的虚拟串行端口从BH1750读取Luxs,但是我不确定该怎么做. 我以这样的结尾:

I need to read Luxs from BH1750 over virtual serial port in Python3, but I am not sure how to do it. I ended with something like this:

import serial
ser = serial.Serial(port="/dev/ttyUSB0",
                    baudrate=19200,
                    parity=serial.PARITY_NONE,
                    stopbits=serial.STOPBITS_TWO,
                    bytesize=serial.EIGHTBITS,
                    timeout=0.500,
                    )

ser.flushInput()
ser.flushOutput()

ser.write(bytearray([0x55, 0x23, 0x11, 0x01]))
test = ser.read()

但是我不确定什么是正确的字节.我将GY-30直接连接到USB-I2C.

But I am not sure, what are the right bytes. I have the GY-30 connected directly to USB-I2C.

感谢您的最终帮助...

Thank for your eventual help ...

吉里

推荐答案

有最终解决方案:

import serial
import time

ser = serial.Serial(port="/dev/ttyUSB0",
                    baudrate=19200,
                    parity=serial.PARITY_NONE,
                    stopbits=serial.STOPBITS_TWO,
                    bytesize=serial.EIGHTBITS,
                    timeout=0.500,
                    )

ser.flushInput()
ser.flushOutput()

ADDR_BASE = 0x23 # nebo 0x5c pokud je ADDR pin HIGH
ADDR_READ = ADDR_BASE << 1 | 1
ADDR_WRITE = ADDR_BASE << 1

CMD_WRITE_1B = 0x53
CMD_READ_MULT = 0x54

LUX_RESOLUTION_1X = 0x10
LUX_RESOLUTION_4X = 0x13

# nastavení senzoru
ser.write(bytearray([CMD_WRITE_1B, ADDR_WRITE, LUX_RESOLUTION_1X]))

while True:
    time.sleep(1)

    # požádám převodník o 2 B
    ser.write(bytearray([CMD_READ_MULT, ADDR_READ, 0x02]))

    # přečtu je
    raw = ser.read(2)

    # interpretace bytů podle datasheetu
    lx = (raw[1] << 8 | raw[0]) / 1.2

    print("--> %.d lx" %(lx))

这篇关于如何在Python3中通过USB-I2C模块从I2C设备BH1750获取数据?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆