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: Stets im Hinterkopf sollte man behalten, dass der ESP-8266 mit max. 3.3 Volt arbeitet. Die 5V auf dem Board ist also nur zur Spannungsversorgung von Modulen. Am analogen und den digitalen Pins darf man mit höchstens 3.3V arbeiten!

Pinbelegung:

PinFunctionESP-8266 Pin
TXTXDTXD
RXRXDRXD
A0Analog input, max 3.3V inputA0
D0IOGPIO16
D1IO, SCLGPIO5
D2IO, SDAGPIO4
D3IO, 10k Pull-upGPIO0
D4IO, 10k Pull-up, BUILTIN_LEDGPIO2
D5IO, SCKGPIO14
D6IO, MISOGPIO12
D7IO, MOSIGPIO13
D8IO, 10k Pull-down, SSGPIO15
GGroundGND
5V5V-
3V33.3V3.3V
RSTResetRST

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 328PESP-12F
  • 8 bit Microcontroller
  • 5V
  • RISC Befehlssatz mit 131 Befehlen
  • 20 Mhz Takt / 1 MIPS per MHz
  • 32 KB Flash Programmspeicher
  • 2 KB SRAM Variablenspeicher
  • 1 KB EEPROM
  • 10K-100K Flash-Zyklen, Datenerhalt 100 Jahre bei 25°C (20 Jahre bei 85°C)
  • 6 Kanäle analog (A0-A5), 10 Bit AD-Wandler
  • 13 digitale GPIO-Kanäle
  • 2 interruptfähige GPIOs (2 und 3)
  • 7 PWM-fähige GPIOs (Pin 2, 3, 5, 6, 9, 10, 11)
  • unterstützt I2C, SPI, UART, PWM, GPIO
  • Stromverbrauch: 0.1 bis 0.75 µA im Power- Down/Save-Mode, 0.2 mA im Active-Mode
  • 32 bit Microcontroller
  • 3.3V
  • RISC Befehlssatz
  • 80-160 Mhz Takt
  • 1 MB Flash Programmspeicher
  • 81 KB RAM Variablenspeicher (lt. Arduino IDE)
  • 1 Kanal analog (A0), 10 Bit AD-Wandler
  • 11 digitale GPIO-Kanäle
  • alle GPIOs interruptfähig (bis auf ein paar Ausnahmen)
  • 4 PWM-fähige GPIOs (IO12, IO15, IO14, IO4)
  • unterstützt I2C, SPI, UART, SDIO, IRDA, PWM, GPIO, TCP/IP
  • Stromverbrauch: 0.01/0.9/15 mA im Deep/Light/Modem Sleep Power-Mode, < 1 mW im Standy-Mode, WLAN: 56/140 mA (RX/TX) bei 802.11g
  • WLAN 802.11 b/g/n 2.4 GHz WPA/WPA2 mit SmartLink Android/IOS, FCC zertifiziert

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://arduino.esp8266.com/versions/2.4.2/package_esp8266com_index.json.

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.