如何在处理来自主设备的请求时从从 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: 哈哈,你和我同名!
我有一个 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: 哈哈,你和我同名!