ESP8266 - Ersteinrichtung
Genau wie der ATMEGA des Arduino ist der ESP8266 ein Mikrocontroller. Dieser übernimmt die Hauptaufgabe, ein WLAN mit Allem, was dazu gehört, zu realisieren und war ursprünglich als Erweiterungsmodul vorgesehen, um dem Arduino & Co. WiFi beizubringen.Doch der ESP8266 kann auch ganz normal als Mikrocontroller programmiert werden, ähnlich wie der Arduino. Ja, selbst die Arduino IDE Sketch kann zum entwickeln und Programm hochladen verwendet werden.
Preislich ist ein Entwicklungsboard D1 mit einem ESP8266 in etwa so teuer wie ein Arduino Uno. Der Formfaktor ist der selbe. USB-Buchse und Spannungswandler befinden sich ebenfalls bereits auf dem Board. Das heißt, dass man das WLAN quasi kostenlos obendrauf bekommt.
Falls man den Raspberry Pi nur wegen des vorhandenen WLANs gewählt hätte, kann man hier viel Geld sparen. Mit dem ESP8266 lassen sich kostengünstig alle möglichen Internet-Of-Things (IOT) Anwendungen realisieren.
Die Hardware des ESP8266-Boards Wemos D1
Das Board ist ähnlich dem eines Arduino Uno und schnell erklärt:
- ganz oben links ist der Reset-Taster
- darunter die USB-Buchse zum Anschluss an den PC zum Programmieren. Diese gibt es in unterschiedlichen Varianten. In diesem Fall ist es eine Mikro-USB-Buchse.
- unten links die schwarze Buchse ist der Anschluss für die Versorgungsspannung. Die sollte zwischen 9 und 24 Volt liegen, mit dem Pluspol innen. Das Board sollte aber auch mit 5V noch laufen, wenn man ihm nicht viel abverlangt.
- rechts an die Strombuchse sitzen die Spannungswandler, die auf die Buchsenleite unten links 3.3V und 5V sowie Masse bringen.
- rechts daneben der einzige Analogeingang A0 (max. 3.3V)
- darüber das ESP 8266 Modul, das Herz der Platine. Hier als ESP-12F-Ausführung. In dem silbernen Kästchen ist alles Nötige für WLAN integriert. Rechts daneben die Schlangenlinien ist die WLAN-Antenne. Dazwischen liegt eine kleine programmierbare LED.
- in der Mitte der Platine unter dem D1-Schriftzug ist die Power On- LED.
- die obere Buchsenleiste liefert die Digital Ein/Ausgänge 0 bis 11, die vielseitig verwendet und mehrfach beschriftet sind.
Pinbelegung:
Pin | Function | ESP-8266 Pin |
---|---|---|
TX | TXD | TXD |
RX | RXD | RXD |
A0 | Analog input, max 3.3V input | A0 |
D0 | IO | GPIO16 |
D1 | IO, SCL | GPIO5 |
D2 | IO, SDA | GPIO4 |
D3 | IO, 10k Pull-up | GPIO0 |
D4 | IO, 10k Pull-up, BUILTIN_LED | GPIO2 |
D5 | IO, SCK | GPIO14 |
D6 | IO, MISO | GPIO12 |
D7 | IO, MOSI | GPIO13 |
D8 | IO, 10k Pull-down, SS | GPIO15 |
G | Ground | GND |
5V | 5V | - |
3V3 | 3.3V | 3.3V |
RST | Reset | RST |
Außer D0 haben alle Pins PWM- und Interrupt-Support.
Von den mechanischen Maßen her sollten Arduino-Uno-Header-Boards (sogenannte Shields) auf den ESP8266-D1 passen. Man hat sich sogar bei der Belegung der Pins Mühe gegeben, dass diese kompatibel sind. Die Analog-In-Ports liegen weiterhin unten rechts, allerdings hat der ESP8266 nur einen einzigen Analog-In-Port namens A0; der Rest ist einfach freigeblieben.
Und auch die Spannungsversorgungspins mit GND, 3.3V und 5V liegen an der richtigen Stelle. Hier muss man allerdings beachten, dass der ESP8266 auf 3.3V und nicht wie der Arduino auf 5V ausgelegt ist. Die 5V Schiene sollte also beim ESP8266-D1 ungenutzt bleiben.
Bei den digitalen Pins herrscht auch weitgehende Kompatiblität: das serielle Transmit (TX) und Receive (RX) sind an gleicher Stelle. Allerdings sind beim ESP8266-D1 die I2C-Pins ganz oben links auf D14 und D15 und nicht auf den Arduino-typischen A4/A5-Pins, die gegenüber, ganz unten rechts liegen würden, wären denn mehr als als Analog-In-Port vorhanden.
Die meisten Arduino-Uno-Header-Boards sollte man aber benutzen können, muss aber gegebenenfalls den Code dafür anpassen und auch auf ausschließliche Verwendung von 3.3V Bauteilen achten bzw. entsprechende Spannungsteiler-Schaltungen oder Logic Level Converter einsetzen.
Das ESP-12F-Modul
Das Modul ESP-12F beinhaltet außer dem Microcontroller ESP8266EX noch weitere Komponenten wie Sender und Empfänger, um WLAN zu realisieren. Diese stecken alle unter der Metallhaube, aus der eine LED, eine Antenne und die oben abgebildeten Pins herausgeführt sind.
Technische Daten im Vergleich zum ATmega 328P (Arduino Uno):
ATmega 328P | ESP-12F |
---|---|
|
|
Oder kurz zusammengefasst: Der ESP-12F hat gegenüber dem ATmega mehr Speicher für Programm und Variablen, ist schneller und hat WiFi. Nachteile: Nur einen einzigen Analog-Eingang und ein paar weniger GPIO-Ports. Und ganz so stromsparend wie der Arduino ist der ESP dann doch nicht.
Arduino IDE (Sketch) für ESP8266 einrichten
Den ESP8266 können wir in unserer gewohnte Entwicklungsumgebung, der Arduino IDE programmieren und hier auch gleich das Programm auf das Board hochladen.Das Wemos D1 Board verwendet für die serielle Kommunikation über den USB-Port einen CH340G-Chip. Der Treiber dafür ist leider nicht in Windows 7 vorhanden, so dass wir diesen separat downloaden (einfach nach "CH340G Driver Download" suchen) und installieren müssen. Wenn wir dann nach der Treiberinstalationen das Board per Mikro-USB an den PC anschließen, sollter dieser einen neuen COM-Anschluss zur Kommunikation mit dem Board bereitstellen.
Ist die Arduino IDE noch nicht installiert, bitte dieser Anleitung folgen. In der IDE öffnen wir dann unter Datei/Voreinstellungen die Voreinstellungen
Hier fügen wir unter Zusätzliche Boardverwalter-URLs folgende URL ein: http:/
Dadurch kann die IDE auch die esp8266-Boards finden, die wir dann im Menü unter Werkzeuge/Boards/Boardverwalter... abrufen können:
Wir wählen das Modul esp8266 by ESP8266 Community aus und installieren es. Nach Download und Installation stehen uns dann eine Reihe von ESP8266-Boards unter Werkzeuge/Boards... zur Verfügung (siehe rechts). Der richtige Eintrag für das Wemod D1 Board ist - wer hätte es erraten - WeMos D1 R1. Wählen wir es aus.
Im Werkzeuge-Menü können wir das Feintuning für das Board vornehmen. Hier können die Standardeinstellungen beibehalten werden.
Allerdings müssen wir noch den Port auswählen, den uns die Treiberinstallation vorhin genannt hat. Ist kein Port in der Auswahlliste vorhanden, dann kann es helfen, den USB-Port am PC zu wechseln.
Unter Datei / Beispiele / Beispiele für WeMos D1 R1 finden sich viele ESP8266-spezifische Beispiele, die zeigen, wir man das Netzwerk und WLAN des ESP nutzen kann. Etwa für einen Web-Server oder einen NTP-Client, um sich die Zeit übers Internet zu besorgen.
Aber auch Standard-Programme laufen.
Wir wählen unter Beispiele / Basic ein ganz einfaches, die Blink-Demo aus.
// the setup function runs once when you press reset or power the board
void setup() {
// initialize digital pin LED_BUILTIN as an output.
pinMode(LED_BUILTIN, OUTPUT);
}
// the loop function runs over and over again forever
void loop() {
digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second
digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW
delay(1000); // wait for a second
}
Wie gehabt mit Sketch/Hochladen (STRG+U) können wir das Programm nun auf den ESP8266 hochladen. Bei einem sehr gut abgeschirmten USB-Kabel und viel Glück könnte das Hochladen auf Anhieb funktionieren. Wahrscheinlicher ist aber die folgende Ausgabe:
Build-Optionen wurden verändert, alles wird neu kompiliert
Archiving built core (caching) in: C:\Users\admin\AppData\Local\Temp\arduino_cache_56923\core\core_esp8266_esp8266_d1_CpuFrequency_80, VTable_flash,FlashSize_4M1M, LwIPVariant_v2mss536,Debug_Disabled,DebugLevel_None____,FlashErase_none,UploadSpeed_921600_cf197a8212cc1f844612ec11bf5dcdfd.a
Der Sketch verwendet 247940 Bytes (23%) des Programmspeicherplatzes. Das Maximum sind 1044464 Bytes.
Globale Variablen verwenden 28028 Bytes (34%) des dynamischen Speichers, 53892 Bytes für lokale Variablen verbleiben. Das Maximum sind 81920 Bytes.
warning: espcomm_sync failed
error: espcomm_open failed
error: espcomm_upload_mem failed
error: espcomm_upload_mem failed
Die Fehlermeldung bedeutet, dass die Kommunikation mit dem ESP fehl schlug, weil sie einfach zu schnell für Kabel, PC oder ESP war. Einfache Abhilfe schafft die Option Upload-Speed unter Werkzeuge. Mit 115200 baud sollte es dann klappen, was eine schnell blinkende blaue LED auf dem ESP-Modul während des Hochladens anzeigt. Wenn es nicht klappt, muss die Baudrate noch weiter erniedrigt werden. Bei einem guten Kabel kann man auch mehr wagen. Bei einem erfolgreichen Upload sieht die Meldung dann so aus:
Build-Optionen wurden verändert, alles wird neu kompiliert
Archiving built core (caching) in: C:\Users\admin\AppData\Local\Temp\arduino_cache_56923\core\core_esp8266_esp8266_d1_CpuFrequency_80,VTable_flash,FlashSize_4M1M,LwIPVariant_v2mss536,Debug_Disabled,DebugLevel_None____,FlashErase_none,UploadSpeed_115200_cf197a8212cc1f844612ec11bf5dcdfd.a
Der Sketch verwendet 247940 Bytes (23%) des Programmspeicherplatzes. Das Maximum sind 1044464 Bytes.
Globale Variablen verwenden 28028 Bytes (34%) des dynamischen Speichers, 53892 Bytes für lokale Variablen verbleiben. Das Maximum sind 81920 Bytes.
Uploading 252080 bytes from C:\Users\admin\AppData\Local\Temp\arduino_build_406139/Blink.ino.bin to flash at 0x00000000
................................................................................ [ 32% ]
................................................................................ [ 64% ]
................................................................................ [ 97% ]
....... [ 100% ]
und die blaue LED auf dem ESP-12F sollte das Blinken anfangen. Danach befindet sich das Programm "fest" im Speicher und wird nach jedem Einschalten oder Reset sofort ausgeführt.