Funk aus China Einer der höchstintegrierten WiFi-Chips der Branche

Der ESP8266-Controller der chinesischen Firma Espressif ist in zahlreiche MCU-Module eingegangen und heute wegen seiner WiFi-Eigenschaften oft Bestandteil von Entwicklungen. Wie mit einigen interessanten Ansätzen die Grenzen der bestehenden Systeme gesprengt werden können, zeigt dieser Beitrag.

Das ESP8266-SoC bietet eine vollständige und in sich geschlossene WiFi-Netzwerklösung. Es kann verwendet werden, um eine Anwendung direkt auszuführen oder WiFi-Netzwerkfunktionen einem anderen Anwendungsprozessor zur Verfügung zu stellen. Wenn der ESP8266 die Anwendung direkt ausführt, wird sie von einem externen Flash-Speicher aus gestartet. Ein integrierter Cache verbessert die Leistung des Systems in solchen Anwendungen.

Als WiFi-Adapter kann alternativ ein kabelloser Internetzugang für einen Anwendungsprozessor (Mikrocontroller) über ein einfaches serielles Interface (SPI/SDIO oder I2C/UART-Schnittstelle) hinzugefügt werden.

Der ESP8266 gehört zu den am meisten integrierten WiFi-Chips der Branche. Er integriert Antennenschalter, HF-Balun, Leistungsverstärker, rauscharme Empfangsverstärker, Filter, Power-Management-Modul. Dabei erfordert er minimale externe Beschaltung und die gesamte Lösung inklusive Frontend-Modul kann ein kompaktes Modul bilden. Der ESP8266 enthält zusätzlich zu den WiFi-Funktionen eine verbesserte Version des L106 Diamond-32-Bit-Prozessors von Tensilica [1] mit integriertem SRAM.

Der ESP8266 ist oft mit externen Sensoren und anderen anwendungsspezifischen Geräten über seine GPIOs verbunden. Technische Daten sind in der umfangreichen Dokumentation von Espressif zu finden [2].

Der ESP8266EX-Chip ist sicher im industriellen Umfeld sehr gut verarbeitbar – für den Maker oder technologisch weniger gut ausgerüsteten Prototypenbauer ist diese Bauform schwieriger zu handhaben.

Als Chip wird der ESP8266EX deshalb hauptsächlich von Modulherstellern oder Herstellern von Endprodukten eingesetzt. Für das Prototyping bedienen sich Entwickler in der Regel eines ESP8266 Modules. 

ModulBemerkungenFlashUSB-ChipExt. AntenneAnbieterPreis
ESP-12FKein Support vom Lieferanten4 MBohne-Banggood
€ 2,85
Adafruit HUZZAH ESP8266 BreakoutLua vorinstalliert4 MBohne-Adafruit
US$ 9,95
Adafruit Feather HUZZAH with ESP8266 WiFiLua vorinstalliert, 100 mA LiPo Charger4 MBCP2104-AdafruitUS$ 16,95
ESP8266-WiFi-ModuleModul zur Integration1 MBohne-SparkfunUS$ 6,95
SparkFun ESP8266 ThingOn-board-LiPo-Charger/Power Supply512 KBohneJaSparkfunUS$ 15,95
SparkFun WiFi Shield - ESP8266Arduino-Formfaktor512 KBohneJaSparkfunUS$ 14,95
SparkFun Blynk Board - ESP8266Lithium-Polymer-Battery-Charger, WS2812 LED, Si7021 Temperature and Humidity Sensor & I2C Header4 MBFT231XS-SparkfunUS$ 29,95

