Pi shall tweet unto Arduino

DSCF4545

More work to do, but big breakthroughs with FridgeGizmo today. I got the RaspberryPi pulling London weather and random worldwide tweets and trends and displaying them on my LCD display via an Arduino Uno.

I installed Apache 2, the Apache curl module and PHP on the Raspberry Pi using the excellent instructions here: http://fusionstrike.com/2012/installing-apache2-raspberry-pi-debian

I added the PHP Serial class to my Apache directory /var/www/ and used similar files I used on my OS X test version – changing the device name to ttyACM0, which is how an Arduino Uno appears on the Raspberry Pi running Raspbian.

I had to power the Arduino & LCD display shield with another power supply – the screen’s contrast was dim otherwise, suggesting it wasn’t getting enough current from the Raspberry Pi’s USB port alone.

When I ran my bash shell script to fire it off.. not much happened. It pulled the weather ok, then just hung with no error messages. It looked like it might be a similar problem I had in OS X, with serial connections over USB getting dropped. I found that typing

stty -F /dev/ttyACM0 -hupcl

at the RaspberryPi command line before running the script, made it work. Lots more tidying up and tweaking to do, but I have a self-contained RaspPi/Arduino combo that gets weather and tweets over wifi and displays them on an LCD screen. Yay!

UPDATE: having powered it all off and on, I’ve struggled to get this working again without typing screen /dev/ttyACM0 9600 and sending some characters to the Arduino before quitting Screen and running the script. More work needed… :)

UPDATE TO THE UPDATE!

Well, seems like stty -F /dev/ttyACM0 -hupcl was a red herring. According to this article, there are big problems with serial communication between the Raspberry Pi and Arduino. So how did I get it to work? I think the screen command (which I used in my Raspberry Pi/Arduino Morse code project) must do something to force open a connection. I tried getting my bash launching script to run screen but it would just hang and go no further until you manually quit the screen session. I then found you can run screen without starting a new console by using the command screen -d -m. So my bash script that launches the PHP code to pull tweets & weather down from the internet, now looks like this:

#!/bin/bash
screen -d -m /dev/ttyACM0 9600
php tweetwx.php

I know this is a horrible kludge, and I have no idea how or why it works, but it does seem to do the trick. As I recall screen doesn’t come included with Raspbian, I had to install it using sudo apt-get install screen at the Raspberry Pi terminal command line.

Now I just need to get my bash script to run automatically when the Pi boots up and it really will be self-contained, requiring no keyboard, TV or mouse.

This entry was posted in Arduino, computers, hardware, internet, Raspberry Pi, Raspbian and tagged , , , , , , . Bookmark the permalink.

Leave a Reply