Я пытаюсь отправить данные через интерфейс I²C с Arduino Uno на Raspberry Pi с использованием I²C. Это был код, который я использовал.Как подключить Arduino Uno с помощью малины Pi с использованием I²C
В Arduino:
#include <Wire.h>
unsigned int watt;
unsigned int watt1;
byte watt2;
byte watt3;
void setup()
{
Wire.begin(30);
Wire.onRequest(requestEvent);
Serial.begin(9600);
}
void loop() {
delay(100);
int sensorValue = analogRead(A0);
int sensorValue1 = analogRead(A1);
watt = sensorValue * (5/1023) * 2857;
watt1 = sensorValue1 * (5/1023) * 2857;
watt2 = map(watt, 0, 4294967295, 0, 255);
watt3 = map(watt1, 0, 4294967295, 0, 255);
Serial.println(watt2);
Serial.println(watt3);
}
void requestEvent()
{
Wire.write(watt2);
delay(30);
Wire.write(watt3);
}
И в Raspberry Pi:
import smbus
import time
bus = smbus.SMBus(0)
address = 0x1e
while (1):
watt=bus.read_byte_data(address,1)
watt2=bus.read_byte_data(address,2)
я получил следующее сообщение об ошибке.
Traceback (most recent call last):
File "/home/pi/i2ctest.py" , line 8, in <module>
watt = bus.read_byte_data(address,1)
IOError: [Errno 5] Input/Output error
Как исправить это? Кроме того, есть ли альтернативы для использования I²C в малине Pi, кроме библиотеки SMBus?
Я запускаю ревизию 1, и я проверил ее с i2cdetect 0 -y и показал правильный адрес. Я нашел проблему с этим (это было то, что arduino ожидал сигнала от rpi, но он так и не появился. Я удалил эту строку), но теперь у меня другая проблема, вход i2c rpi постоянно 0, независимо от того, что я передайте от arduino – user17151
На Arduino, если вы умножаете свое значение на 5/1023, я считаю, что это всегда будет оценено в 0. Попробуйте 5.0/1023. –
@ user17151: используете ли вы резисторы подтягивания? I2C являются линиями «открытого стока» и не могут тянуть сигнал вверх, поэтому вам нужно подтягивать резисторы, чтобы добраться до + V. (См. Любой учебник I2C, если вы еще не используете его.) – tom10