Micropython:[Errno 19] ENODEV 但 i2c.scan() returns 正确地址
Micropython: [Errno 19] ENODEV but i2c.scan() returns proper address
我目前正在使用连接到 esp32 的 SRF-10 传感器。它由 5V 供电,我正在使用电平转换器将电压降至 3.3V,以便能够在 esp32 上使用它。 SCL 和 SDA 都具有数据表中推荐的 1.8K 上拉电阻。
我编写了以下脚本来尝试从传感器读取数据。我不完全确定它是否正确,但是当它到达第 16 行时,我收到一条错误消息,提示 [Errno 19] ENODEV。我能找到的一切都表明 i2c 连接工作不正常,但是当我 运行 i2c.scan()
它 returns 传感器地址时,我猜连接不是问题。
我的脚本如下:
from machine import I2C, Pin
import time
byte = bytearray(4)
#Distance units
unit_in = 0x50
unit_cm = 0x51
unit_us = 0x52
i2c = I2C(scl=Pin(21), sda=Pin(22))
address = i2c.scan()[0]
print(address)
#Sensor range
range_mm = 11008 // 43 - 1
i2c.writeto_mem(range_mm, address, bytearray(2)) #line 16
#Begin reading
i2c.writeto_mem(unit_cm, address, bytearray(0))
#Reading after measurement
data = i2c.readfrom_mem(4, address, 0)
print(data)
这是输出:
112
Traceback (most recent call last):
File "main.py", line 22, in <module>
OSError: [Errno 19] ENODEV
MicroPython v1.12 on 2019-12-20; ESP32 module with ESP32
Type "help()" for more information.
我可能做错了什么?
i2c.writeto_mem
的正确使用需要以下参数顺序:
writeto_mem(addr, memaddr, buf, *, addrsize=8)
因此,在第16行尝试使用:
i2c.writeto_mem(address, range_mm, bytearray(2)) #line 16
参考:class I2C
我目前正在使用连接到 esp32 的 SRF-10 传感器。它由 5V 供电,我正在使用电平转换器将电压降至 3.3V,以便能够在 esp32 上使用它。 SCL 和 SDA 都具有数据表中推荐的 1.8K 上拉电阻。
我编写了以下脚本来尝试从传感器读取数据。我不完全确定它是否正确,但是当它到达第 16 行时,我收到一条错误消息,提示 [Errno 19] ENODEV。我能找到的一切都表明 i2c 连接工作不正常,但是当我 运行 i2c.scan()
它 returns 传感器地址时,我猜连接不是问题。
我的脚本如下:
from machine import I2C, Pin
import time
byte = bytearray(4)
#Distance units
unit_in = 0x50
unit_cm = 0x51
unit_us = 0x52
i2c = I2C(scl=Pin(21), sda=Pin(22))
address = i2c.scan()[0]
print(address)
#Sensor range
range_mm = 11008 // 43 - 1
i2c.writeto_mem(range_mm, address, bytearray(2)) #line 16
#Begin reading
i2c.writeto_mem(unit_cm, address, bytearray(0))
#Reading after measurement
data = i2c.readfrom_mem(4, address, 0)
print(data)
这是输出:
112
Traceback (most recent call last):
File "main.py", line 22, in <module>
OSError: [Errno 19] ENODEV
MicroPython v1.12 on 2019-12-20; ESP32 module with ESP32
Type "help()" for more information.
我可能做错了什么?
i2c.writeto_mem
的正确使用需要以下参数顺序:
writeto_mem(addr, memaddr, buf, *, addrsize=8)
因此,在第16行尝试使用:
i2c.writeto_mem(address, range_mm, bytearray(2)) #line 16
参考:class I2C