ESP8266 – Internet der Dinge für Bastler

Seit einiger Zeit ist der Chip ESP8266 von der Firma espressif auf dem Markt, welcher auf einfache und günstige Weise dem geneigten Bastler den Weg ins Internet der Dinge ebnet. In der Online-Community hat sich schnell ein Hype um dieses Low-Coast Modul gebildet, sodass es mittlerweile viele Informationen und Anleitungen gibt. In diesem Artikel möchte ich den ESP8266 und dazu ein Beispiel-Projekt vorstellen…

 

Schon vor einiger Zeit habe ich mir selbst zwei dieser Module besorgt. Nun endlich habe ich einmal die Zeit gefunden sie zu testen. Und was soll ich sagen – ich habe mich verliebt. Nie war es für Maker und Hacker einfacher Sensoren oder Aktoren ins WLAN einzubinden. In dem kleinen Modul (ca. 15 x 25 mm) steckt viel mehr als das unscheinbare Äußere vermuten lässt. Nach einem kleinen Überblick über das Modul werde ich eine Entwicklungsumgebung vorstellen. Ein Beispiel-Projekt zeigt eine erste Einführung in die Nutzung des Moduls. Am Schluss gibt es Aussicht auf  weitere Themen und zusätzliche Infos.

 

Die Hardware

Der ESP8266 kommt im QFN-32 Gehäuse, ist also erstmal nicht sehr Bastler freundlich. Und was ist mit der Antenne? Und dann noch der ganze analoge Kram. Das wird doch grässlich oder? – Falsch!

Zum einen benötigt  der ESP nicht viele externe Komponenten. Es braucht nur einen Oszillator (26Mhz), vier Kondensatoren, einen Widerstand und einen SPI-Flash Speicher. Auf Letzterem ist die Firmware des Chips für den WLAN-Betrieb gespeichert. Zum anderen gibt es eine Vielzahl von Modulen, die alles Wichtige zum Betrieb mitbringen. Sie sind leicht über eBay oder Amazon für ca. 5 € (deutlich billiger aus China) als Modul erhältlich. Die Module bringen in den meisten Versionen schon eine Antenne in Form eines Chips, oder als Leiterbahn-Ausführung mit. Zumindest ist immer ein Anschluss für eine Antenne vorgesehen. Hier können z.B. WLAN-Stummel-Antennen per Koax-Kabel angeschlossen werden.

 

Was macht das ganze nun so besonders?

Der Chip enthält nicht nur alles Notwendige um WLAN-Signale senden und empfangen zu können, sondern auch einen kleinen 32-Bit Prozessor – einen sogenanntes System on Chip (SoC). Dieser Prozessor macht die ganze Magie erst möglich und den ESP8266 so interessant. Er führt die im externen Flash abgelegte Firmware aus, welche einerseits für Verbindungen dient (WLAN,TCP/IP…) und andererseits ein Interface nach außen bereitstellt. Über dieses Interface, welches als serielle Schnittstelle bereit steht, können sogenannte AT-Kommandos gesendet werden. Damit steuert man die Verbindung zu Accesspoints, den Aufruf von Hosts oder das Behandeln von Clients. Somit lässt sich das Ganze also einfach über die UART eines Mikrocontrollers steuern und schon hängt z.B. ein Arduino im Netz.

Aber das kann ja nun auch noch nicht das Ende der Fahnenstange sein. Wenn man ein wirkliches Internet der Dinge möchte, kann nicht überall ein Arduino dran hängen. Aber zum Glück gibt es ja noch den Prozessor im ESP8266. Dieser bringt einige tolle Sachen mit: SPI, GPIOs, 10-Bit  ADC, I2C, PWM, UART etc. Und damit man das auch alles benutzen kann, ist es möglich, über einen Bootloader eigene Programme via UART einzuspielen. So kann dann eine kleine Modul-Platine ein ganzes eingebettetes System ersetzen. Und das bei minimaler Leistungsaufnahme. Je nach Modul stehen unterschiedliche Chip-Pins und somit auch unterschiedliche Funktionen nach außen über Pin-Header oder Lötpads zur Verfügung.

