Als Linux-Client dient ein Python-Skript, das die Daten aus der API ausliest und mithilfe des Systemmonitors Conky [12] auf dem Desktop darstellt. Die Schaltung besteht aus einigen wenigen Bauteilen, die die Tabelle “IoT-Temperatursensor: Bauteile” zusammenfasst. Den Aufbau des Temperatursensors skizziert die Abbildung 2 grob.
IoT-Temperatursensor: Bauteile
|
Bauteil |
Preis |
|---|---|
|
Adafruit Huzzah |
13 Euro |
|
FTDI-Kabel |
6 Euro |
|
DHT22 |
6 Euro |
|
10-kOhm-Widerstand |
0,10 Euro |
|
220-Ohm-Widerstand |
0,10 Euro |
|
LED |
0,10 Euro |
|
Steckbrett |
3 Euro |
|
Kabelbrücken |
3 Euro |
Ist die Hardware einsatzbereit, erzeugen Sie einen Datenfeed im Adafruit-IO-Benutzerkonto. Solche Feeds nehmen Daten eines Senders entgegen und stellen sie für den Abruf durch einen Client bereit. Ein Klick auf Actions | Create a New Feed generiert einen neuen Feed in der entsprechenden Übersicht. Dort wählen Sie einen geeigneten Namen sowie eine Beschreibung für ihn aus, dann steht der Feed auf Empfang.
Programmierung
Sie programmieren den IoT-Temperatursensor am einfachsten mit der Arduino-IDE [13], die es auch für 32- und 64-Bit-Linux-Systeme gibt. Die Adafruit-Huzzah-Boards warten mit einer integrierten USB-Schnittstelle sowie seriellen Anschlüssen auf. Verwenden Sie ein anderes Board, das lediglich einen seriellen UART-Anschluss bereitstellt, benötigen Sie ein FTDI-Kabel, um eine serielle Schnittstelle über USB zur Verfügung zu stellen.
Nachdem Sie mithilfe der Anleitung von Adafruit [14] das Huzzah-Board in die Arduino-IDE integriert haben, installieren Sie noch über Sketch | Bibliotheken einbinden | Bibliotheken verwalten die fünf Bibliotheken DHT, ArduinoHttpClient, Adafruit Unified Sensor, Adafruit MQTT Library sowie Adafruit IO Arduino.
Das Programm zum Auslesen des Temperatursensors basiert auf dem Beispielcode aus der Adafruit-IO-Bibliothek und besteht aus zwei Teilen. Listing 1 zeigt den ersten Teil mit dem Programmcode (AdaIOClient.ino). Die Datei config.h in Listing 2 enthält den zweiten Teil mit den Zugangsdaten zum WLAN und zum Adafruit-IO-API. Die Einstellungen in der Datei müssen Sie daher entsprechend an Ihre Umgebung anpassen. Anschließend kompilieren Sie den Code und die Konfiguration und schieben sie auf das Board.
Listing 1
#include <Adafruit_Sensor.h>
#include <DHT.h>
#include "config.h"
#define DHTPIN 5
#define DHTTYPE DHT22
#define LED 13
AdafruitIO_Feed *temperatur = io.feed("Temperatur");
AdafruitIO_Feed *luftfeuchte = io.feed("Luftfeuchte");
AdafruitIO_Feed *led = io.feed("LED");
DHT_Unified dht(DHTPIN, DHTTYPE);
uint32_t delayMS;
void setup() {
io.connect();
led->onMessage(handleMsg);
while(io.status() < AIO_CONNECTED) {
delay(500);
}
dht.begin();
sensor_t sensor;
dht.temperature().getSensor(&sensor);
dht.humidity().getSensor(&sensor);
delayMS = sensor.min_delay / 1000;
pinMode(LED, OUTPUT);
}
void loop() {
delay(delayMS);
io.run();
sensors_event_t event;
dht.temperature().getEvent(&event);
if (!isnan(event.temperature))
temperatur->save(event.temperature);
dht.humidity().getEvent(&event);
if (!isnan(event.relative_humidity))
luftfeuchte->save(event.relative_humidity);
delay(10000);
}
void handleMsg(AdafruitIO_Data *data) {
if(data->value() == "ON")
digitalWrite(LED, HIGH);
else
digitalWrite(LED, LOW);
}
Listing 2
#define IO_USERNAME "Benutzer" #define IO_KEY "Schlüssel" #define WIFI_SSID "SSID" #define WIFI_PASS "Passwort" #include "AdafruitIO_WiFi.h" AdafruitIO_WiFi io(IO_USERNAME, IO_KEY, WIFI_SSID, WIFI_PASS);
Auf den Desktop
Die Feed-Ansicht verrät, ob der Sensor erfolgreich Daten an das API liefert. Klappt das, richten Sie im nächsten Schritt den Client auf dem Linux-Desktop ein. Dafür dienen im hier vorgestellten Beispiel die Python-Skripte getTemp.py (Listing 3) und getHum.py (Listing 4). Der folgende Aufruf installiert die Python-Bibliotheken für das Adafruit-IO-API mithilfe der Paketverwaltung Pip:
$ sudo pip install adafruit-io
Listing 3
from Adafruit_IO import Client
aio = Client('AIO-Key')
temp = aio.receive('Temperatur')
print("{0:.1f}".format(float(temp.value)))
Listing 4
from Adafruit_IO import Client
aio = Client('AIO-Key')
hum = aio.receive('Humidity')
print("{0}".format(hum.value))
Die beiden Skripte benötigen jeweils in der zweiten Zeile den API-Schlüssel, den Sie in Ihrem Adafruit-Benutzerkonto unter Settings | Manage AIO Keys | View AIO Key finden. Beim Ausführen holen die Skripte die gewünschten Daten aus dem Feed der Adafruit-IO-API und geben den aktuellsten Wert aus.
Es stehen verschiedene Möglichkeiten zur Auswahl, die Ausgabe der Skripte auf den Desktop zu bringen. Im Gnome-Panel zeigt zum Beispiel das Plugin Argos [15] die Werte oder entsprechende Symbole auf dem Panel an. Eine andere Möglichkeit bieten die Plasma-Widgets von KDE, die Sie bei Bedarf auf dem Desktop platzieren. Ein Widget zu erstellen, das die Feed-Daten anzeigt, erfordert allerdings etwas Einarbeitung in das Thema [16].
Besonders einfach klappt die Anzeige der Werte mithilfe des Systemmonitors Conky und der Funktion execi: Sie zeigt die Ausgabe eines Skripts an, die Conky zudem regelmäßig aktualisiert. Passende Conky-Konfigurationseinträge für die beiden Skripte aus Listing 3 und Listing 4 mitsamt einer Aktualisierung alle 10 Minuten zeigt Listing 5. Die entsprechende Konfigurationsdatei .conkyrc gehört in das Verzeichnis ~/.conky/. Das Resultat für die Conky-Konfiguration Simple Conky [17] sehen Sie in Abbildung 3.






