Introduction: Twitter Mention Mood Light
This is a simple intro in how to control your Arduino from Twitter. If you are new to Arduino Twitter / Arduino Processing Twitter / Arduino Python Twitter / Twitter Mood Light, then please refer to simpleTweet_00_processing and simpleTweet_01_python (and How to install Python packages on Windows 7 ) for a crash course.
Step 1: Concept: Arduino {Processing / Python} Twitter
The Arduino Twitter mood light has been around for a few years. I made one in early 2010 and recently decided to update it for Twitter OAuth protocol (step 5.) This instructable has both the [ Arduino Processing Twitter ] and [ Arduino Python Twitter ] versions.
The general idea: You've got a LED generating a peaceful glow, cycling through a bunch of colors, and meanwhile you've got Processing or Python listening to Twitter for any mention of @yourUsername. When it finds a Twitter status with @yourUsername it writes to Arduino over Serial and Arduino changes the LED from peaceful glow to alert.
The circuit board (step 6) has two buttons: Reset and Send. The reset button changes the LED from "alert" back to "peaceful glow." The send button sends a Twitter status update to your Processing or Python layer, and from there on up to Twitter. When pressing the SEND button, hold it down until you see the flash of WHITE LIGHT (approx 1 second.) This confirms the button push has been read by Arduino.
There is some confusion about Twitter Rate Limits . The Rate Limit is the number of times Twitter will let you hit it's servers per hour, currently 350 hits per hour. Go over that number and Twitter will block you. I made the same provision for this in both Processing and Python: wait 15 seconds between hits. In Processing, in void draw() , see delay(15000); . In the Python, in the while clause, see time.sleep(15). This does not affect the timing of any button pushing or Serial calls.
The Arduino code is the same for both Processing and Python except when Arduino listens to Serial. Both Processing and Python pass an integer value of 1 (arduino.write(1) ) but Arduino receives a different value (numeric / ascii) from each, which is why you'll see these two lines in the Arduino code:
if (serialMsg == 1) state = "mention"; // processing
if (serialMsg == 49) state = "mention"; // python
This is because I'm not sure how to pass a string value of "mention " over Serial in Python. It's not critical, so I'll leave working as above, but if anyone has a solution for sending a string (arduino.write("mention") ), particularly in Python, please post in the comments below.
The center of this project is the getMentions() function. It's interesting to compare how they look in Processing and in Python.
// Processing (java)
// search for any mention of @yourUsername
void getMention() {
List mentions = null;
try {
mentions = twitter.getMentions();
}
catch(TwitterException e) {
println("Exception: " + e + "; statusCode: " + e.getStatusCode());
}
Status status = (Status)mentions.get(0);
String newID = str(status.getId());
if (oldID.equals(newID) == false){
oldID = newID;
println(status.getText()+", by @"+status.getUser().getScreenName());
arduino.write(1); // arduino gets 1
}
}
# Python
# search for any mention of @yourUsername
def getMention():
status = api.GetReplies()
newID = str(status[0].id)
global oldID
if (newID != oldID):
oldID = newID
print status[0].text+", by @"+status[0].user.screen_name
arduino.write(1) # arduino gets 49
In both cases the id value received is in "long" format. By converting from "long" to "string" with str() we're able to compare the value and act on it. I had trouble doing that in long format.
Step 2: Arduino
// twitterMentionMoodLight_arduino
// for use as is with either:
// twitterMentionMoodLight_processing
// twitterMentionMoodLight_python
//
// Generate a peaceful glow until someone on twitter mentions you.
//
// Requires a circuit with: two buttons and a pwm rgb led light, and
// 3 resistors at 220 ohm; 2 resistors at 100 ohm; 2 resistors at 10k ohm.
//
// Shout out to Tom Igoe, Adafruit, lurkers and msg boards everywhere.
// learn more at: https://www.instructables.com/member/pdxnat/
/*
#####################################################################
--------------- TWO BUTTONS AND A LIGHT ----------------------------
Button One: Hold until WHITE LIGHT; Sends a message to Twitter.
The Light: Glow peacefully until commanded by Twitter to change.
Button Two: Resets LED to peacefulGlow.
peacefulGlow() - the default state of the mood light
mention() - someone has mentioned @yourUsername
buttonSend() - update Twitter status
buttonReset() - return to peacefulGlow()
--------------------------------------------------------------------
#####################################################################
*/
const int rButton = 10; // reset button
int reset_btn_val = 0;
const int sButton = 11; // send button
int send_btn_val = 0;
String state = "peacefulGlow";
int ledAnalogOne[] = {3, 5, 6}; // PWM RGB LED pins
// Analog LED 3 = redPin, 5 = greenPin, 6 = bluePin
// Defined Colors
const byte BLACK[] = {0, 0, 0};
const byte WHITE[] = {255, 255, 255};
const byte RED[] = {255, 0, 0};
const byte GREEN[] = {0, 255, 0};
const byte BLUE[] = {0, 0, 255};
const byte ORANGE[] = {83, 4, 0};
const byte YELLOW[] = {255, 255, 0};
const byte MAGENTA[] = {255, 0, 255};
void setup(){ // begin
Serial.begin(9600);
pinMode(rButton, INPUT);
pinMode(sButton, INPUT);
for(int i = 0; i < 3; i++){ // set the 3 LED pins as outputs
pinMode(ledAnalogOne[i], OUTPUT);
}
}
void loop(){
listenToSerial();
buttonSend();
buttonReset();
setState(state);
}
void setState(String s){
if (s == "peacefulGlow") peacefulGlow();
if (s == "mention") mention();
}
void listenToSerial(){ // Twitter commands enter here
int serialMsg = 0;
if (Serial.available()){
serialMsg = Serial.read();
if (serialMsg == 1) state = "mention"; // processing
if (serialMsg == 49) state = "mention"; // python
}
}
void buttonSend(){ // Twitter posts sent here
send_btn_val = digitalRead(sButton);
if (send_btn_val == HIGH){
Serial.print("#peacefulGlow");
delay(200);
sent();
}
}
void buttonReset(){
reset_btn_val = digitalRead(rButton);
if (reset_btn_val == HIGH){
state = "peacefulGlow";
}
}
void peacefulGlow(){
state = "peacefulGlow";
if (state == "peacefulGlow") {
fadeToColor(ledAnalogOne, RED, BLUE, 6);
} else {
setState(state);
}
listenToSerial();
buttonSend();
if (state == "peacefulGlow") {
fadeToColor(ledAnalogOne, BLUE, GREEN, 6);
} else {
setState(state);
}
listenToSerial();
buttonSend();
if (state == "peacefulGlow") {
fadeToColor(ledAnalogOne, GREEN, YELLOW, 6);
} else {
setState(state);
}
listenToSerial();
buttonSend();
if (state == "peacefulGlow") {
fadeToColor(ledAnalogOne, YELLOW, ORANGE, 6);
} else {
setState(state);
}
listenToSerial();
buttonSend();
if (state == "peacefulGlow") {
fadeToColor(ledAnalogOne, ORANGE, RED, 6);
} else {
setState(state);
}
listenToSerial();
buttonSend();
}
void mention(){
state = "mention";
if (state == "mention"){
fadeToColor(ledAnalogOne, RED, BLACK, 1);
} else {
setState(state);
}
listenToSerial();
buttonSend();
buttonReset();
if (state == "mention"){
fadeToColor(ledAnalogOne, BLACK, RED, 0);
} else {
setState(state);
}
listenToSerial();
buttonSend();
buttonReset();
}
void sent(){
setColor(ledAnalogOne, WHITE);
delay(500);
}
// *************************************************************
// ***** COLOR FUNCTIONS - DO NOT TOUCH ***********
void setColor(int* led, byte* color){
for(int i = 0; i < 3; i++){
analogWrite(led[i], 255 - color[i]);
}
}
void setColor(int* led, const byte* color){
byte tempByte[] = {
color[0], color[1], color[2]};
setColor(led, tempByte);
}
void fadeToColor(int* led, byte* startColor, byte* endColor, int fadeSpeed){
int changeRed = endColor[0] - startColor[0];
int changeGreen = endColor[1] - startColor[1];
int changeBlue = endColor[2] - startColor[2];
int steps = max(abs(changeRed),max(abs(changeGreen), abs(changeBlue)));
for(int i = 0 ; i < steps; i++){
byte newRed = startColor[0] + (i * changeRed / steps);
byte newGreen = startColor[1] + (i * changeGreen / steps);
byte newBlue = startColor[2] + (i * changeBlue / steps);
byte newColor[] = {newRed, newGreen, newBlue};
setColor(led, newColor);
delay(fadeSpeed);
}
setColor(led, endColor);
}
void fadeToColor(int* led, const byte* startColor, const byte* endColor, int fadeSpeed){
byte tempByte1[] = {startColor[0], startColor[1], startColor[2]};
byte tempByte2[] = {endColor[0], endColor[1], endColor[2]};
fadeToColor(led, tempByte1, tempByte2, fadeSpeed);
}
Attachments
Step 3: Processing
Install twitter4j (Processing)
You'll need to install the twitter4j library so it can be used by Processing.
Get it here: http://twitter4j.org/en/index.html#download
Install it here (or equivalent): C:\Program Files\processing-1.5.1\modes\java\libraries
You're done.
Access it here: Processing > Sketch > Import Library... > twitter4j
And when you do, it'll add this to the top of your code:
import twitter4j.conf.*;
import twitter4j.internal.async.*;
import twitter4j.internal.org.json.*;
import twitter4j.internal.logging.*;
import twitter4j.http.*;
import twitter4j.api.*;
import twitter4j.util.*;
import twitter4j.internal.http.*;
import twitter4j.*;
Incidentally, you'll also add Serial I/O from the Sketch > Library, but that's not important right now.
So why do you need twitter4j? The short answer is that it provides you with simple functionality so you don't have to write a whole bunch of crazy code every time you want to access Twitter. We use twitter4j because it's awesome and it makes our job easier.
// ################################################################
// ################################################################
// twitterMentionMoodLight_processing
// for use w/ twitterMentionMoodLight_arduino
//
// Communicate w/ arduino over Serial
// Communicate w/ twitter via twitter4j library
// Shout out to Adafruit, twitter4j, lurkers and msg boards everywhere.
// learn more at https://www.instructables.com/member/pdxnat/
// http://twitter4j.org/en/javadoc/twitter4j/Twitter.html
import processing.serial.*;
import twitter4j.conf.*;
import twitter4j.internal.async.*;
import twitter4j.internal.org.json.*;
import twitter4j.internal.logging.*;
import twitter4j.http.*;
import twitter4j.api.*;
import twitter4j.util.*;
import twitter4j.internal.http.*;
import twitter4j.*;
static String OAuthConsumerKey = "YOUR CONSUMER KEY";
static String OAuthConsumerSecret = "YOUR CONSUMER SECRET";
static String AccessToken = "YOUR ACCESS TOKEN";
static String AccessTokenSecret = "YOUR ACCESS TOKEN SECRET";
Serial arduino;
Twitter twitter = new TwitterFactory().getInstance();
String oldID = "";
void setup() {
size(125, 125);
frameRate(10);
background(0);
println(Serial.list());
String arduinoPort = Serial.list()[0];
arduino = new Serial(this, arduinoPort, 9600);
loginTwitter();
}
void loginTwitter() {
twitter.setOAuthConsumer(OAuthConsumerKey, OAuthConsumerSecret);
AccessToken accessToken = loadAccessToken();
twitter.setOAuthAccessToken(accessToken);
}
private static AccessToken loadAccessToken() {
return new AccessToken(AccessToken, AccessTokenSecret);
}
void draw() {
background(0);
text("@msg_box", 35, 65);
listenToArduino();
getMention();
delay(15000); // wait 15 seconds to avoid Twitter Rate Limit
}
void listenToArduino() {
String msgOut = "";
String arduinoMsg = "";
if (arduino.available() >= 1) {
arduinoMsg = arduino.readString();
msgOut = arduinoMsg+" at "+hour()+":"+minute()+":"+second()+" "+year()+month()+day();
updateStatus(msgOut);
}
}
void getMention() {
List mentions = null;
try {
mentions = twitter.getMentions();
}
catch(TwitterException e) {
println("Exception: " + e + "; statusCode: " + e.getStatusCode());
}
Status status = (Status)mentions.get(0);
String newID = str(status.getId());
if (oldID.equals(newID) == false){
oldID = newID;
println(status.getText()+", by @"+status.getUser().getScreenName());
arduino.write(1); // arduino gets 1
}
}
void updateStatus(String s) {
try {
Status status = twitter.updateStatus(s);
println("new tweet --:{ " + status.getText() + " }:--");
}
catch(TwitterException e) {
println("Status Error: " + e + "; statusCode: " + e.getStatusCode());
}
}
Step 4: Python
If you don't know How to install Python Packages on Windows 7 then you *really * need to follow that link. It's my instructable. It's a set of directions, not explanations. You'll need to do that before you can use this code here.
You've got Python installed (w/ help from the link above) and now you need to get your packages in order.
Python - get the Python 2.7.2 Windows Installer from http://www.python.org/download/
pySerial - http://pyserial.sourceforge.net/
simplejson - http://pypi.python.org/pypi/simplejson
httplib2 - http://code.google.com/p/httplib2/
python-oauth2 - https://github.com/simplegeo/python-oauth2
python-twitter - http://code.google.com/p/python-twitter/
Refer to my How to install Python Packages on Windows 7 instructable if you need help installing these.
To run a python script, open it in IDLE and hit "Run > Run Module".
To learn about YOUR TWITTER KEY, goto the next step.
#######################################################################
#######################################################################
# twitterMentionMoodLight_python.py
# for use with twitterMentionMoodLight_arduino
# visit my instructables for more information
# https://www.instructables.com/member/pdxnat/
# http://python-twitter.googlecode.com/hg/doc/twitter.html
# http://dev.twitter.com/pages/rate_limiting_faq
print '<twitterMentionMoodLight>'
# import libraries
import twitter
import serial
import time
# connect to arduino via serial port
arduino = serial.Serial('COM4', 9600, timeout=1)
# establish OAuth id with twitter
api = twitter.Api(consumer_key='YOUR_CONSUMER_KEY',
consumer_secret='YOUR_CONSUMER_SECRET',
access_token_key='YOUR_ACCESS_TOKEN_KEY',
access_token_secret='YOUR_ACCESS_TOKEN_SECRET')
oldID = "" # used in getMention()
# listen to arduino
def listenToArduino():
msg=arduino.readline()
if msg > '':
print 'arduino msg: '+msg.strip()
updateStatus(msg.strip())
# search for any mention of @yourUsername
def getMention():
status = api.GetReplies()
newID = str(status[0].id)
global oldID
if (newID != oldID):
oldID = newID
print status[0].text+", by @"+status[0].user.screen_name
arduino.write(1) # arduino gets 49
# post new message to twitter
def updateStatus(newMsg):
localtime = time.asctime(time.localtime(time.time()))
tweet = api.PostUpdate(newMsg+", "+localtime)
print "tweeted: "+tweet.text
while 1:
listenToArduino()
getMention()
time.sleep(15) # avoid twitter rate limit
Attachments
Step 5: Twitter
* Create a Twitter account twitter.com
* Register an application with Twitter https://dev.twitter.com/apps/new
Create a Twitter account
You've probably already got one (or twelve) but for the absolute noob, take heart. It's easy.
Goto twitter.com and set up an account. Make it a public account, that way if you ever want your friends to look at it they don't have to go through a whole bunch of hooey to get there. And don't post personal stuff like "Out of town, leaving diamonds on back porch."
You'll see people using the "@" and "#" symbols a lot. Put @ before a username and # before a concept. For example, if you post the following tweet "I enjoyed the @msg_box simpleTweet_00 on @instructables #goodtimes" then that tweet will get sent to my feed (and to instructables's feed too) and it'll get added to a cache of all posts that have ever used the phrase "#goodtimes." There's more, but it's not within the scope of this lesson. Play with it. You'll figure it out.
Register an application with Twitter
What does that even mean? Relax. Think of it this way: you're creating a set of special high-tech usernames and passwords so the stuff you make can access Twitter. It's like Twitter is this big castle with a front door for all the human guests and a back door for all the automated service personnel. These high-tech usernames and passwords are called OAuth. OAuth lets your device access Twitter through the service entrance.
Having already created my Twitter account @msg_box I then went here https://dev.twitter.com/apps/new to get my OAuth password info. Review the three attached images of the forms .
First Page: Make sure you check "Client " and not "Browser", and that you allow "Read & Write ."
Second Page: Here's where you find your CONSUMER KEY and your CONSUMER SECRET
Third Page: Here's where you find your ACCESS TOKEN and your ACCESS TOKEN SECRET
You will need this information when your program logs into Twitter (via the service entrance.) In the Python script simpleTweet_01_python you will enter this information in here:
api = twitter.Api(consumer_key='YOUR_CONSUMER_KEY',
consumer_secret='YOUR_CONSUMER_SECRET',
access_token_key='YOUR_ACCESS_TOKEN_KEY',
access_token_secret='YOUR_ACCESS_TOKEN_SECRET')
That's it. Not hard at all.
Step 6: Circuit Board
This is a great board for all-purpose prototyping. Two buttons and a PWM RGB LED. For this configuration, the LED must be PWM to work.
Step 7: In Conclusion...
This Twitter Mention Mood Light is not particularly unique. You'll find other examples across the internets. But what makes this special is that it's up to date with Twitter OAuth and you've got code comparisons in Processing and Python.
If you are new to Arduino Twitter / Arduino Processing Twitter / Arduino Python Twitter / Twitter Mood Light, then please refer to simpleTweet_00_processing and simpleTweet_01_python (and How to install Python packages on Windows 7 ) for a crash course.

