so I am working on a project where I have to connect an arduino to the raspberry pi through serial and then transfer the input from the raspi to another I2C device. So, just to test things out and learn the basic principle I did som research and wrote two scripts, one for arduino and one for raspi(in python):

Arduino one:

#include <Wire.h>
#define SLAVE_ADDRESS 0x04
void sendData(){
  char data = Serial.read();
  if(data > 0) {
void setup() {
void loop() {


import serial, time
arduino = serial.Serial('/dev/ttyACM0', 115200, timeout=.1)
while True:
                data = arduino.readline()
                if data:
                        print data #strip out the new lines for now
                # (better to do .read() in the long run for this reason

So, I have tested the code with the reqular arduino serial monitor and it works, it transfers the data into the i2c device correctly. However, when I connnect it to the raspberry pi, it works the first time I tun the code and I can see the final output on the i2c device's screen. But then, when I run the code again, it just doesn't work. I don't even see the "a" that it is supposed to print after successful communication. Than, when I plug it back into my laptop, run the monitor again and then connect it into the raspberry pi again, it does the dame thing. Thanks in advance!

PS: I tried just unplugging and plugging the usb cable back into the raspi, It doesn't work.

1 Answer 1


The Arduino script only sends data when it receives data.

You only send data from the Pi once.

Also a Pi readline() will return when a newline character is received. I see no evidence that the Arduino is transmitting a newline character.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.