Die „Meine Smartphone Schalt- und Meldezentrale“-Schaltung stellt eine Erweiterung der davongegangenen Schaltung „LEDs mit ESP32 via WLAN
schalten“ dar. Auch hier spielen der ESP32-Mikrocontroller und die Blynk.app die Hauptrolle. Die Schaltung
kann unter
abgerufen werden.
In der folgenden Zusammenstellung werden über die Blynk.app nicht nur ein, sondern gleich drei ESP32-Mikrocontroller angesprochen. Eine solche Komposition
soll zeigen, wie man via WLAN eine eigene kleine Hausteuerung zusammenstellen kann. Selbstgemacht. Gartenpumpe ein- oder ausschalten, Heizung regulieren,
Fensterkontakte abfragen, Temperatur messen und vieles mehr ist hier möglich. In unserem Versuch werden nur einige einfache Funktionen ausprobiert. Alles
andere überlassen wir dem ambitionierten Bastler.
Wir stellen uns vor, dass die Mikrocontroller jeweils in einem anderen Raum untergebracht wurden und andere Aufgaben haben. Im „Keller“ wird nur ein
Lichtkreis ein- und ausgeschaltet. In der "Küche" kann ebenfalls ein Lichtkreis ein- und ausgeschaltet werden. Zusätzlich kann ein anderer Lichtkreis gedimmt
werden. In beiden Fällen handelt es sich um Geräte, die später auf Signale von Smartphones reagieren sollen. Im „Wohnzimmer“ befindet sich der letzte ESP32,
der selbst Signale zu dem Smartphone verschicken soll. Er fragt also Sensoren ab und meldet die Zustände an das Smartphone.
Wir haben hier sozusagen mit drei unabhängigen Schaltungen zu tun, die erstmals auf dem Smartphone Bildschirm zu einer Einheit zusammengeführt werden.
Die Vorgehensweise bei allen drei Komponenten ist gleich:
Das Projekt gestalten wir auf der Online-Plattform Blynk (https://www.blynk.io/). Die wichtigsten
Schritte dabei sind:
Registrierung. Zuerst muss man sich bei Blynk registrieren. Für einfache Projekte mit einer begrenzten Anzahl an Geräten, Vorlagen und Datenströmen ist
die Nutzung der Plattform kostenlos. Bei großen Projekten können Gebühren anfallen.
Vorlage. Auf der Blynk.Console im Bereich „Developer Zone -- > Meine Vorlagen“ durch Betätigen der Schaltfläche „+ Neue Vorlage“ eine neue
Vorlage anlegen.
Die neue Vorlage bekommt einen Namen. Zusätzlich werden die Hardware (ESP32) und der Verbindungstyp (WiFi) bestimmt.
Nachdem die Vorlage geöffnet und Bearbeitungsmodus aktiviert wurde, werden Datenströme angelegt. Ein Datenstrom kann als eine elektrische Leitung,
die für eine Funktion vorgesehen ist, verstanden werden. Um mit einem Schalter eine Lampe ein- bzw. auszuschalten, wird ein „Datenstrom“ benötigt. Um auf
einem Display die Temperatur von einem Sensor anzuzeigen, wird ebenfalls ein „Datenstrom“ benötigt.
In unserem Fall wird bei jedem Datenstrom „Virtual Pin“ gewählt. Nachdem alle Datenströme angelegt wurden, werden die Einstellungen gespeichert.
Im nächsten Schritt wird für die vorgewählte Vorlage Web-Dashboard eingerichtet. Hier kann man die zu den Datenströmen passenden Widgets einfügen.
Jedem Widget wird ein Datenstrom zugeordnet. Nachdem der Schritt abgeschlossen wurde, sind die Einstellungen zu speichern.
Im Bereich „Geräte“ werden neue Geräte eingefügt. In unserem Fall sind es drei. Jedem Gerät wird jeweils eine Vorlage, die soeben angelegt
wurde, zugeordnet.
Bei Anlegen der Geräte werden von der Software wichtige Daten generiert. Diese werden zu einem späteren Zeitpunkt in die Programme der drei
ESP32-Mikrocontroller eingefügt. Es handelt sich um „BLYNK_TEMPLATE_ID", BLYNK_TEMPLATE_NAME" und „BLYNK_AUTH_TOKEN“. Sie werden in folgender
Form in das ESP32-Programm eingefügt:
An unserem Versuch sind drei ESP32 beteiligt. Dementsprechend werden drei Vorlagen und drei Geräte angelegt. Das Ergebnis dieser
Vorarbeit könnte wie folgt aussehen:
(Vorlagen) Jeder Vorlage werden entsprechend der Aufgabe virtuelle Pin-Datenströme zugeordnet.
Keller: Datenstrom V22 (Lichtkreis Ein/Aus)
Küche: Datenstrom V14 (Lichtkreis 1 Ein/Aus) / Datenstrom V22 (Lichtkreis 2 dimmen)
Wohnzimmer: Datenstrom V25 – Status Lichtkreis An oder Aus / Datenstrom V26 – Status Heizung (OK oder Störung) /
Datenstrom V27 – Status Wetter (Regen oder Sonne)
(Geräte) Jedem Gerät wird eine auf ihn zugeschnittene Vorlage zugewiesen.
Schaltplan Keller
Im „Keller“ wird nur ein Lichtkreis geschaltet. Er wird durch die LED1 symbolisiert. Die endgültige Verbindung zwischen einem Widget in der
Web-Console oder in der Smartphone App erfolgt im ESP32-Programm, das unten folgt. Dort wird der virtueller Pin V22, der einem Datenstrom
zugeordnet wurde, mit dem Ausgangspin 22 des Mikrocontrollers verbunden. Die Nummerierung des virtuellen Pins ist dabei allerdings irrelevant.
Der hier gemeinte Datenstrom könnte auch einfach „Lichtkreis Keller“ heißen und dem virtuellen Pin V10
zugeordnet werden.
Im „Keller“-Fall wird der zuständige Datenstrom mit fünf Objekten verbunden. Zwei Widgets im Web-Dashboard (PC), zwei Widgets in der Blynk.App
(Smartphone) und dank eines passenden Programms mit dem Pin 22 des Mikrocontrollers.
Programm Keller
//***************************************************************************************
// Meine Smartphone Schalt- und Meldezentrale
// Teil 1: Keller (Ein/Aus-Funktion)
// ESP32-Dev-KitC V4
// Arduino IDE 2.3.7
//***************************************************************************************
#define BLYNK_PRINT Serial
// Die folgenden Daten werden bei Erstellung
// eines neuen Gerätes generiert und müssen
// hier eingegeben werden.
#define BLYNK_TEMPLATE_ID "TMPL4Tq7WIAAA"
#define BLYNK_TEMPLATE_NAME "ESP32 Keller"
#define BLYNK_AUTH_TOKEN "123456789DT4RODL0bqfItRcEVgUwCdb"
#include<WiFi.h> // Bibliotheken
#include<WiFiClient.h>#include<BlynkSimpleEsp32.h>
// Zugang zu dem Heim-Funknetz.
char ssid[] = "FRITZ!Box 7590"; // Dein Funknetz-SSID
char pass[] = "12345678902516646863"; // Dein Passwort
// **************************************************************************************
int PIN_LED = 22; // Pin ESP32
BLYNK_WRITE(V22) { // Blynk virtueller Pin
int pinValue = param.asInt(); // Wert aus der App lesen (0 oder 1)
if (pinValue == 1) {
digitalWrite(PIN_LED, HIGH); // Pin 22 (Ausgang) am ESP32 einschalten
} else {
digitalWrite(PIN_LED, LOW); // Pin 22 (Ausgang) am ESP32 ausschalten
}
}
// **************************************************************************************
void setup() {
Serial.begin(9600); // Anzeige vom WiFi-Verbindungsstatus
Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);
pinMode(PIN_LED, OUTPUT); // ESP32-Pin 22 als Ausgang
}
// **************************************************************************************
void loop() {
Blynk.run();
}
// **************************************************************************************
Schaltplan Küche
Programm Küche
//***************************************************************************************
// Meine Smartphone Schalt- und Meldezentrale
// Teil 2: Küche (Ein/Aus-Funktion / Dimmen)
// ESP32-Dev-KitC V4
// Arduino IDE 2.3.7
//***************************************************************************************
#define BLYNK_PRINT Serial
// Die folgenden Daten werden bei Erstellung
// eines neuen Gerätes generiert und müssen
// hier eingegeben werden.
#define BLYNK_TEMPLATE_ID "TMPL4Tq7WIAAA"
#define BLYNK_TEMPLATE_NAME "ESP32 Küche"
#define BLYNK_AUTH_TOKEN "123456789DT4RODL0bqfItRcEVgUwCdb"
#include<WiFi.h> // Bibliotheken
#include<WiFiClient.h>#include<BlynkSimpleEsp32.h>
// Zugang zu dem Heim-Funknetz.
char ssid[] = "FRITZ!Box 7590"; // Dein Funknetz-SSID
char pass[] = "12345678902516646863"; // Dein Passwort
// **************************************************************************************
int PIN_LED = 14; // Pin ESP32
BLYNK_WRITE(V14) { // Blynk virtueller Pin
int pinValue = param.asInt(); // Wert aus der App lesen (0 oder 1)
if (pinValue == 1) {
digitalWrite(PIN_LED, HIGH); // Pin 14 (Ausgang) am ESP32 einschalten
} else {
digitalWrite(PIN_LED, LOW); // Pin 14 (Ausgang) am ESP32 ausschalten
}
}
//***************************************************************************************
int LED_Dimm = 22; // Pin ESP32
BLYNK_WRITE(V22) { // Blynk virtueller Pin
int sliderValue = param.asInt(); // Wert von Schieber empfangen
ledcWrite (0, sliderValue); // Dimmen
}
// **************************************************************************************
void setup() {
Serial.begin(9600); // Anzeige Verbindungsstatus
Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);
pinMode(PIN_LED, OUTPUT); // ESP32-Pin 14 als Ausgang definiert
ledcSetup (0, 5000, 8); // Kanal 0, Frequenz 5kHz, Auflösung 8 Bit
ledcAttachPin (LED_Dimm, 0); // GPIO 22, Kanal 0
}
// **************************************************************************************
void loop() {
Blynk.run();
}
// **************************************************************************************
Schaltplan Wohnzimmer
Programm Wohnzimmer
//***************************************************************************************
// Meine Smartphone Schalt- und Meldezentrale
// Teil 3: Wohnzimmer (Status Abfragen)
// ESP32-Dev-KitC V4
// Arduino IDE 2.3.7
//***************************************************************************************
#define BLYNK_PRINT Serial
// Die folgenden Daten werden bei Erstellung
// eines neuen Gerätes generiert und müssen
// hier eingegeben werden.
#define BLYNK_TEMPLATE_ID "TMPL4Tq7WIAAA"
#define BLYNK_TEMPLATE_NAME "ESP32 Wohnzimmer"
#define BLYNK_AUTH_TOKEN "123456789DT4RODL0bqfItRcEVgUwCdb"
// Bibliotheken
#include<WiFi.h>#include<WiFiClient.h>#include<BlynkSimpleEsp32.h>
// Zugang zu dem Heim-Funknetz.
char ssid[] = "FRITZ!Box 7590"; // Dein Funknetz-SSID
char pass[] = "12345678902516646863"; // Dein Passwort
// **************************************************************************************
const int Schalter_Licht = 25; // ESP32 Pin 25 (Status Licht)
const int Schalter_Heizung = 26; // ESP32 Pin 26 (Status Heizung)
const int Schalter_Wetter = 27; // ESP32 Pin 25 (Status Wetter)
int Status_Licht = -1; // Vorbelegung
int Status_Heizung = -1;
int Status_Wetter = -1;
BlynkTimer timer;
// **************************************************************************************
void Pruefe_Licht() {
int Status_Licht_Aktuell = digitalRead(Schalter_Licht); // Digitales Signal lesen
if (Status_Licht_Aktuell != Status_Licht) { // Bei Änderung senden
Blynk.virtualWrite(V25, Status_Licht_Aktuell);
Status_Licht = Status_Licht_Aktuell; // Status aktualisieren
}
}
// **************************************************************************************
void Pruefe_Heizung() {
int Status_Heizung_Aktuell = digitalRead(Schalter_Heizung); // Digitales Signal lesen
if (Status_Heizung_Aktuell != Status_Heizung) { // Bei Änderung senden
Blynk.virtualWrite(V26, Status_Heizung_Aktuell);
Status_Heizung = Status_Heizung_Aktuell; // Status aktualisieren
}
}
// **************************************************************************************
void Pruefe_Wetter() {
int Status_Wetter_Aktuell = digitalRead(Schalter_Wetter); // Digitales Signal lesen
if (Status_Wetter_Aktuell != Status_Wetter) { // Bei Änderung senden
Blynk.virtualWrite(V27, Status_Wetter_Aktuell);
Status_Wetter = Status_Wetter_Aktuell; // Status aktualisieren
}
}
// **************************************************************************************
void setup() {
Serial.begin(9600);
Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);
pinMode(Schalter_Licht, INPUT_PULLUP); // Pins als Eingänge deklalieren
pinMode(Schalter_Heizung, INPUT_PULLUP);
pinMode(Schalter_Wetter, INPUT_PULLUP);
timer.setInterval(500L, Pruefe_Licht); // Prüf-Funktion alle 500 ms aufrufen
timer.setInterval(600L, Pruefe_Heizung); // Prüf-Funktion alle 600 ms aufrufen
timer.setInterval(700L, Pruefe_Wetter); // Prüf-Funktion alle 700 ms aufrufen
}
// **************************************************************************************
void loop() {
Blynk.run();
timer.run();
}
// **************************************************************************************
Die Sensoren, die bestimmte Zustände an das Smartphone senden, werden in der „Wohnzimmer“-Schaltung durch drei einfache Schließer S1,
S2 und S3 symbolisiert. Im Programm werden die Stellungen der Schalter in vorgegebenen Zeitabständen abgefragt. Wenn ein Schalter seinen
Zustand geändert hat, wird die Information an das Smartphone gesendet.
Nachdem die Programme in ESP32-Mikrocontroller geladen wurden, kann auf dem seriellen Monitor der Verbindungsstatus eingesehen werden. Wenn die
Verbindung mit dem Heimnetz steht, bekommt man folgende Meldung (ggf. muss der Reset-Knopf betätigt werden):
„Blynk IoT“-App
Sobald alle oben beschriebenen Schritte abgeschlossen sind, kann man sich dem Smartphone oder Tablet widmen.
Im ersten Schritt muss natürlich die „Blynk IoT“-App aus dem Google Play Store oder App Store heruntergeladen und installiert werden.
Nachdem man sich eingeloggt hat, erscheinen auf dem Startbildschirm die angelegten Geräte. Wenn die auf dem Web-Dashboard angelegten Widgets
hier nicht erscheinen, müssen sie neu eingefügt werden. Dies geschieht, indem man auf „Bearbeitung“ geht und das „+“-Symbol anklickt. Es wird eine
Widget-Auswahl geöffnet. Durch Anklicken wird das gewählte Widget eingefügt. Man klickt das Widget an und verbindet es mit einem im Web-Dashboard
vorgefertigten Datenstrom. Anschließend verlässt man die „Bearbeitung“-Ebene und kann die ESP32-Mikrocontroller steuern. Nachdem die Widgets eingefügt
und bearbeitet wurden, sehen unsere Steuer- und Meldeseiten auf dem Smartphone wie folgt aus: