如何解决除了文档以外,是否还有python-periphery库i2c代码示例或详细说明?
这是我在Stackoverflow中的第一个问题,如果我在编写此问题时犯了一个错误,请给我一个反馈以纠正自己。
我想为树莓派使用i2c通信。我想使用python-periphery(我知道那里有smbus)。在文档https://python-periphery.readthedocs.io/en/latest/i2c.html中,没有太多有关如何使用该库的信息。这是文档中的代码:
from periphery import I2C
# Open i2c-0 controller
i2c = I2C("/dev/i2c-0")
# Read byte at address 0x100 of EEPROM at 0x50
msgs = [I2C.Message([0x01,0x00]),I2C.Message([0x00],read=True)]
i2c.transfer(0x50,msgs)
print("0x100: 0x{:02x}".format(msgs[1].data[0]))
i2c.close()
我尝试用传感器进行写/读,并且成功。但是,在我的测试代码中,我使用了以下代码:
#Write to 0x09 register,this byte: 0x13
W9 = [I2C.Message([0x09,0x13])]
i2c.transfer(DFLT_ADDRESS,W9)
#Read from 0x09 register
R = [I2C.Message([0x09]),read=True)]
i2c.transfer(DFLT_ADDRESS,R)
print(R[1].data[0])
(我已经使用smbus来检查数据是否已写入寄存器并正确读取。因此,测试代码正在工作。)
我想知道的是该行中的0x100(我认为[0x01,0x00]这是0x100)在哪里:msgs = [I2C.Message([0x01,read=True)]
,当我尝试这样做时,它将0x00写入传感器中的寄存器。是因为我的传感器只有8位,但是我尝试写16位吗?那么,有人可以解释文档示例中发生的情况吗?
解决方法
也许你可以试试我在 raspberry pi zero 上使用的这个代码:
# coding=utf-8
# date : 25/05/2021
# dossier : piPeri
# fichier : pP_readByte01.py
# check the result with these commands :
# i2cset -y 1 0x51 0x10 0x01
# i2cget -y 1 0x51
# 3x times
from periphery import I2C
print(" Read 3 bytes starting at register address 0x1001 of EEPROM at I2C address 0x51 ")
# Open i2c-0 controller
i2c = I2C("/dev/i2c-1")
# create array to hold received data ( 3 bytes in my case )
dataRX = [0,0]
# create message to place 16 bits in memory register of eeprom
msgWritePointer = I2C.Message([0x10,0x01],read=False)
# create message to read data according to length of array 'dataRX'
msgRead = I2C.Message(dataRX,read=True)
# messages are assembled,order is important
msgs = [msgWritePointer,msgRead]
# call transfer function
i2c.transfer(0x51,msgs)
# print received bytes
for i in range(0,len(msgs[1].data)):
print(hex(msgs[1].data[i]))
i2c.close()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。