我正在用raspberry pi3b+和si7021来获取温度和湿度。但是现在我遇到了一个问题,我不知道如何正确地使用wiringpi。
这是我的代码:
import sys
import time
import wiringpi
I2C_ADDR = 0x40
SI7021_REG_NO_HOLD_HUMIDITY = 0xF5
SI7021_REG_NO_HOLD_TEMPERATURE = 0xF3
wiringpi.wiringPiSetup()
fd = wiringpi.wiringPiI2CSetup(0x40)
#fd = wiringpi.wiringPiI2CSetupInterface("/dev/i2c-0", I2C_ADDR)
while True:
try:
print(wiringpi.wiringPiI2CWriteReg8(fd,0x40,0xF3))
time.sleep(0.3)
print(fd, wiringpi.wiringPiI2CReadReg8(fd, 0x40))
# print(wiringpi.wiringPiI2CRead(0x40))
time.sleep(0.5)
except KeyboardInterrupt:
sys.exit(0)
问题是在wiringpi.wiringPiI2CWriteReg8(fd,0x40,0xF3)
和wiringpi.wiringPiI2CReadReg8(fd, 0x40)
执行后我总是得到0或负值。根据他们的手册,这意味着一个错误。
我很确定我的连接是正确的,因为我可以使用i2cget
来获得正确的值。有人能告诉我代码中的错误吗?提前感谢。
1条答案
按热度按时间avwztpqn1#
datasheet中提到的从机地址已经在
wiringPiI2CSetup(0x40)
调用中传递到wiringpi库。您无需重复,它已作为fd
隐式传递。给定wiringpi documentation,您尝试将寄存器0x40设置为值0xF3。相反,您应该使用wiringPiI2CWrite
来发出命令。之后类似地使用wiringPiI2CRead
。