Auszug der Spezifikationen:

  • Läuft mit 80MHz
  • 64KB Instruction RAM
  • 96KB Data RAM
  • 64KB Boot ROM
  • RISC Architektur
  • Der Prozessor ist ein  106micro Diamond Standard Core (LX3) von Tensilica
  • 802.11 b/g/n Protokoll
  • Wi-Fi 2.4 GHz, WPA/WPA2
  • Integrierter TCP/IP Stack (zur Zeit nur ipv4)
  • Verbrauch im ‚Tiefschlaf-Modus‘ < 10uA
  • Integrierter low power 32-bit Prozessor
  • Aufwachen und Pakete übertragen in< 2ms
  • Standby Verbrauch < 1.0mW
  • Temperaturbereich -40°C ~ 125°C

Ein SDK wird vom Hersteller bereitgestellt. Dies erleichtert Entwicklern Programme für den Chip zu schreiben. Die Community ist auch schon fleißig am Werk. Einfach mal Google anwerfen. Man findet etliche Anleitungen, um eine Entwicklungsumgebung für den Prozessor aufzusetzen.

Doch seit kurzem geht es auch viel einfacher…

 

 

ESP8266 goes Arduino

Einige Tüftler haben die Arduino-IDE genommen, und sie für den ESP8266 angepasst. Das bedeutet, dass es nun möglich ist, wie gewohnt Sketches zu schreiben, und sie dann direkt auf einem ESP-Modul laufen zu lassen. Einfacher kann es nicht mehr sein, Dinge ans Netz zu bringen. Wie wäre es zum Beispiel mit einem Umweltsensor? Der DHT11 ist für solch einen ersten Versuch eine gute Idee. Er kann die Luftfeuchtigkeit und Temperatur messen. Das ist doch ein guter Anfang und günstig ist er auch. Zum Anschluss und Betrieb sind keine weiteren Komponenten notwendig. Um den ESP8266 einfach nur zu testen, ist der Sensor nicht notwendig. Allerdings entfällt dann der Abschnitt ‚Sensordaten Loggen‘ dieses Artikels.

 

Was man braucht

Hardware

  • USB<->Seriell Adapter
  • ESP8266 ESP-01 (Modul-Version 01)
  • DHT11 Luftfeuchtigkeits-/Temperatursensor (für Funktionstest nicht zwingend erforderlich)
  • 3,3V Spannungsversorgung
  • Labor-Steckbrett
  • 2×4 Buchsenleiste (präpariert, siehe unten)

Software

 

Aufbau der Hardware

Das Modul ESP-01 hat acht Pins zum Anschluss: zwei für Spannungsversorgung, zwei für UART, zwei GPIOs und zwei Konfigurations-Pins. Es wird eine Spannung von  3,3 V benötigt.  Ich habe hierfür ein kleines ‚Netzteil‘ für Labor-Steckbretter genommen. Aber jede Spannungsversorgung mit 3v3, >=250mA, DC sollte funktionieren. Die rote LED ist die Power-Anzeige. Die blaue LED ist mit dem TX-Pin verbunden, und blinkt, wenn der Chip Daten über die UART sendet. Außerdem ist zu beachten, dass die Pins nur 3,3 V vertragen. Dies ist bei der USB <-> Seriell Verbindung von Bedeutung. Also Level-Shifter benutzen! Ich habe es gewagt und mein Modul direkt angeschlossen. Kein Problem. Es funktioniert und hat keinen Schaden genommen. Dies liegt daran, dass vom Hersteller oft 3,6 V als Signalpegel für solche Adapter gewählt werden um mit 3,3 V und 5 V Chips kompatibel zu sein. Doch verlassen kann man sich darauf nicht.

Foto ESP-01 Modul mit Pin-Belegung

ESP-01 Modul mit Pin-Belegung

Die Testschaltung wird auf einem Steckbrett aufgebaut. Wichtig ist, dass der Chip-Power-Down-Pin (CH_PD) an der 3,3 V  Versorgungsspannung liegt, sonst ist der Chip ‚aus‘. Bei der Verbindung zum PC werden nur RX, TX und GND mit dem Modul verbunden. Die Spannungsversorgung muss extern erfolgen, da die USB <-> Seriell Adapter nicht genug Strom liefern können. Der DHT11 benötigt nur die 3,3 V Versorgungsspannung und eine Verbindung zu GPIO2 am Modul.  Wie bereits erwähnt, kann dieser für den Funktionstest weggelassen werden. Die Drahtbrücke von GPIO0 zu GND wird nur zum Programmieren benötigt. Mehr dazu weiter unten im Artikel. Um die ESP-Platine auf das Steckbrett zu bringen, habe ich eine doppelreihige Buchsenleiste so bearbeitet, dass jeder der acht Pins in einem eigenen Anschlussfeld liegt. Das Foto links im Bild zeigt diesen kleinen ‚Mod‘.

