Running Raspberry Pi AND Arduino for the Best of Both Worlds

in #arduino7 years ago (edited)

Raspberry Pi and Arduino

I have been writing a lot more about Raspberry Pi than Arduino lately, but don't get the impression I am leaving the Arduino world behind. Both devices have their benefits, and in fact, I believe they work really well together.

Let's take a look at the easiest way to do that!

One of the Grove add-ons I bought recently was a very nice LCD display. Unfortunately, this display doesn't have a Raspberry Pi library yet.

Now, of course, I can look at the Arduino library and figure it out, it is just i2c, but this is a nice opportunity to demonstrate how you can offload hardware to Arduino and leave the Pi to do the brainy stuff.

First, we connect the Pi and the Arduino via USB. Ensure Serial is enabled in your Raspi-Config too.

Arduino Side

Arduino Side

On the Arduino we can do some very simple LCD code (Gist here):

#include
#include

I2C_LCD LCD;
extern GUI_Bitmap_t bmlogo; //Declare bitmap data package.
uint8_t I2C_LCD_ADDRESS = 0x51; //Device address configuration, the default value is 0x51.

String instring;

void setup(void)
{
Serial.begin(9600); // opens serial port, sets data rate to 9600 bps
Wire.begin(); //I2C controller initialization.
LCD.CleanAll(WHITE); //Clean the screen with black or white.

// bitmap dispaly mode.
LCD.WorkingModeConf(ON, ON, WM_BitmapMode);

// display logo
LCD.DrawScreenAreaAt(&bmlogo, 0, 8);

// character mode
LCD.WorkingModeConf(ON, ON, WM_CharMode);

// 8*16 font size, auto new line, black on white background
LCD.FontModeConf(Font_6x8, FM_ANL_AAA, BLACK_BAC);
}

void loop(void)
{

LCD.CharGotoXY(0,0);
LCD.print("Hello World:");

while(Serial.available()) {

instring = Serial.readString();// read the incoming data as string

Serial.println(instring);

//Set the start coordinate.
LCD.CharGotoXY(0,32);
LCD.print(instring);

}
}

That should be mostly straightforward to read, but look out for the parts where the Arduino is waiting for input over serial, and sends whatever it is given to the LCD.

Raspberry Pi Side

Over on the Pi, we first add the serial module with

pip install serial

and make a note of the serial port from your Arduino screen as that is what we will send data too (ensuring the Arduino IDE is closed).

arduino

If you get any permissions errors then check your groups as you might need to add your user to the dialout group with sudo usermod -a -G dialout pi (where pi is my username).

As a last resort, try

sudo chmod 777 /dev/ttyACM0
sudo chown pi:pi /dev/ttyACM0

The Python code is really simple (Gist here):

import serial
import time
from datetime import datetime

print("Starting ...")

tardis = serial.Serial('/dev/ttyACM0', baudrate=9600) 

while(1):
    tardis.write(str(datetime.now()).encode())
    time.sleep(10)



Posted from my blog with SteemPress : https://makerhacks.com/raspberry-pi-arduino/

Sort:  

Interesting little hack.

Yeah, the Arduino works well with small SBC's like the R-Pi. A common example would be remote printing with a 3D printer.

I don't think I've seen someone use an Arduino as an LCD controller before though.

Well there are a bunch of Pi hats that have Atmel chips on them ;)

MakerHacks, inventor of the guide to Making your own harem of electronics coexist peacefully ;)

I wish I had more time on my hands to tinker with stuff....
Guess I'll just have to see where I can scratch some time together if I want to play around with code a bit more XD

Yeah familiar - too many ideas not enough time :)

Coin Marketplace

STEEM 0.17
TRX 0.15
JST 0.029
BTC 62228.71
ETH 2419.51
USDT 1.00
SBD 2.57