Heute habe ich wieder einen sehr spezielles Code Schnipsel für Euch mit dem es möglich ist, sich mit einem bestimmten WLAN Netz zu verbinden und wenn die WiFi Verbindung zustande kommt eine Aktion auszulösen, bzw. Programm Code auszuführen. Ändert sich danach der Wifi-Status, wird der Vorgang zurück gesetzt und Neustart der WLAN-Suche gestartet. Findet ein erneuter Autoconnect des WiFi Netzes statt, wird wieder einmalig der hinterlegte Code ausgeführt. Die Zeilen habe ich für Euch gut dokumentiert und sollten sich im Grunde selbst erklären.
Bekommt der ESP8266 Spannung, wird nach dem zuvor definierten WLAN gesucht und in diesem Beispiel ein Relais angezogen. Kommt der ESP nun in den definierten WiFi Bereich, wird eine Verbindung zu diesem Netz aufgebaut und ein kleines Script gestartet, welches das Relay mehrfach kurz an- und wieder abfallen lässt um beim letzten Befehl nicht mehr an zu gehen. Danach fällt der ESP in einen Wartemodus der immer den WiFi Status abfrägt, ob man noch verbunden ist. Wird die Verbindung zum WLAN Netzwerk getrennt, zieht das Relais wieder an und er wird erneut auf das Vorhandensein eines WiFi Netzes gewartet. Danach beginnt das Programm von vorne.
Anwendung:
Ich habe die paar Zeilen Code für einen Halloween Geisterlauf geschrieben. Der ESP wird in eine LED Taschenlampe verbaut, welche sich ganz normal bedienen lässt. Kommen die Beteiligen nun in einen Bereich des Waldes in dem ein Batterie-WLAN-Router liegt, fängt die Taschenlampe zuerst zum blinken an und geht danach aus. Laufen die Leute dann im Parkour weiter, wird die WLAN Verbindung zum Router unterbrochen und die LED-Taschenlampe lässt sich wieder ganz normal verwenden.
Und hier der Code für dieses Projekt:
#include <ESP8266WiFi.h> #define WIFI_SSID "iPhone von Martin" #define WIFI_PASS "itlernet" #define SERIAL_BAUDRATE 115200 #define RELAY_PIN 13 int counter=1; void setup() { // PIN definieren pinMode(RELAY_PIN, OUTPUT); // PIN auf HIGH setzen digitalWrite(RELAY_PIN, HIGH); // Serial Bautrate setzen Serial.begin(SERIAL_BAUDRATE); // Wifi Verbinung starten wifiSetup(); } // Wifi Verbindung erstellen void wifiSetup() { // WiFi Modus in STA setzen WiFi.mode(WIFI_STA); // Verbindung Serial.printf("[WIFI] Verbindung mit %s ", WIFI_SSID); WiFi.begin(WIFI_SSID, WIFI_PASS); // Warten while (WiFi.status() != WL_CONNECTED) { Serial.print("."); delay(100); } Serial.println(); // Verbindung erfolgreich Serial.printf("[WIFI] STATION Mode, SSID: %s, IP Addresse: %s\n", WiFi.SSID().c_str(), WiFi.localIP().toString().c_str()); } // Checken ob WiFi verbunden - wenn Verbunden einmal das Programm abfahren void loop() { while (WiFi.status() == WL_CONNECTED) { for (counter; counter<=1; counter = counter+1){ Serial.println("letsgooooooooo"); digitalWrite(RELAY_PIN, LOW); delay(100); digitalWrite(RELAY_PIN, HIGH); delay(100); digitalWrite(RELAY_PIN, LOW); delay(300); digitalWrite(RELAY_PIN, HIGH); delay(600); digitalWrite(RELAY_PIN, LOW); delay(100); digitalWrite(RELAY_PIN, HIGH); delay(600); digitalWrite(RELAY_PIN, LOW); delay(200); digitalWrite(RELAY_PIN, HIGH); delay(800); digitalWrite(RELAY_PIN, LOW); delay(200); digitalWrite(RELAY_PIN, HIGH); delay(700); digitalWrite(RELAY_PIN, LOW); delay(300); digitalWrite(RELAY_PIN, HIGH); delay(800); digitalWrite(RELAY_PIN, LOW); delay(100); digitalWrite(RELAY_PIN, HIGH); delay(100); digitalWrite(RELAY_PIN, LOW); delay(100); } // Warten bis WLAN Aenderung eintritt delay(500); Serial.println("kurze Pause"); } // WLAN unterbrochen - LED und Counter zuruecksetzen - WiFi Suche starten digitalWrite(RELAY_PIN, HIGH); counter=1; wifiSetup(); }
Beim Relay PIN müsst ihr bei Eurem Modell sehen, ob der PIN 13 verfügbar ist. Ich habe zur Programmierung einen NodeMCU verwendet, bei dem der PIN13 auf D7 liegt.
Der Rest sollte sich selbst erklären, bzw. sehr einfach an die eigenen Bedürfnisse anpassen lassen.
So sieht die Ausgabe in der Konsole aus:
Viel Spaß bei Eurem Projekt wünsche ich!
Tags:
- ESP wlan Verbindung prüfen
- wifi os railway 8266
- esp8266 wifi
- esp8266 verbinden
- esp8266 d1 blinken