ESP8266 Test- und Programmieraufbau

ESP8266 Test- und Programmieraufbau

 

Die Hardware ist jetzt bereit zur Verwendung. Nun kann die Software in Betrieb genommen werden.

 

Die Entwicklungsumgebung

Nach dem Download (s.o.) wird das Programm entpackt und dann mit arduino.exe gestartet. Dort in der Software sind zunächst folgende Einstellungen vorzunehmen:

  • Werkzeuge->Platine->Generic ESP8266
  • Werkzeuge->Programmer->esptool
  • Werkzeuge->Port->[Port des USB <-> Seriell Adapter]

Außerdem sollte die DHT-Lib zu den Arduino-Libs hinzugefügt werden.  Sie wird später zum Betrieb des Sensors benötigt. (danach Neustart der IDE!)

Nun kann es losgehen. Unter Datei->Beispiele finden sich Beispiele für das ESP-Modul. Im Groben sind das die Funktionen der bekannten Klassen für das Arduino WiFi-Shield. Zum Test des Modules wird zunächst Datei->Beispiele->ESP8266WiFi->WiFiWebServer verwendet. Bei  const char* ssid = "your-ssid";  ist der Name des Netzwerkes einzutragen und bei  const char* password = "your-password";  der Netzwerkschlüssel. Schon ist der Sketch bereit zum hochladen. Er stellt einen kleinen Webserver im WLAN bereit, mit dem man über die Adresse http://IP.IP.IP.IP/gpio/0 bzw. den GPIO2 des Modules ein und aus schalten kann.

 

Programm hochladen

Zum Upload des Sketches muss zunächst der Bootloader des Chips gestartet werden. Dazu wird GPIO0 auf GND gelegt. Anschließend ist ein Reset oder Trennen der Versorgungsspannung notwendig. Liegt also GPIO0 beim Start des Chips auf GND, startet der Bootloader. Nun kann in der IDE auf Upload geklickt werden, und der Sketch wird übertragen. Nach der Übertragung startet der Sketch automatisch. Wenn das Modul später neu gestartet oder einen Reset ausgeführt wird, dann muss die Verbindung GND  -> GPIO0 wieder getrennt werden, da das Modul sonst im Bootloader hängen bleibt und den Sketch nicht ausführt.

 

Funktion testen

In der Arduino-IDE Werkzeuge->Serieller Monitor starten und auf 115200 Baud einstellen.  Wird das Modul nun gestartet sollte nach einigen kryptischen Zeichen (der Bootloader läuft mit einer anderen Baudrate) eine Verbindungs-Meldung erscheinen. Kurze Zeit später wird die IP angezeigt, welche das Modul erhalten hat. Ruft man nun http://IP.IP.IP.IP/gpio/0 bzw. 1 im Browser am PC (im selben Netzwerk) auf, sollte eine entsprechende Rückmeldung erscheinen. Auch der serielle Monitor sollte die Anfrage anzeigen.

Herzlichen Glückwunsch, das Modul ist online! Nun geht es weiter mit dem ersten Projekt.

 

 

Erstes Projekt: Sensordaten Loggen

Im ersten Projekt sollen die Daten des DHT11 an eine Server übertragen und dort gespeichert werden. Es wird also ein solcher Server benötigt. Weiterhin muss ein Sketch geschrieben werden, der die Aufgabe der Messdatenerfassung und den Versand an den Server erledigt.

 

Der Server

Der Einfachheit halber, weil es im Beispiel-Sketch verwendet wird und weil es jedem zugänglich ist, verwende ich den Danten-Logg-Service von sparkfun.com. Dieser Shop für Hacker und Maker (Ups. Schleichwerbung?) bietet den Service frei und kostenlos an. Also einfach ein Konto erstellen. Als Felder für den Daten-Stream sollten humidity und temp hinzugefügt werden. Später wichtig für den Sketch sind der public_key und der private_key, welche man nach der Anmeldung per Mail zugesandt bekommt. Der Stream ist unter https://data.sparkfun.com/[public_key] abrufbar. Die erfassten Daten lassen sich in vielen Formaten wie z.B. CSV, JSON, MySQL exportieren. Die Maximalgröße eines Streams beträgt 50 MB. Danach werden die ältesten Werte überschrieben. Zum Testen sollte das soweit genügen. Wer sich mit PHP und MySQL auskennt, wird sich sicherlich auch selbst schnell etwas basteln können. Weiterhin ist der verwendete Logging-Service von Sparkfun namens ‚Phant‘ auch auf GitHub veröffentlicht, sodass man ihn auf eigenen Serven installieren kann.

 