Participated in the
Adafruit Make It Tweet Challenge
28 Comments
2 years ago
Does this is till work 10 years later? I wanted to try
7 years ago
Magnificent
8 years ago on Step 4
thanks for your great work man, but i tried your code and it only prints out the tweets that I make. If a friend mentions me in their tweet I don't see a thing.
9 years ago on Introduction
Any guidance with the GET request delay?
Per Twitter's Dev site:
Rate limits in version 1.1 of the API are divided into 15 minute intervals, which is a change from the 60 minute blocks in version 1.0. Additionally, all 1.1 endpoints require authentication, so no longer will there be a concept of unauthenticated calls and rate limits.
While in version one of the API, an OAuth-enabled application could initiate 350 GET-based requests per hour per access token, API v1.1's rate limiting model allows for a wider ranger of requests through per-method request limits. There are two initial buckets available for GET requests: 15 calls every 15 minutes, and 180 calls every 15 minutes. Those primary buckets are outlined in detail here.
I keep going over the rate limit :(
10 years ago on Introduction
I would really like to get this project to work, but up until now I haven't had any luck.
At first I tried downloading the library and putting it in the Processing sketchbook. After some trial and error I found out I had to put it in My Documents/Processing/Libraries/Twitter4j/Library.
When I tried to start the Processing sketch, I got the message: "the package "twitter4j" does not exist.
I tried putting the .jar files that were in the "lib" folder in the "Library" folder, but that generated the same message.
I then tried to download the "twitter4j.jar" file that can be found in the instructible (downloaded the file and renamed it to twitter4j.jar)
After I put that in the "Library" file and tried to run the sketch, a small window opened and I got the message: "NullPointerExeption". In the code "Status status = (status)mentions.get(0) was highlited.
I have some experience programming arduino's, but little to no experience with Processing. Could someone please point me in the right direction?
Reply 10 years ago on Introduction
Download the twitter4j.jar and just drag the file onto the processing sketch window.
10 years ago on Introduction
Traceback (most recent call last):
File "/Users/mcasanas/Desktop/FG1LI7VGOW49P6U.py", line 51, in
getMention()
File "/Users/mcasanas/Desktop/FG1LI7VGOW49P6U.py", line 35, in getMention
status = api.GetReplies()
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/twitter.py", line 2885, in GetReplies
return [Status.NewFromJsonDict(x) for x in data]
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/twitter.py", line 620, in NewFromJsonDict
return Status(created_at=data.get('created_at', None),
AttributeError: 'unicode' object has no attribute 'get'
Im getting this comment. please help :(
11 years ago on Introduction
Wonder if you could help me out. I got your code working nicely. So i thank you for making this tutorial as i didnt know where to start with the twitter api. Unfortunaly the API its still rather confusing for me so i can't really debug this myself. RIght when i start the "server" i guess you might call it. It pulls a tweet and sets off my arduino, i reset my arduino and its all fine. Randomly later it'll go off for a REALLY old mention. Reset again. Then it will pull the first tweet. This will keep happening at random intervals. Have you had this issue? Or know of an easy fix? I think i might attempt to use the ID of the tweet and make sure that the new mention has a > id.
11 years ago on Introduction
Dear all,
When trying out the python script I get the following error:
Traceback (most recent call last):
File "C:\Users\RMB\Downloads\FG1LI7VGOW49P6U(1).py", line 51, in
getMention()
File "C:\Users\RMB\Downloads\FG1LI7VGOW49P6U(1).py", line 36, in getMention
newID = str(status[0].id)
IndexError: list index out of range
Could use some help. Thanks!
Cheers
RJ
11 years ago on Introduction
Hello.
Great tutorial, finally got it working for both Arduino+python and arduino+processing :) I moved the rgb LED from 5v to GND and it just started working?
Only problems now is that I can't seem to find were to change your tweet from (default for mines is #peaceful glow)
And also some of the LED descriptive colors on arduino code aren't actually changing to that color.
E.g ; for alert my arduino should flash red, black (off) but insted flashes light blue, white?
Can you help me please
Reply 11 years ago on Introduction
Howdy. Good job getting this far! As for the default message, look in the Arduino code (Step 2) at "void buttonSend()", particularly at the Serial.print() command....
void buttonSend(){ // Twitter posts sent here
send_btn_val = digitalRead(sButton);
if (send_btn_val == HIGH){
Serial.print("#peacefulGlow");
delay(200);
sent();
}
}
As for the LED colors, I don't have a good answer but make sure the physical pins are the same as the pins listed in the code....
int ledAnalogOne[] = {3, 5, 6}; // PWM RGB LED pins
// Analog LED 3 = redPin, 5 = greenPin, 6 = bluePin
If your LED is configured differently, then just keep messing with the connection points on the LED, on the board, and in the code.
Good Luck!
11 years ago on Introduction
This tutorial looks fantastic. Any chance you'd be able to provide a list of the necessary parts? I'm new to this, and I wasn't sure I had all the parts by just looking at the photo. Thanks and great job!
Reply 11 years ago on Introduction
LED -
PWM RGB LED. This LED has 4 pins. Pin 1 Green; Pin 2 Power; Pin 3 Blue; Pin 4 Red. There is no pin to ground.
Resistors -
3x 220ohm
2x 100ohm
2x 10kohm
Buttons -
2x the little guys https://www.adafruit.com/products/367
You can use an Arduino with a breadboard or you can solder a circuit board from scratch using 16 or 18 gauge wire, I don't remember which. The single LED can be replaced with multiple LEDs but that'd require some redesign on your behalf and modification to the code, which you *should* be able to do after going through it once.
11 years ago on Introduction
Does Twitter4j work on Mac?
Reply 11 years ago on Introduction
Yes it does.
11 years ago on Introduction
Thanks a lot man. I'll do research into the analog v digital, is there anything I should know about them. Things I might miss on the internet.
I also have a RGB Piranha Super Flux Super Flux LED - Common Anode, will this work for the LED.
Thanks a lot for the help, Appreciate it.
Thanks
Reply 11 years ago on Introduction
Have a look at the diagram here:
https://www.instructables.com/id/Twitter-Mention-Mood-Light/step6/Circuit-Board/
At the bottom of the diagram you'll see "Digital Pins -->" and the LED plugs in to pins 3, 5, 6, while the buttons plug into pins 10, 11. I think you should try sticking to the digital pins for this project. I don't remember but I think the LED won't work properly on the analog pins, or something,
I don't know about the Piranha LED you mention, but you should test it out. I had to test every configuration before I understood what to do with the specific LED I used.
The breadboards are great for testing testing testing, don't be shy, prototype it until you understand it, that's really the best way to learn. You know, besides asking questions.
Good Luck!!
11 years ago on Introduction
Thank you. Sorry for all the questions. When I first asked about the breadboard, is there any tips on how I would change the layout of the circuit. I only have the small breadboard that comes with the Arduino uno ?
Many thanks
Reply 11 years ago on Introduction
Well first off you can totally do this. Small bb will work just as well as anything, you just have less room for clumsy fingers. :-) yes, if you put the pins in different holes than what the code says, then change the code to match reality. In fact I encourage you to mess with it and see what happens. You won't break anything. But there is the whole analog vs digital pin-hole business that will limit where you connect to your arduino.
11 years ago on Introduction
Thank you for getting back to me. I was also wondering, I have an ethernet board as well. Do I use that with this tutorial ?
Many Thanks