无法使用 MicroPython 读取 ESP8266 中的 I2C 按钮
Can't read I2C buttons in ESP8266 with MicroPython
我有一个 Lolin D1 mini ESP8266 and a 0.66" oled screen 焊接在上面。我有一些 运行ning micropython (1.12) 示例使用屏幕显示一些文本,但我也想使用屏幕的 I2C 按钮。
根据文档,屏幕的默认 i2c 地址为 0x3C (60),按钮为 0x31 (49)。如果我连接到 REPL 并且 运行 这个:
from machine import Pin, I2C
i2c = I2C(scl=Pin(5), sda=Pin(4), freq=400000)
i2c.scan()
我按预期得到了 [49, 60]
。
现在我想读取按钮状态,所以看看Wemos' i2c-button-library,看来我必须按以下方式进行:
- 发送i2c命令GET_KEY_VALUE (0x04) (1 byte) 并得到1个ACK
- 读取i2c响应(值从0x00到0x04)(1字节)
我也是:
i2c.writeto(49, b'4') # returns 1, so I get 1 ACK, correct.
i2c.readfrom(49, 1) # returns \x02
但我得到的只是\x02
。即使我读取更多字节,我也会得到 \x02\xff\xff\xff\xff\xff\xff\xff\xff\xff
。当我按住按钮时,此响应不会改变。
我做错了什么?
问题已解决。我应该发送 b’\x04’
而不是 b’4’
。
我有一个 Lolin D1 mini ESP8266 and a 0.66" oled screen 焊接在上面。我有一些 运行ning micropython (1.12) 示例使用屏幕显示一些文本,但我也想使用屏幕的 I2C 按钮。
根据文档,屏幕的默认 i2c 地址为 0x3C (60),按钮为 0x31 (49)。如果我连接到 REPL 并且 运行 这个:
from machine import Pin, I2C
i2c = I2C(scl=Pin(5), sda=Pin(4), freq=400000)
i2c.scan()
我按预期得到了 [49, 60]
。
现在我想读取按钮状态,所以看看Wemos' i2c-button-library,看来我必须按以下方式进行:
- 发送i2c命令GET_KEY_VALUE (0x04) (1 byte) 并得到1个ACK
- 读取i2c响应(值从0x00到0x04)(1字节)
我也是:
i2c.writeto(49, b'4') # returns 1, so I get 1 ACK, correct.
i2c.readfrom(49, 1) # returns \x02
但我得到的只是\x02
。即使我读取更多字节,我也会得到 \x02\xff\xff\xff\xff\xff\xff\xff\xff\xff
。当我按住按钮时,此响应不会改变。
我做错了什么?
问题已解决。我应该发送 b’\x04’
而不是 b’4’
。