NodeMCU
ESP-12-Modul4 MBCH340G-Amazon€ 7,29
Wemos D1 miniESP-12S-Modul-Header für Erweiterungen4 MBCH340G-WemosUS$ 3,50
Wemos D1 mini ProHeader für Erweiterungen16 MBCP2104JaWemosUS$ 5,00
ESPduinoArduino-Formfaktor4 MBCH340G-SmartArduino€ 10,86
MOD-WIFI-ESP8266-DEVPADS für ext, Antenne & UEXT2 MBohne(Ja)Olimex€ 5,50
ESP-ADC DIL18-ModulModul zur Integration512 KBohneJaIn-Circuit€ 9,90
ESP-ADC SMDModul zur Integration512 KBohne-In-Circuit€ 9,90
LeduniaHeader für Erweiterungen 4 × WS2812, USB Typ A32 MBCP2104JaLedunia€ 33,00 (Kickstarter)

 

Tabelle 1: ESP826-Module in der Übersicht.

ESP8266-Module

Auf Basis des ESP8266EX ist nicht nur eine ganze Modulfamilie ESP-xx entstanden, deren aktuelles Mitglied ESP-13 ist, sondern eine Vielzahl von Modulen, die entweder auf dem ESP8266EX direkt oder einem der ESP-xx-Module aufbauen.

Tabelle 1 zeigt eine Übersicht über ESP8266 Module, ohne einen Anspruch auf Vollständigkeit zu erheben.

Die ESP8266-Module sind meistens Open-Source bezüglich Software und Hardware, so dass von einzelnen Modulen zahlreiche Nachbauten (Clones) auftauchen. Mit verschiedenen dieser Module habe ich in meinem Buch zu NodeMCU bereits gearbeitet [3]. Vergleichende Betrachtungen zu weiteren ESP8266-Clones sind in [4] und [5] zu finden.

Alle in Tabelle 1 aufgeführten Module haben das ESP8266EX als Controller gemeinsam. Auf einigen Modulen wird er als Chip direkt eingesetzt auf anderen meist als ESP-xx-Modul.

Damit sind aber die Gemeinsamkeiten bereits erschöpft. Der ESP8266 benötigt Flash-Memory als Programmspeicher und der wurde anfangs durch ein 4 Mbit Flash (256 KB) gebildet und teilweise später erhöht. Bei Einsatz eines ESP-12 oder ESP‑13 ist der Speicher durch das Modul auf 4 MB begrenzt. ESP8266-Module, die ohne ESP‑xx aufgebaut sind, haben die Begrenzung nicht und zeigen auch in einigen Fällen wesentlich mehr Flash-on-board.

Zur Programmierung und Kommunikation weist der ESP8266 neben der WiFi-Option auch ein serielles Interface auf. Einige ESP8266-Module haben ein UART-USB-Interface implementiert, wobei unterschiedliche Adapter (CP210x, CH340, FTDI) zum Einsatz kommen. Das ist bei der Installation des UART-USB-Treibers möglicherweise zu beachten. ESP8266-Module, die eher für die Integration in ein Anwender-Board gedacht sind, weisen dieses Interface gar nicht erst auf und müssen über einen externen UART-USB-Adapter betrieben werden.

Ein weiterer Punkt ist die verwendete Antenne für das WiFi-Modul. Die ESP-xx Module habe die WiFi-Antenne als geätzten Mäander auf dem Print.

Will man die Reichweite des ESP8266‑ Moduls erhöhen, weil es möglicherweise in ein Gehäuse eingebaut ist, dann kann bei einigen Modulen auch eine externe Antenne angeschlossen werden. Hierzu ist auf dem betreffenden Board eine sogenannte U.FL-Buchse installiert.

Über diese kann beispielsweise eine Klebeantenne oder über ein sogenanntes Pigtail eine RP-SMA Antenne angeschlossen werden (Bild 1). Diese externen Antennen versprechen etwas Antennengewinn und damit eine erhöhte Reichweite.

In der untersten Zeile von Tabelle 1 war schon einmal Ledunia eingetragen. Mit diesem ESP8266 Modul befasse ich mich noch.

Programmierung des ESP8266

