python - 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() 的长度以及测量值是否变化很大。
解决方案
推荐阅读
- java - 无法激活 weblogic 12c 中的更改
- google-assistant-sdk - 将 Google 语音助手与现有的实时聊天机器人相关联
- python - 有没有办法打开命令提示符并使用 python 脚本执行一些命令?
- aws-lambda - SES 中的邮件节流以增加邮件发送时间
- json - 在控制器之外使用 ASP.NET Core 的 JSON 到模型转换?
- animation - 如何围绕自己的中心旋转 SVG 对象?
- sql - sql查询从重复项中查找缺失值
- winapi - 如何在 Win32 中设置 Emoji 弹出位置
- jquery - 删除功能完成后添加的类 jquery
- python - 无法再运行 pytest,因为 importlib-metadata entry_points() 因 configparser.DuplicateOptionError 而失败