2015
|
|
Ende 2014 betritt der ESP8266-Baustein die Szene. Der Chip aus dem Hause espressif war zunächst nur chinesisch dokumentiert. Er ermöglicht es, sehr preiswert Steuerungen über das WLAN zu realisieren, ohne irgendeine vorhandene Infrastruktur.
Das WiFi/RS232-Modul kann als eigener Access-Point (AP) fungieren und macht damit andere Router überflüssig! Dies ist insbesondere unterwegs oder/und in abgelegen Gegenden von Vorteil.
In diesem Beispiel dient ein Arduino als Vermittler und als Mess- und Steuergerät. Das hier dargestellte Beispiel schaltet ein Relais, um zum Beispiel elektrische Geräte im 230 V-Netz zu steuern. Diese Steuerung soll über mobile Geräte, wie Smartphone oder Tablet erfolgen, die auch simultan die Steuerung übernehmen können.
Werbeunterbrechung in eigener Sache:
|
Nachtrag 2017: Wie das alles ohne Arduino und ohne rfo-Basic funktioniert zeigt das Buch Messen Steuern Regeln mit Smartphone und Tablet mit dem ESP8266, wo eine ähnliche Lösung in ESP8266Basic mit einer Hand voll Zeilen gelöst wird. Dieser Abschnitt hier wird u.a. im Kapitel ESP8266-AT (MIT ARDUINO) dargestellt.
|
|
Aufbau
|
Für diesen Aufbau werden die folgenden Geräte und Bauteile benötigt:
- Arduino mit Entwicklungsumgebung
- ESP8266-1 neuerer Art mit 9600 Baud
- Ein Kondensator ca. 470 uF - 1000 uF
- Ein Relais-Breakout (oder nur eine LED)
- Verbindungskabel
- Ein Smartphone, Tablet oder auch ein PC als Steuergerät
Ohne Steuergerät können die Kosten der Hardware im einstelligen Euro-Bereich bleiben, ein Arduino-Mini inklusive.
Die Verschaltung ist übersichtlich und schnell gesteckt. Bei der Spannungsversorgung ist etwas Vorsicht geboten, da der ESP8266 empfindlich auf falsche Spannungen reagiert. Ein Kondensator stabilisiert die schwachen 3,3 Volt bei Sendebetrieb etwas. Die direkte Verbindung der TX/RX-Leitungen erfolgt auf eigenes Risiko.
|
Sketch Arduino als Vermittler
|
Im Arduino werkelt ein kurzes Programm, ein Sketch. Es ist eine Minimalfassung, die ohne Soft-Serial auskommt und nach einiger Internetrecherche nun reibungsfrei läuft. Bei der Übertragung des Programms (Upload) muss die Verbindung zum ESP8266 kurz gelöst werden. Danach ist die Verbindung erforderlich, da die Kommunikation zwischen ESP und Arduino über diese zwei seriellen Leitungen erfolgt. Ein PC ist ab da nicht mehr erforderlich. Im eBook "Messen und Steuern mit dem Smartphone" wird gezeigt, wie auch die Programmierung und Übertragung vom Smartphone aus - ganz ohne PC - funktioniert.
Der Sketch initialisiert die Kommunikation auf 9600 Baud, den ESP8266 als AP (CWMODE), der mehrere Teilnehmer erlaubt und schaltet den Server-Modus an. Sollte nach einer Weile ein Problem auftauchen, so kann der ESP8266 zurrück gesetzt werden (AT+RST), wenn bei einem Arduino-Reset der Analogeingang 0 (A0) auf Massepotential liegt. Mit espReadLine() werden Zeichen vom ESP8266 eingelesen, mit Serial.print() bzw. Serial.println ausgegeben.
Die Hauptschleife überprüft, ob das Zeichen ("1") zum Schalten des Relais empfangen wird. Die Zeichenkette vom ESP hat das Format "+IPD,2,5:Hallo", wenn ein Teilnehmer mit der id 2 die 5 Buchstaben Hallo sendet. Falls 3 Parameter erkannt werden, folgt die Prüfung auf "1" und das Relais an Pin 12 wird entsprechend geschaltet. Als Rückmeldung wird "LED is OFF" bzw. "LED is ON " gesendet. (Dies wurde bei der Bluetooth-Steuerung hier an anderer Stelle ebenso gemacht). Mit CIPSEND wird der Adressat (id) und die Anzahl (12) der zu senden Zeichen vorweg übertragen und anschließend die eigentliche Botschaft. Dabei wird der aktuelle Zustand des Pin 12 abgefragt.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 | //OHNE SOFT SERIAL
#define PIN 12
char *startup[]={"ATE0","AT+CWMODE=2","AT+CIPMUX=1",
"AT+CIPSERVER=1","AT+CIPSTATUS"};
void setup()
{pinMode(PIN,OUTPUT); Serial.begin(9600);
if(analogRead(A0)==0)
{Serial.println("AT+RST");delay(2000);espReadLine(1000);}
for(int i=0;i<5;i++)
{Serial.println(startup[i]);espReadLine(0);}
}
char *espReadLine(int ms)
{char s[80]=""; //buffer
if(ms)delay(ms);
int len=Serial.readBytesUntil('\n',s,sizeof(s)-4); s[len]=0;
return s;
}
void loop()
{int id,len;char s[80];
if(3==sscanf(espReadLine(0),"+IPD,%d,%d:%s",&id,&len,s))
{digitalWrite(PIN,s[0]== '1'? HIGH : LOW); // OUTPUT
sprintf(s,"AT+CIPSEND=%d,12",id);// Message to id
Serial.println(s);espReadLine(0);// +\r\n
if(digitalRead(PIN))Serial.println("LED is ON ");
else Serial.println("LED is OFF");
}
}
|
|
Steuern mit Play-Store-App WiFi TCP/UDP Commander
|
Insbesondere mit dem Android TCP/UDP-Commander, einer Play-Store-App, steuert sich die Anordnung völlig problemlos. Aber auch ein kleines RFO-Basic-Programm weiter unten lässt das Relais per Touch schalten. Auch das alte Hyperterminal ermöglicht TCP/IP Verbindungen unter Windows 8.1. Im iTunes-Store findet man ähnliche Applikationen.
Voreingestellt ist die Adresse 192.168.4.1 und der Port 333. Dies wurde so bei behalten, um möglichst wenig Überhang zu erhalten. Damit die Steuerung funktioniert, muss aber erst der AP am Smartphone oder Tablet geändert sein. Also in den WLAN-Einstellungen einen AP mit Namen "ESP_..." suchen und eine Verbindung herstellen. Danach kann auch ein "Connect" in in der nebenstehenden App erfolgen und mit Betätigung des Tasters "LED AN" oder das Senden einer "1" im hier augeblendeten Terminalfenster sollte das Relais schalten. Die "0", oder die Schaltfläche "LED AUS" schaltet wieder ab. Die Kommandos werden in den Einstellungen der App festgelegt. Dort können auch Schieber angezeigt werden, die entsprechende Werte übertragen. Das Schieben lässt die blaue ESP-LED aufleuchten, der obige Sketch wertet jedoch nichts aus. (Hier ein Sketch, der darauf reagiert).
Die Anregung zu dieser Lösung war der Beitrag unter "AllAboutEE", der eine LED-Steuerung über eine Webseite vorstellt(e). Das Interessante ist dort die Auslagerung von Code in Form von Java-Script auf die Client-Seite, wodurch der kleine Arduino entlastet wird. Hier wird aber bewusst auf HTML/Browser verzichtet, um schlank zu bleiben.
|
Basic in der Hosentasche RFO-Basic auf dem Smartphone
|
Sockets und TCP werden von RFO-Basic unterstützt und so musste in der Bluetooth-Lösung nur die Verbindungsart geändert werden. Diese erfolgt nun über "192.168.4.1", an Port 333 via Sockets. Falls die Verbindung steht, wird die IP ausgegeben, um dann nach drei Sekunden in den Grafik-Modus zu wechseln.
Nach jedem Touch wird der gelbe Kreis umgeschaltet und gleichzeitig eine "1" bzw, "0" über WLAN an den ESP8266 geschickt. Dieser reicht diese Zeichen über die beiden seriellen Leitungen dem Arduino weiter, der entsprechend das Relais schaltet. Die Pause in der Touch-Abfrage schont den Akku des Smartphones.
PRINT "WLan Steuerung mit ESP8266."
PRINT "Arduino Led13 schalten."
SOCKET.CLIENT.CONNECT "192.168.4.1",333
SOCKET.CLIENT.STATUS r
IF r THEN
PRINT "Connected to ";
SOCKET.CLIENT.SERVER.IP a$
PRINT a$
ELSE
END
ENDIF
PAUSE 3000
GR.OPEN 255, 0,0,0
GR.ORIENTATION 1
GR.SCREEN w,h
r = 255
g = 200
b = 0
GR.COLOR 255,r,g,b,1
GR.CIRCLE rc, w/2, h/2, w/3
lf$=CHR$(13)
DO
GR.SHOW rc
GR.RENDER
SOCKET.CLIENT.WRITE.LINE "1"+lf$
GOSUB touch
GR.HIDE rc
GR.RENDER
SOCKET.CLIENT.WRITE.LINE "0"+lf$
GOSUB touch
UNTIL x<100
END
touch:
DO
GR.TOUCH touched,x,y
PAUSE 20
UNTIL touched
WHILE touched
GR.TOUCH touched,x,y
!pause 20
REPEAT
RETURN
|
Fazit
|
Insgesamt erscheint die TCP/IP-Lösung gegenüber der Bluetooth-Lösung aus "Messen und Steuern mit dem Smartphone" etwas solider, wenn es um die Funk-Übertragung geht. Beide senden etwa im selben Frequenzbereich, aber BT war und ist hier immer etwas "wackelig". Erst wenn der Access-Point länger ununterbrochen in der Luft ist, können Aussagen zur Zuverlässigkeit erfolgen. Ein 24h-Lauf war viel versprechend.
Auch für den alten iPod Touch der 2. Generation gab/gibt es noch ein kompatibles Testprogramm im App-Store: "WIFI TCP Test Tool". Es ist nützlich, um das Zusammenspiel verschiedener Apps und Programme zu untersuchen. Zur Zeit laufen hier Tests für den gemischten (Dauer-) Betrieb, also "AT+CIPMODE=3" mit als Router eine ältere Fritzbox. Die Anmeldung erfolgte manuell mittels Terminal und ist nur einmal erforderlich, wodurch eine Änderung der "2" auf "3" im obigen Quelltext die Steuerung auf beide Arten zulässt.
Im Station-Modus sollte es möglich sein, das Relais von jedem Ort mit Internet, aus der Ferne zu steuern - und das möglichst ohne Wartungsarbeiten bzw. manuellem Eingriff ...
|
Das Ergebnis des Dauertests ist verlinkt als Steuern mit WLAN II oder LED-Chat.
|
|
Weitere Software
|