如何在处理来自主设备的请求时从从 I2C 设备读取字节?

How do I read a byte from a Slave I2C Device while handling a request from the Master?

我有一个 Raspberry Pi 零 W 作为主机与作为从机的 Arduino Pro Mini 通信。我想让主人向奴隶发送命令。但是,当我尝试使用来自主机的 bus.write_byte_data 或 bus.write_byte 等命令时,从机似乎只收到值 255。代码如下:

硕士(在Python):

import time
import smbus

i2c_ch = 1
bus = smbus.SMBus(i2c_ch)

i2c_address = 20
bus.write_byte_data(i2c_address, 113,111)
val = bus.read_i2c_block_data(i2c_address,12)
bus.write_byte(i2c_address, 123)
print(val)

这是 Slave 的 requestEvent()(在 Arduino C 中):

void requestEvent()
{
  byte command = Wire.read();
  Serial.println(command);
  command = Wire.read();
  Serial.println(command);
  command = Wire.read();
  Serial.println(command);
...
}

Slave在Master命令下接收字节的方法是什么?

您可能正在尝试使用 Wire.onRequest 创建的处理程序,而不是 Wire.onReceive 创建的处理程序。 onReceive 处理程序将执行您想要的操作:

Wire.onReceive(receieveEvent);
Wire.onRequest(requestEvent);
...
void receieveEvent()
{
  Serial.println("received some data");
  while(0 < Wire.available()) // loop through all but the last
  {
    byte command = Wire.read();
    Serial.println(command);
  }
} 

PS: 哈哈,你和我同名!