首页 > 解决方案 > I2C 总线 Raspi Master Arduino Mega Slave 上的远程 I/O 错误

问题描述

我已将我的 raspi(主)与 Arduino Mega(从)连接,并希望将模拟读数从模拟引脚 A0-A3 连续传输到 raspi。程序运行了一段时间,崩溃给了我:[Errno 121] Remote I/O Error

我怀疑有两件事可能是问题所在:1)while 循环 => 更长的睡眠时间会导致运行时间更长,直到程序崩溃 2)我在某处读到,wire 库在执行 onRequest 之前执行了 onReceive 命令?

这是我的 Arduino 和 raspi 代码:

Arduino 超级代码#include

int SLAVE_ADDRESS = 0x08;
int analogPin1 = A0;
int analogPin2 = A1;
int analogPin3 = A2;
int analogPin4 = A3;


void setup(){
Wire.begin(SLAVE_ADDRESS);
Wire.onRequest(sendAnalogReading);
}

void loop(){
}

void sendAnalogReading(){

uint16_t reading1 = analogRead(analogPin1);
uint16_t reading2 = analogRead(analogPin2);
uint16_t reading3 = analogRead(analogPin3);
uint16_t reading4 = analogRead(analogPin4);


Wire.write((char *) &reading1, 2);
Wire.write((char *) &reading2, 2);
Wire.write((char *) &reading3, 2);
Wire.write((char *) &reading4, 2);

}

这是我的 Raspi 上的脚本:import smbus import time

bus = smbus.SMBus(1)

SLAVE_ADDRESS = 0x08

def requestreading():
block = bus.read_i2c_block_data((SLAVE_ADDRESS), 0, 8)

print(block)


while True:
#var = input("Press any key for reading: ")
requestreading()
    time.sleep(0.1)

可能应该连续运行但是我觉得实际运行时间直到它崩溃取决于两个因素。我的 while 循环中 time.sleep() 的长度以及测量值是否变化很大。

标签: pythonloopserror-handlingraspberry-pi3i2c

解决方案


推荐阅读