Das Programm

Für dieses erste Projekt dient Datei->Beispiele->ESP8266WiFi->WiFiClient als Grundgerüst. Hier wird eine Verbindung zu einem WLAN hergestellt. Dann werden in einem definierten Intervall Daten als URL an einen Server gesendet. Die UART gibt wieder entsprechende Rückmeldungen. Aber dies ist wie gesagt nur das Grundgerüst für den unten gezeigten Sketch.

Dort wird zunächst noch zusätzlich die Lib für den Sensor eingebunden und mit Pin und Sensortyp initialisiert. Die Funktuion  long getDec(float val);  wandelt den Dezimalteil einer Fließkommazahl in eine ganzzahligen Wert um und wird später, beim Umwandeln der Sensordaten in einen String, verwendet. Im obligatorischen Setup bleibt bis auf den zusätzlichen Aufruf von  dht.begin();   im Prinzip alles beim Alten.

Im eigentlichen Programm-Loop sorgt delay(60000);  zunächst für eine Verzögerung von einer Minute (60000 ms). Die Messdaten werden also einmal pro Minute geloggt. Ist die Zeit abgelaufen, werden die Daten vom Sensor eingelesen und in Strings umgewandelt. Anschließend folgt die Verbindung zum Server auf Port 80 (HTTP) mit  if(!client.connect("data.sparkfun.com",80)) . Schlägt die Verbindung fehl, bricht die Ausführung ab und es wird wieder eine Minute bis zum nächsten Versuch gewartet. Bei Erfolg wird die URL mit den Messdaten gebildet und am Server aufgerufen:

Die Antwort des Servers wird über die UART ausgegeben. Am Ende, beim Verlassen der Loop, wird das client-Objekt zerstört, und die Verbindung zum Server somit getrennt. Nach einer Minute beginnt das ganze von vorn.

Zur eigenen Verwendung im Setup den Namen und das Passwort des eigenen WLAN eintragen und im String ‚url‘ noch public_key und private_key einfügen. Schon kann es losgehen.

Dies ist bereits der ganze Zauber zum Loggen von Sensordaten. Viel Spaß damit!

Natürlich handelt es sich hierbei noch nicht um einen ausgereiften Sensor-Knoten. Weder Hardware noch Software sind dafür optimal. Hier eine Auflistung des Verbesserungs-Potentials:

  • Die Spannungsversorgung sollte unabhängig sein.
  • Der ESP8266 verbraucht im Leerlauf noch zu viel Strom.
  • Die Server-Antwort wird nicht ausgewertet.
  • Was passiert wenn die Daten nicht übertragen werden konnten?
  • Die UART wird nicht benötigt wenn der Sensor irgendwo im Raum hängt. Pins frei als GPIO.

Mit diesen und anderen Anforderungen/Problemen werde ich mich in einem weiteren Artikel beschäftigen.

 

 

Aussichten

Ich habe schon einige andere kleine Projekte mit dem ESP8266 zusammengebastelt und werde mich auch noch weiter damit beschäftigen. Es wird also noch weitere Artikel zu diesem Thema geben. Eine kleine Serie sozusagen. Im Folgenden schon einmal eine kurze Vorschau.

Deep Sleep Mode

Der ‚Deep Sleep Mode‘ des ESP8266 erlaubt es, den Chip in einen sehr stromsparenden Schlafzustand zu versetzen. Ideal für Batterie betriebene Sensoren. Ich habe den Sensor aus diesem Artikel mit einem Akku und einer Ladeschaltung versehen und den Modus getestet. Darüber werde ich in einem weiteren Artikel berichten. Die oben genannten Punkte zur Verbesserung werde ich dort auch behandeln.

One-Day-Build: Netzwerksteckdose

Während der Osterfeiertage habe ich mich mit ein paar alten Freunden getroffen. Auf die guten alten Zeiten haben wir viel Nerd-Kram gemacht. So entstand dann als One-Day-Build Projekt eine Netzwerksteckdose auf Basis des ESP8266 aus Dingen, die wir in meiner Bastelkiste fanden. Über diesen Tag mit Bier und Lötkolben werde ich demnächst in einem Beitrag detailliert mit Anleitung schreiben.

