Arduino lernt twittern

Das BonsaiTwitter Projekt finden Sie hier: BonsaiTwitter

Diese Seite wird nicht mehr aktualisiert und ist nur noch zu Archivzwecken abrufbar!

Der zunehmend populärer werdende Dienst twitter erlaubt das Veröffentlichen von bis zu 140 Zeichen langen Statusmeldungen (”tweets”). Eine optimale Plattform, um mit Arduino automatisiert Statusmeldungen zu veröffentlichen.

Eine wunderbare Anwendung für die Anbindung des Arduino Boards an twitter realisiert das Botanicalls Kit. Hier twittern Pflanzen. Genauer gesagt misst das Arduino Board mit zwei Sensoren die Leitfähigkeit der Blumentopf Erde - also die Feuchte - und teilt der Welt (und dem Blumenbesitzer) mit, dass sie gegossen werden muss. Nach dem Gießen bedankt sie sich wiederum brav per twitter.

Um mit dem Arduino Board twitter Nachrichten ohne einen angeschlossenen Mac bzw. PC verschicken zu können, benötigt man neben dem eigentlichen Arduino Board ein Ethernet Shield. Die beiden Komponenten können dann, verbunden mit einem lokalen Netzwerk per Ethernet und einem Router für den Internetzugang, mit dem twitter Dienst kommunizieren. Zudem ist ein kostenloser twitter Account notwendig.

Das Versenden von twitter Nachrichten ist über eine von twitter zur Verfügung gestellte API möglich. Die API ist gut dokumentiert und einfach verwendbar. Man ruft zum Versenden des tweets lediglich per PUSH eine URL auf und übergibt den zu veröffentlichen Statustext. Die Identifizierung erfolgt per HTTP-Auth.

Der folgende Beispielcode zeigt sehr einfach, wie man eine twitter Nachricht verschicken kann:

#include <Ethernet.h>
/*
   Twitter Modul
   2009 by Mats Vanselow
   Mats-Vanselow.de
*/

//////////// EINSTELUNGEN ///////////////////

// Etherneteinstellungen f&uuml;r das Arduino Board //
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192, 168, 0, 99 };
byte gateway[] = { 192, 168, 0, 1 };
byte subnet[] = { 255, 255, 255, 0 };

// Twitter Settings //
byte server[] = { 128, 121, 146, 100 };   // IP von Twitter (default: 128.121.146.100)
#define TWITTERURL "/statuses/update.xml"  // URL zum Update Script
#define TWITTERUSERNAMEPW "ABC="  // Base64 enkodet USERNAME:PASSWORT

Client client(server, 80);

void setup()
{
  Ethernet.begin(mac, ip, gateway, subnet);  // Ethernet initalisieren
  Serial.begin(9600);   // Serielle Verbindung f&uuml;r Statusmeldungen
  delay(1000);  // Kurz warten, um serielle Verbindung zu starten

  sendTwitterUpdate("Und jetzt kann auch das Arduino Board twittern!");  // Nachricht versenden
}

void loop()
{
  fetchTwitterUpdate();
}

/// Functions ////

void sendTwitterUpdate(char* tweet)        // Nachricht an Twitter &uuml;bermitteln
{
   Serial.println("connecting...");

  if (client.connect()) {
    Serial.println("connected");

    client.print("POST ");
    client.print(TWITTERURL);
    client.println(" HTTP/1.1");
    client.println("Host: twitter.com");
    client.print("Authorization: Basic ");
    client.println(TWITTERUSERNAMEPW);
    client.print("Content-Length: ");
    client.println(9+strlen(tweet));
    client.println("");
    client.println("status=");
    client.println(tweet);
    Serial.println("twitter message send");
  } else {
    Serial.println("connection failed");
  } 

void fetchTwitterUpdate()     // R&uuml;ckmeldung von Twitter auslesen
{
    if (client.available()) {
    char c = client.read();
    Serial.print(c);
  }

  if (!client.connected()) {
    Serial.println();
    Serial.println("disconnecting.");
    client.stop();
  }
}

Zuerst erfolgen im Beispielcode die Etherneteinstellungen. Dazu muss die MAC-Adresse des Arduino Boards, die IP-Adresse, der Gateway (die IP-Adresse des Routers) sowie die Subnet Maske angegeben werden. Die hier voreingestellten Werte werden aber bereits in vielen Netzwerken ohne Anpassungen funktionieren.

Bei den twitter Einstellungen muss die twitter-Server-IP sowie die URL der API eingegeben werden. Die voreingestellten Werte müssen nur optional verändert werden. Angepasst werden müssen dagegen die Login-Daten für den twitter Account. Im Feld TWITTERUSERNAMEPW muss mit Base64-enkodiert der Benutzer und das Passwort für den zu nutzenden twitter Account eingetragen werden; dazu ist das Format benutzer:passwort zu verwenden und mit Base64 zu enkodieren. Im Internet finden sich diverse (webbasierte) Lösungen, um schnell eine Base64-Enkodierung vorzunehmen.

Nachdem die Einstellungen erfolgt sind, kann das Programm (in der Arduino Sprache Sketch genannt) auf das Arduino Bord übertragen werden. Wenn alles richtig konfiguriert worden ist, twittert dann das Arduino Board nach der Initialisierung “Und jetzt kann auch das Arduino Board twittern!”.

Mit der function sendTwitterUpdate(status) können bequem Statusmeldungen an Twitter versandt werden. Die function fetchTwitterUpdate() fängt die Rückmeldung von twitter ab und gibt sie für das Debugging auf der seriellen Schnittstelle aus; dazu muss die function wie im Beispiel gezeigt in der function loop() aufgerufen werden.

In diesem Beispiel wird unmittelbar nach Start des Arduino Boards in der function setup() die twitter Nachricht per sendTwitterUpdate (status) versandt. Bei einer komplexeren Anwendung könnte man die Anwendung so gestalten, dass erst beim Eintreten bestimmter Sensorzustände (z.B. gedrückter Taster) Nachrichten verschickt werden. Hier ist die eigene Kreativität gefragt.

Abschließend noch einige Beispiele für twitternde Arduino Boards: Mein Arduio Board twittert unter dem Synonym MFVbonsai. Interessant sind sicher auch die twitternden Pflanzen pothos und Botanicalls0040.

Update: In Arduino Version 0013 ist leider ein Fehler in der Ethernet Library enthalten, der dazu führt, dass nur eine tweet gesendet werden kann und danach das Senden fehlschlägt. Ein Workaround ist in diesem Thread beschrieben.

© Mats Vanselow - Impressum / Datenschutzerklärung