Auch in diesem Sketch kannst du vieles weiter verwenden. Eine grundlegende Sache ist aber anders: Statt Daten per Feed an Adafruit IO zu übertragen, ist es diesmal genau andersherum. Dein ESP8266 empfängt Daten von dort – nämlich die Information, ob du den Lichtschalter in deinem Dashboard auf An oder Aus gestellt hast.
Zunächst jedoch zwei Zeilen zu Beginn des Sketchs. Die erste kennst du bereits und musst sie diesmal an den Feed led anpassen. In der zweiten definierst du den Pin, an dem die LED angeschlossen ist.
AdafruitIO_Feed *led = io.feed("led");
#define LED_PIN 0 //Am ESP8266 Pin D3
___STEADY_PAYWALL___
In der Setup-Funktion legst du dazu passend den pinMode fest, in unserem Fall OUTPUT.
pinMode(LED_PIN, OUTPUT);
Ebenso erstellst du dort einen Befehl, der die Funktion handleMessage() aufruft, sobald dein ESP8266 Daten von deinem Lichtschalter im Dashboard erhält. Auf diese Funktion kommen wir gleich genauer zu sprechen.
led->onMessage(handleMessage);
Der Loop ist diesmal ziemlich ausgedünnt. Hier gib es nur die Funktion io.run().
Die Funktion handleMessage()
Was passiert nun also, wenn du den Lichtschalter betätigst und dein ESP8266 die Information hierüber erhält? Zunächst findest du in der Definition der Funktion den Parameter *data. Das ist die Information, ob du den Lichtschalter auf An oder Aus gestellt hast.
void handleMessage(AdafruitIO_Data *data) {
Innerhalb der Funktion konvertierst du diese Funktion dann entweder in ein HIGH oder LOW. Das geschieht mit dem Befehl data->toPinLevel().
Um die LED zu steuern, musst du also nichts weiter machen, als dieses konvertierte Signal an deine LED zu senden:
digitalWrite(LED_PIN, data->toPinLevel());
Damit „schreibst“ du also auf den LED_PIN entweder ein HIGH (die LED geht an) oder ein LOW (sie geht aus). Die restlichen Zeilen in der Funktion handleMessage() geben lediglich Informationen in deinem Seriellen Monitor aus.
Und das war es auch schon wieder. Passe den Sketch aus den Downloads mit deinen Daten an und lade ihn auf deinen ESP8266. Kannst du die LED steuern?
Andere Geräte und Bauteile steuern
Eine LED an- und auszuschalten, ist natürlich einer der einfachsten Tests. Aber was mit einer LED funktioniert, klappt auch mit anderen Geräten oder Bauteilen.
Du könntest z.B. auch einen Servo-Motor mit dem Gauge Block steuern, den du bereits für den Poti angelegt hast. Statt einer LED kannst du natürlich auch ein „großes“ Licht verwenden, indem du ein Relais zwischenschaltest.
Experimentiere ein wenig mit den Blöcken in Adafruit IO herum. Sicherlich findest du spannende Anwendungen!
Was aber, wenn du gar nicht selbst das Licht anschalten möchtest? Im nächsten Kursabschnitt ist es ein externes Event, das deine LED steuern wird.