Für die Programmierung der ESP8266 gibt es unterschiedliche Möglichkeiten. Neben den im Folgenden genannten Programmierumgebungen gibt es noch MicroPython, JavaScript, Java und Java Processing sowie Basic.

Von Espressif wird eine eigene Programmierumgebung (SDK) zur Verfügung gestellt, die eine Programmierung des ESP8266 in C unterstützt.

NodeMCU ist eine Open-Source-Entwicklungsumgebung, die die Skriptsprache Lua verwendet. Die implementierte Firmware ist ein Lua-Interpreter, der interaktive Programmierung unterstützt. Auf diese Weise kann mit wenigen Lua-Skriptzeilen ein IoT-Prototyp erstellt werden.

Der ESP8266 wird mittlerweile auch durch die Arduino-IDE unterstützt. Damit können in der weit verbreiteten Umgebung sogenannte Sketches mit den bekannten Arduino-Funktionen und -Bibliotheken geschrieben und direkt auf dem ESP8266 (ohne externen Mikrocontroller) ausgeführt werden. Der ESP8266 Arduino-Core umfasst Bibliotheken, um über WiFi mit TCP und UDP zu kommunizieren, HTTP-, mDNS-, SSDP- und DNS-Server einzurichten, OTA-Updates zu machen, einem Dateisystem im Flash-Speicher (SPIFFS) mit SD-Cards, Servos, SPI- und I2C-Interfaces.

Auf die Programmierung über die AT-Kommandos gehe ich hier nicht ein, denn diese benötigt einen externen Mikrocontroller zur Ansteuerung und dieser wiederum ist aus meiner Sicht ohnehin nicht erforderlich.

Sicher haben viele Maker mit dem einen oder anderen ESP8266-Modul bereits Erfahrungen sammeln können. Ich habe vor allem mit NodeMCU, aber auch mit den in Tabelle 1 grau hinterlegten ESP8266- Modulen über die Programmierung in Lua Erfahrungen sammeln können [3].

