Raspberry Pi chats to Arduino


Well I got the Pi working, so what next? After a tiny amount of pondering I decided to get it chatting to an Arduino using the serial interface. I’ll try and note down everything relevant so this’ll be as much a guide to doing it as a recording of what I did!

Before proceeding If you have a Pi, you might ask why on earth I’d do this – surely the Raspberry Pi is so awesome, the Arduino is just wasting space? The answer is that while technically you probably could get it to do everything, that doesn’t mean you should. The Pi is a high level computer, with lots of stuff happening in the background (like an operating system!) and isn’t well suited to things like sending precisely timed intervals to a servo, or reading times in between pulses from sensors. Admittedly where there’s a will there’s a way, but I prefer the ways that require as little will as possible, so my robots down the line will generally feature 1 or more Pi’s as the ‘brains’, with Arduinos doing the grunt work!

Raspberry Pi chats to Arduino

Overview

So, onto the actual job. The basic bits that needed doing were:

  • Connect the raspberry pi serial pins to the arduino serial pins via a logic level converter. We need the converter as the raspberry pi pins work at 3.3V, but the the Arduino works at 5V. Without it, dead Pi!
  • Disable some default settings that the raspberry pi has so that we can gain read/write access to the serial port, then use the ‘minicom’ app to interact with it
  • Write a little program on the Arduino to read serial data from the PI and echo it to the PC, and visa-versa

I used these web sites to gain enough info to do it:

In addition to a raspberry pi and an Arduino Uno, I also had a few wires, some jumper cables and crucially this logic level converter: https://www.sparkfun.com/products/8745. (although being in the uk I got mine from coolcomponents.co.uk).

The Circuit

This is the circuit I built in photo form – very simple really. It’s ultimatley just connecting the raspberry pi serial Rx/Tx to 2 pins on the arduino, however to avoid circuit damage there’s a logic level converter in the middle.

I’ll upload a circuit diagram if I manage to get visio up and running again!
Note: In case you didn’t know, with basic communications stuff,  ‘Tx’ means ‘transmit’ and ‘Rx’ means ‘receive’. The idea is to connect the ‘Tx’ of one device into the ‘Rx’ of another and visa versa so they can chat!
The Pi on the right looks slightly more complex than it needs to as I didn’t have any single wire jumper cables. So while I’ve connected 9 actual pins to the breadboard, I’m really only using:
Raspberry Pi chats to Arduino Diagram
  • Pin 1: 3.3V, connects to LV (low voltage) on the level converter
  • Pin 6: 0V, connects to GND on level converter
  • Pin 8: UART Tx, connects to Tx1 on level converter
  • Pin 10: UART Rx, connects to Rx0 on level converter
The Arduino is very similar:
  • 5V goes to HV (high voltage) on the level converter
  • GND goes to GND on level converter
  • Pin 11 (using for software serial Tx) connects to Rx1 on level converter
  • Pin 10 (using for software serial Rx) connects to Tx0 on level converter

I highly recommend testing the circuit with a voltmeter as you go. I verified the raspberry pi 0V/3.3V signals with a multimeter, and as you can see here.

For more detail: Raspberry Pi chats to Arduino




© 2015 Powered By Engineering Projects Team, Raspberry Pi Projects

Scroll to top