User Tools

Site Tools


The Twitter Button is Back in Business! (Expect updated code soon) Note: Twitter changed its authentication system to reject basic http auth… This might does work:


The “Twitter Button” project's goal is to use a big red HAL9000 button to indicate via twitter that a keyholder is present at NSL The project has since been expanded to include an RFID reader to identify keyholders in addition to the button.


Active Use! The button is up and mounted next to the door! Current twitter button status can be viewed on the When Are You There page :)



  • Light up button while “NSL is open”
  • Tweet status
  • Status change by button-press
  • Read and Identify RFID card
  • Status change by RFID read
  • Specific status change based on RFID card used
  • Twitter session longer expires after 10 min.
  • Twitter wont let you “retweet” past posts… (need to make each post now unique)

In Progress:

  • Configure for keyholder RFID cards… So far I have a handful of cards set up, let me know if I've missed you…
  • Package into Box
  • Sleep

Current Issues:

  • Twitter has a limit on posts per hour… not nice for testing
  • Fit everything into the box, need to play more tetris. (I think that everything fits now)
  • Make holes in box for power/ethernet/usb/program mode button

Future Plans:

  • Authenticate RFID with a Python app on server.

Code - Basic Concept

<code> - include <Ethernet.h> byte mactwitter_button = { 0xde, 0xad, 0xbe, 0xef, 0xfe, 0xed }; byte iptwitter_button = { 10, 0, 5, 247 };\t\t\t this is the ip within my lan byte gatewaytwitter_button = { 10, 0, 0, 1 };\t\t\t neccessary to get access to the internet via your router byte subnettwitter_button = { 255, 0, 0, 0 }; byte servertwitter_button = { 128, 121, 146, 100 };\t\t Twitter's ip Client client(server, 80); void setup() { <code> Ethernet.begin(mac, ip, gateway, subnet); Serial.begin(9600); delay(1000); Serial.println(`connecting…`); if (client.connect()) { Serial.println(`connected`); client.println(`POST HTTP/1.1`); client.println(`Host:`); client.println(`Authorization: Basic XXXXXXXXXXXXX`); the string of ###s after `Basic` is the base64_encoded Text of username:password of your twitter account</code> \t\t\t\t\t\t\t\t\t\t\t\t you can do the encoding at this site: <code> client.println(`Content-type: application/x-www-form-urlencoded`); client.println(`Content-length: 28`);\t\t\t\t\t this is the length of the text `Yahoo, im twittering!` client.println(`Connection: Close`); client.println(); client.print(`status=Yahoo, im twittering!`); } else { Serial.println(`connection failed`); }</code> } void loop() { <code> if (client.available()) { char c =; Serial.print©; } if (!client.connected()) { Serial.println(); Serial.println(`disconnecting.`); client.stop(); for(;;)</code> \t; <code> }</code> } </code>


Any inquiries/suggestions should be told/sent/given/yelled to Davo in person, via the nsl list, or via IRC… :)

twitter_button.txt · Last modified: 2013/08/13 12:13 by