ThingSpeak bietet verschiedene Dienste an, um Daten zu verarbeiten bzw. Daten zu visualisieren. Die verschiedenen Anwendungen sind unter dem Reiter "Apps" zu finden. Hier werden zwei Beispiele gezeigt, die mit ThingSpeak möglich sind. Es werden die Anwendungen "ThingHTTP" und "ThingTweet" gezeigt. 

ThingHTTP ist eine Anwendung um einen GET-HTTP Request zu erzeugen. Das heißt, dass man damit Daten aus einer HTML-Seite auslesen kann. z.B eine Uhrzeit von einer HTML-Seite. Die Suchfunktion einer HTML-Seite funktioniert bei ThingHTTP mithilfe von XPath. Um einen bestimmten Wert zu lesen, muss man auf diesen Rechtsklick drücken und auf "Element untersuchen" gehen. Xpath finden

Abb.:Xpath kopieren; Quelle: BBS2 Wolfsburg

Daraufhin öffnet sich mit Rechtsklick ein Menü, wo man unter "kopieren" den XPath kopieren kann. Den fügt man nun bei der erstellten ThingHTTP unter "Parse String" ein. Außerdem muss man unter "URL" auch den URL-Link der Seite einfügen. Die erstellte ThingHTTP Anwendung sieht dann wie folgt aus: ThingHTTP

Abb.:ThingHTTP; Quelle: BBS2 Wolfsburg

In der rechten Textbox befindet sich der GET HTTP-Request. Der wird nun benötigt, um die Uhrzeit abzufragen.

Um beim Arduino eine Internetverbindung aufzubauen, wird das Ethernet-Shield genutzt. Ein Wlan-Modul wäre auch möglich. Nach der Initialisierung der Ethernetverbindung, verbindet man sich mit dem ThingSpeak Server. Mit dem Befehl "client.connect(Adresse,Port)" kann man sich mit dem ThingSpeak Server verbinden. Daraufhin sendet man mit client.print den vorgegebenen Request. Hier kann man nachlesen, wie ein Request auszusehen hat.

Serial.println("Initialisiere Ethernet mit DHCP");
if(Ethernet.begin(mac) == 0)
{
  Serial.println("Failed to configure Ethernet using DHCP");  //Abfangen von Fehlern
  if(Ethernet.hardwareStatus() == EthernetNoHardware)
  {
    while(true)
    {
      delay(1);
    }
  }

  Ethernet.begin(mac);  //Initialisierung
  delay(1000);
  
  Serial.print("connecting to ");
  Serial.print(thingSpeakAddress);
  Serial.print("...");
}
else
{
  Serial.print(" DHCP assigned Address");
}

if(client.connect(thigSpeakAddress, 80))
{
  Serial.print("connected to ");
  Serial.println(client.remoteIP());
  client.println("GET /apps/thinghttp/send_request?api_key=2KJHVKWQLIQ3LJ12");
  client.println("Host: www.thingSpeak.com");
  client.println("Connection: close");
  client.println();
}
else
{
  Serial.println("connection failed");
}

beginMicros = micros(); //Zeitmessung für Datengeschwindigkeit

Die Kommunikation startet mit dem Request. Darauf antwortet der Server mit mehrer Verbindungsdaten und dem eigentlich Angefragten Daten.

Jetzt muss man die Antwort des Servers abfangen. Die "available" Funktion liefert die Anzahl der Bits, die im Buffer sind. Die Antwort enthält allerdings nicht nur die geforderten Daten, sondern auch die Verbindungseigenschaften. Diese müssen dann gefiltert werden. Die erhaltenden Bits werden in einem Array gespeichert und dann Stück für Stück umgewandelt. Das Datum wird im String "Datum" gespeichert. Die Funktion client.availbable() gibt die Länge der ankommenden Bits an. Diese werden in einem Buffer in form eines Arrays gespeichert. Mit "client.read(buffer, len)" werden die ankommenden Bits bis zur 800. Stelle in das Array "buffer" gespeichert. Daraufhin werden die Daten gefiltert mithilfe einer For-Schleife, damit nur die geforderten Daten ausgegeben werden.

String Datum = "";
int len = client.available();

if(len > 0)
{
  byte buffer [800];
  if(len > 800)
  {
    len = 800;
  }

  client.read(buffer, len);
  if(printWebData)
  {
    for(int i = 744; i < len; i++)  //Erst ab dem 744. Zeichen lesen
    {
      Datum = Datum + char(buffer[i]);  //ASCII wird in char umgewandelt
    }
    Serial.println(Datum);  //Datum wird ausgegeben
  }
  byteCount = byteCount + len; //Nur für Berechnung der Datengeschwindigkeit nötig
}

ThingTweet funktioniert auch durch einen HTTP-Request, jedoch mit einem POST-Request. Das heißt, dass nun Inhalt an den ThingSpeak-Server gesendet wird. Nachdem ein Twitter-Account mit ThingTweet gekoppelt wurde, erhält man einen ThingTweet API-Key. Dieser wird im Quellcode als Variable "thingtweetAPIKey" hinterlegt. Die Ethernetverbindung bleibt die gleiche wie oben bei ThingHTTP.


void updateTwitterStatus(String tsData)
{
  if(client.connect(thingSpeakAddress, 80))
  {
    //Create HTTP POST Data
    tsData = "api_key=" + thingtweetAPIKey + "&status=" + tsData;

    client.print("POST /apps/thingtweet/1/statuses/update HTTP/1.1\n");
    client.print("Host: api.thingspeak.com\n");
    client.print("Connection: close\n");
    client.print("Content-Type: application/x-www-form-urlencoded\n");
    client.print("Contetn-Length: "
    client.print(tsData.length());
    client.print("\n\n");
    
    client.print(tsData);

    lastConnectionTime = millis();
  }
}
Zuletzt geändert: Donnerstag, 27. Januar 2022, 11:42