Ein ständiges Problem war, dass der zur Verfügung stehende Speicher (RAM, Heap) schnell an seine Grenzen geriet. Durch eine auf die konkrete Anwendung zugeschnittene Firmware (https://nodemcu-build.com/) konnte der Speicherbedarf reduziert werden. Eine weitere Möglichkeiten bestand in der Segmentierung des Anwendungsprogramms in mehrere Lua-Scripts, die im Flash abgelegt, sich gegenseitig aufrufen.

Programmiert man die ESP8266-Module hingegen in der Arduino-IDE, dann kann man String-Objekte und Zeichenketten, die normalerweise im RAM liegen, im Flash ablegen, größere Datenmengen (Buffer etc.) global deklarieren, um den Stack zu entlasten, und das Dateisystem im Flash (SPIFFS) zum Auslagern von Daten wie Webseiten et cetera nutzen.

Die Implementierung des Dateisystems für den ESP8266 musste die Beschränkungen des Chips durch sein beschränktes RAM berücksichtigen. SPIFFS wurde ausgewählt, weil es für kleine Systeme konzipiert ist, was aber einige Vereinfachungen und Einschränkungen nach sich zieht (https://github.com/esp8266/Arduino/blob/master/doc/filesystem.rst).

BoardArduino UnoArduino M0Arduino DueLedunia
CPUATmega328ATSAMD21G18 (Cortex-M0+)AT91SAM3X8 (Cortex-M3)ESP8266EX
Taktfrequenz16 MHz48 MHz84 MHz80 MHz
Runtime18267 ms5180 ms3451 ms2189 ms
IO-Periode11,60 µs3,24 µs4,32 µs5 µs
I/O-Frequenz86,21 kHz308,6 kHz203,3 kHz200 kHz

 

Tabelle 2: Benchmark-Ergebnisse.

Ledunia

Wie bereits aus Tabelle 1 ersichtlich wurde, ist die Ausstattung von Ledunia gegenüber den anderen gelisteten ESP8266-Modulen als sehr komfortabel anzusehen.

Ledunia bezeichnet also ein sehr leistungsfähiges Entwicklungsboard für das IoT auf Basis des ESP8266. Die Entwicklung von Ledunia wurde über eine erfolgreiche Kickstarter Kampagne finanziell unterstützt.

Durch den erfolgreichen Abschluss der Kickstarter Kampagne konnte das Projekt in die Umsetzung gehen und Ledunia als leistungsstärkstes Mitglied in der ESP8266- Modulfamilie platzieren.

Mit einer Ausstattung mit 32 MB Flash-Speicher ist es möglich, ein Dateisystem zu installieren und dort umfangreichere Datenmengen, Webseiten, Stringobjekte und vieles mehr auszulagern. Auf der Flash-Seite wird der Speicher keiner Beschränkung mehr unterliegen.

Auf der Oberseite des Prints sind zwei Buchsenleisten für Erweiterungsboards vorgesehen. Sensor-Shields und andere werden von Ledunia folgen.

Eine U.FL-Antennenbuchse erlaubt den Anschluss einer externen WiFi-Antenne zur Vergrößerung der Reichweite.

Der bei anderen ESP8266-Modulen der Kommunikation und Spannungsversorgung dienende microUSB-Anschluss wurde durch einen USB-Anschluss Typ A ersetzt, um Ledunia direkt am PC kontaktieren zu können. Mit den vier RGB-LEDs (WS2812) kann Ledunia direkt am PC auch zu Signalisationszwecken eingesetzt werden.

Für Ledunia kann ein Gehäuse über 3D-Druck erstellt werden. Hierzu wird auf der Website ledunia.de eine STL-Datei bereitgestellt.

Hat man selbst keine Möglichkeiten zum 3D-Druck, dann hilft sicher das nächstgelegene FabLab weiter.

Die Installation in der Arduino-IDE ist auf der Ledunia-Website im Detail beschrieben. Hier ist ein einfaches Programmbeispiel LeduniaTest.ino gezeigt, das die erfolgreiche Inbetriebnahme zeigt.

In meinem Beitrag zu 32-Bit-Arduinos [8] hatte ich verschiedene auf Cortex-M0+/-M3/-M4 basierende Arduinos vergleichend betrachtet und zwei einfachen Benchmarks unterzogen.

Die CPU-Performance war mit dem »Sieve of Eratosthenes« untersucht worden und zur Messung des Schaltverhaltens der digitalen IO wurde eine Pulssequenz in einer Endlosschleife erzeugt, die dann vermessen werden konnte. Beide Programme können von Github (https://github.com/ckuehnel/ESP8266/tree/master/IoT%20Node) heruntergeladen werden.

Hier wurde nun Ledunia ebenfalls diesen Benchmarks unterzogen. Tabelle 2 zeigt die Benchmark-Ergebnisse für verschiedene Arduinos im Vergleich zu Ledunia, als einem Arduino auf Basis des ESP8266. Aus diesen Ergebnissen wird deutlich, dass die auf ESP8266 basierenden Arduinos und damit auch Ledunia sich hinter den cortexbasierten Arduinos nicht verstecken müssen.

Schlussbemerkung

Die intelligente Analyse bestehender ESP8266-Module hat einen Ansatz geliefert, den verbreiteten ESP8266-Modulen eine Ergänzung beizustellen, die bestehende Beschränkungen aufhebt und neue Merkmale hinzufügt. Dieser Ansatz hat die Teilnehmer der Kickstarter-Kampagne überzeugt und diese zu einem erfolgreichen Abschluss geführt.

Wichtig für den Einsatz einer solchen Baugruppe sind neben der starken Arduino Community auch direkte Ansprechpartner, die bei einem hierzulande entwickelten Produkt vorhanden sind. Die in Tabelle 1 gelisteten Preise beinhalten keine Lieferkosten und Zollabgaben, was beim Preisvergleich Berücksichtigung finden muss. Die vorliegenden Zertifizierungen (CE, FCC) für Ledu-nia bieten darüber hinaus Sicherheit beim Einsatz der Baugruppen.

Referenzen


Tensilica Unveils Diamond Standard 106Micro Processor; Smallest Licensable 32-bit Core. https://ip.cadence.com/news/243/330/Tensilica-Unveils-Diamond-Standard-106Micro-Processor-Smallest-Licensable-32-bit-Core

Espressif ESP Documentation. http://espressif.com/en/support/explore/get-started/document-map/esp8266

Kühnel, C.: Building an IoT Node for less than 15 $: NodeMCU & ESP8266. ISBN 978-3-907857-30-4 (Paper), ISBN 978-3-907857-31-1 (eBook)

ESP8266 module comparison: ESP-01, ESP-05, ESP-12, ESP-201, Test Board and NodeMCU. https://blog.squix.org/2015/03/esp8266-module-comparison-esp-01-esp-05.html

Comparison of ESP8266 NodeMCU development boards. https://frightanic.com/iot/comparison-of-esp8266-nodemcu-development-boards/

Arduino core for ESP8266 WiFi chip. https://github.com/esp8266/Arduino

ESP8266 Arduino Core’s documentation. http://arduino-esp8266.readthedocs.io/en/latest/index.html

Arduino32: Die jungen Wilden (Teil 2). DESIGN&ELEKTRONIK 06/2016 S.14-17, http://www.elektroniknet.de/embedded/arduino32-die-jungen-wilden-131502.html

Dr.-Ing. Claus Kühnel 

studierte und promovierte an der Technischen Universität Dresden auf dem Gebiet der Informationselektronik und bildete sich später in Biomedizintechnik weiter. Bis zu seiner Pensionierung 2016 war er bei der QIAGEN Instruments AG in Hombrechtikon (CH) als Director Electronic Engineering & Embedded Systems für die Entwicklung von Elektronik-Hardware und hardwarenaher Software verantwortlich. Aktuell arbeitet er als Consultant und weiterhin als Autor. Kontakt: info@ckuehnel.ch, https://www.linkedin.com/in/ckuehnel, https://www.xing.com/profile/Claus_Kuehnel

Listing 1

/* Ledunia Test (c) Claus Kuehnel 2017-10-12 info@ckuehnel.ch */  // Uncomment your board  #define ESP8266_LED 5 // for Ledunia #define NodeMCU_LED D0 // for NodeMCU  #define LED ESP8266_LED // adapt it  ADC_MODE(ADC_VCC);  byte count = 0;  void setup() { pinMode(LED, OUTPUT); Serial.begin(115200); delay(4000); // waiting to start the monitor Serial.print(„Hi there, here is „); Serial.println(„Ledunia“); // for Ledunia // Serial.println(„NodeMCU“); // for NodeMCU Serial.print(„ESP8266 Chip ID: „); Serial.println(ESP.getChipId()); Serial.print(„Flash Chip ID: „); Serial.println(ESP.getFlashChipId()); Serial.print(„Flash available [KB]: „); Serial.println(ESP.getFlashChipSize()/1024); Serial.print(„Flash Chip Size [KB]: „); Serial.println(ESP.getFlashChipRealSize()/1024); 
Serial.print(„Flash frequency [MHz]: „); Serial.println(ESP.getFlashChipSpeed()/1000000); Serial.print(„Free Heap [KB]: „); Serial.println(ESP.getFreeHeap()/1024); Serial.print(„VCC [mV]: „); Serial.println(ESP.getVcc()); }  void loop() { Serial.print(„.“); count++; if (count == 25) { Serial.println(); count=0; } digitalWrite(LED, HIGH); delay(980); digitalWrite(LED, LOW); delay(20); }
 
Listing 1: Quelltext LeduniaTest.ino.