How to Connect and Interface a Raspberry Pi With an Arduino ?
If you building a project, you will definitely need an controller board to connect all electronic components and to code it. Arduino is most widely used board due to open source libraries and availability of low cost compatible sensors. It has all kind of pins including GPIO, PWM, Analog, SPI, I2C, RX-TX and easy C language for programming. But problem arises when we start advance level projects where long algorithm and fast processor is required. So, we start looking for alternative boards. Beaglebone Black try to overcome this, but still not very popular. Raspberry Pi is most popular alternative having speed and OS but lacks pins like Arduino.
- The Raspberry Pi 3 is a series of single Board Computer. The single-board consists of a fully functional computer with its dedicated memory, processor and it runs an operating system (runs on Linux). Whereas Arduino is a Microcontroller board and this board is not as powerful as Raspberry Pi 3 single-board computers, but a microcontroller board can be great for quick setups.
- The Raspberry Pi 3 is so faster than the Arduino, means Raspberry Pi 3 has 1.2 GHz whereas Arduino has only 16 MHz.This helps to process tasks like playing videos, surfing the web, listening to music, etc. very fast compared to Arduino.
- Arduino is a simple approach and more attractive for building a hobbyist projects. The Arduino has a convenient and user-friendly time interfacing with analog sensors, motor(PWM pins, interrupts pins), or other components, whereas Raspberry Pi 3 has a very complicated path to get sensor readings such as installing softwares, libraries, etc.
So, excellent solution is use Arduino and Raspberry Pi simultaneously, where Arduino will connected to all sensors and electronic components as low level controller and Pi as a high level controller for running long Python or C++ code. Is it sound good ??
Few platform has provided this facility. Let’s see them in short. You can search tutorial and their official homepage for detail information.
We will use PyFirmata firmware to give commands to Arduino using Raspberry Pi python script. PyFirmata is basically a prebuilt library package of python program which can be installed in Arduino to allow serial communication between a python script on any computer and an Arduino. This python package can give access to read and write any pin on the Arduino. So we run python program on Arduino using Raspberry pi.
2. ROS Serial
Here information is communicated with the help of the rosserial package. rosserial is a protocol to send data through a serial interface. In a client-server rosserial implementation, a rosserial-server is a computer running ROS and a rosserial-client is the microprocessor that receives sensors’ data and transports it to the server in the form of ROS messages. rosserial-server in this implementation is a publishing node while rosserial-client is a subscriber node, although this can sometimes be the other way round.
Rosserial-client package is available for several microprocessor types including Arduino, STM32, embeddedlinux and others. While rosserial-server package is available in Python or C++ versions.
3. ROS Arduino Bridge
ROS_arduino_bridge stack includes a ROS driver and base controller for Arduino-compatible microcontrollers. The driver provides access to analog and digital sensors, PWM servos, and odometry data from encoders. It is meant to be a complete solution for running an Arduino-controlled robot under ROS.
Tips:- 2nd and 3rd option is available only for ROS and ros_arduino_bridge is specially helpful for wheeled robot, it provide all in one package including PID, topics and nodes.