Sals Hacker Space

Sal's Hacker Space

Saturday, April 6, 2013

Google+ News-Feed LCD Display

If you search online for LCD RSS feed readers, youll notice that most of them target twitter. Wheres the love for Google+? Right here.

I wanted to make a display, which i could put on my desk, that would stream Google+ feeds. That way i could resist the urge to log onto Google+. 

You will require the following for this project:

1) 1x Arduino Uno
2) 1x LCD Display. Anything compatible with the Hitachi HD44780 driver will work. 
3) Some jumper wire. 
4) Basic knowledge of python and HTML
5) Google Plus Developer Key. 

To find out how to get your developer key go here: https://developers.google.com/+/api/oauth#apikey

NOTE: Depending on whether you have a perf-board or a bare Arduino shield such as the maker shield, you might or might not need a soldering iron and some hookup wire. 

How it all works:


We will be using Python and the Google Plus API to pull activities that people that we want to stalk....er follow post. The Python script will store all activites onto a file and then read it line by line and send it in chunks to the Arduino through serial communication. The Arduino would then display the information on the LCD screen. 

We could have sent directly without saving it to a file but during debugging i was getting some goofy characters on the console screen if i directly printed data to it. Oddly enough saving the information to a file and then reading from it fixed everything. 

We will send the information in chunks of 64 char because that is the limit of the Arduino's Serial RX Buffer. Sending information in a continuous stream could result in losing data. The Arduino could be saving the information in the buffer to a char array and at the same time the python script could be sending the rest of the data through serial. That would be bad.

That being said, lets start building.

Connecting the LCD Screen to the Arduino:


This process is fairly painless. I followed the following tutorial:
http://arduino.cc/en/Tutorial/LiquidCrystal
I suggest you do the same. Once your setup come back.


Accessing Google+ using Python



Pulling information from Google+ is relatively simple. At the time of writing these API calls are read only.


You will need to install the PySerial module to be able to transmit over Serial.

This can be found here: http://pyserial.sourceforge.net/

The httplib2 library to create your http object found here: https://code.google.com/p/httplib2/


The Google+ API python starter found here: https://code.google.com/p/google-api-python-client/


Here is the code:



The code is pretty self explanatory. Ive tried to comment it as best as i can. 
Heres a brief summary of whats happening:
An http object is created to pull information of interest from Google+. Make sure you use your developer API key. A dictionary holds information of the pages to be displayed on the LCD screen. You can enter your own pages here. A random number is generated to pick a random index in the dictionary and pull that index's contents and display name and save them to a file. The strip function strips all HTML elements from the content.

Once information has been stored to the file, it is opened and is read back line by line (You dont need to close and open it like i did). Every time a line is read it is broken up into chunks of 64 characters. This is because the RX buffer of the Arduino can only hold 64 characters at a time. If data was sent in a continuous stream then the buffer would overflow and some data would be lost.

If the data is very large it will be transferred a maximum of 6 times. This is because of the small LCD i am using.

Once a line has been transmitted, the script will wait for the Arduino to request another line by sending the 'n' character.

Once all information has been read, the file is closed before the script is terminated. This script can be scheduled to run at specific intervals. I have set it up to run every 30mins.

Reading from Serial with the Arduino


Now that we are sending data through the serial port, lets read it with the Arduino.


Here is the code, Ill explain how it works below




Upon power up the Arduino displays a welcome message and then waits for data from the serial port. If 10 seconds pass and no data has arrived it sends a request for the next line. Ill explain why it was done this way later on.

Once the Arduino receives a ready bit from the python script it gets ready to receive data from the python script. It receives data in chunks of 64 bits and tracks the time from when it first started receiving data. It waits for 10 seconds till all data has arrives and then displays it on the screen. If the data is longer than the screen width then it scrolls it across the screen. 


Once its done scrolling it requests for the next line from the python file. 

During testing i found that sometimes the python script would keep waiting for the request to transmit the next line. To prevent the script from waiting forever, the arduino sends another request if it has not received anything for more than 10 seconds. 

And thats pretty much it.


Lets see how it works!






Hope you guys enjoy!

No comments:

Post a Comment