How do I connect an Arduino Uno with Raspberry Pi using I²C


Question

I'm trying to send data through the I²C interface from the Arduino Uno to the Raspberry Pi using I²C. This was the code I used.

In 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);
}

And in the 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)

I received the following error.

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

How do I fix this? Also, are there any alternatives for using I²C in Raspberry Pi other than the SMBus library?

1
4
12/14/2012 7:56:43 PM

If you have a Raspberry Pi with a revision 2.0 board, you need to use I²C bus 1, not bus 0, so you will need to change the bus number used. In this case, the line

bus = smbus.SMBus(0) 

would become

bus = smbus.SMBus(1)

You can check that the device is present on the bus by using the i2cdetect program from the i2ctools package. Try

i2cdetect 0 -y 

to look for the Arduino on bus 0. Run

i2cdetect 1 -y 

to look for it on bus 1. Of course, the Arduino program must be running for this to work. This will also confirm that the Arduino is present at the expected address.

You'll also need to make sure that you have the appropriate rights to use I²C, so run your Python program from an account that is a member of the i2c group.

4
12/14/2012 8:00:08 PM

Licensed under: CC-BY-SA with attribution
Not affiliated with: Stack Overflow
Icon