Mats-Vanselow.de

Hallo und Willkommen auf meinem Blog.

Arduino lernt twittern

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
 
Lizenz (Deutsch): creative commons Namensnennung - Keine kommerzielle Nutzung - Weitergabe unter gleichen Bedingungen 3.0 Unported - http://creativecommons.org/licenses/by-nc-sa/3.0/deed.de
Bei Verwendung und Weitergabe des Quellcodes muss ein Verweis auf den Autor und die Webseite erfolgen. In Begleitdokumentationen ist ebenfalls in angemessener Weise dieser Verweis anzubringen.
 
License (English): creative commons Attribution-Noncommercial-Share Alike 3.0 Unported - http://creativecommons.org/licenses/by-nc-sa/3.0/
When using and distributing this source code a reference to the author and the web page must take place. In accompanying documents this reference must also be attached.
 
Code by Mats Vanselow - http://www.mats-vanselow.de
 
*/
 
//////////// EINSTELUNGEN ///////////////////
 
// Etherneteinstellungen fü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ü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 ü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ü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 MFVarduino. Interessant sind sicher auch die twitternden Pflanzen pothos und Botanicalls0040.

18.02.2009 - Tags:  #Arduino  #Twitter 
© Mats Vanselow - Impressum / Datenschutzerklärung