IDE up to date

Das Arduino-ESP8266 Projekt befindet sich noch in der Entwicklung und Änderungen/Erweiterungen sind an der Tagesordnung. Um immer die neusten Funktionen/SDK/Patches in der Entwicklungsumgebung zu haben, kann man die angepasste IDE auch selbst compilieren. Da ich feststellen musste, dass die fertigen Downloads nicht regelmäßig ein Update bekommen, möchte ich mir die IDE selbst compilieren können. Wie der Versuch endet, wird hier verkündet werden.

Entwicklungsumgebung/VM

Arduino ist natürlich nicht alles und eher die Wachsmaler-Methode im Umgang mit den ESP-Modulen. Dies wird bereits im Deep Sleep Mode Beitrag deutlich werden. Ich werde mir in naher Zukunft eine Entwicklungsumgebung (wahrscheinlich in einer virtuellen Maschine) aufsetzen um direkt mit dem SDK zu arbeiten. Auch die Erfahrungen dieses Vorhabens werde ich hier teilen.

 Sensornetz

Mir schwebt ein automatisiertes Netzwerk von Sensor-/Aktor-Knoten vor. Die einzelnen Knoten sollen sich automatisch mit einem Accesspoint/Routrer/ESP8266 verbinden über welchen sie ansprechbar sind. So sind alle Knoten über einen Host/Server unter Kontrolle. Der Server soll die Sensortypen kennen und je nach angemeldeten Knoten deren Optionen und Daten anzeigen. Eine automatische Aufbereitung der Daten in Graphen, Tabellen, etc. sollte vorhanden sein. Die Heimautomatisierung lässt grüßen! Dies ist aber noch Zukunftsmusik. Mal sehen wie weit ich mit diesen Plänen komme und was sich umsetzen lässt. Auf jeden Fall werde ich hier berichten.

…und viele weitere Ideen und Pläne…

 

Weitere Informationen

GitHub ESP8266-Arduino IDE – Hier gibt es die Linux/Mac Version und weitere Informationen zu den Funktionen.

ESP8266 Wiki 1 – Pinouts, SDK-Infos, Übersicht der Module etc.

ESP8266 Wiki 2 – Gleiche und weitere Infos wie in Wiki 1.

ESP8266 Community – Ein Forum rund um den ESP8266.

Mikrocontroller.net – ESP8266 – Zusammengetragene Informationen.

Hackaday.com – Viele Artikel zum Thema ESP8622. Stöbern lohnt sich.

flow

Florian studiert Informations-Systemtechnik und arbeitet seit einigen Jahren in einer Elektronik-Werkstatt eines Institutes. Er interessiert sich für Elektrotechnik und Informatik, Making und Hacking, 3D-Druck, Geocaching, Brettspiele und vieles vieles mehr...

Das könnte dich auch interessieren...

4 Antworten

  1. Pitmaster sagt:

    Hallo Flow, habe deinen Artikel mit großem Interesse gelesen. Ich wollte mir ein WLAN Thermometer auf Andruinobasis zusammenstellen, finde aber deine Lösung besser. Da ich das ganze später Batteriebetrieben brauche würde ich mich über deinen zweiten Artikel „DeepSleepMode“ sehr freuen. Gruß Wolfgang

  2. flow sagt:

    Hallo Wolfgang,
    leider kann ich die Serie nicht wie geplant fortsetzen, da es mir an Zeit mangelt. Hier aber in Kürze:

    ACHTUNG! Es ist eine Modifikation am Modul notwendig. XPD muss mit RST verbunden werden, damit der Chip wieder aufwacht. Hierzu folgender Link: https://github.com/iLLiac4/ESP8266-DHT11

    Um wirklich stromsparend zu sein, sollten die LEDs von der Platine entfernt werden (~8 mA Stromaufnahme). So Kommt man dann auf ~70 µA im Sleep-Mode.

    Ich hoffe die knappe Antwort hilft dir weiter.
    Grüße,
    Flow

  3. Anonymous sagt:

    Hallo Flow,
    danke für die kurze aber hilfreiche Antwort. Vieleicht hast du ja demnächst mal wieder etwas Zeit deinen Blog fortzuführen.

    Bis dahin, Wolfgang

  4. Hans sagt:

    Hallo Flow, vielen Dank für den super Artikel!
    Hat mir sehr weitergeholfen. Würde mich sehr freuen über weitere Artikel über den ESP8266.
    Gruss

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.