ESP32 - ESPDUINO-32 Ersteinrichtung

Genau wie der ATmega 328P des Arduino Uno oder der STM32 der Blue Pill ist der ESP32 ein Mikrocontroller. Der ESP32 ist Nachfolger des ESP8266.

Wie schon der ESP8266 kann der ESP32 ganz normal als Mikrocontroller programmiert werden, ähnlich wie der Arduino. Ja, selbst die Arduino Entwicklungsumgebung Sketch kann zum entwickeln und Programme hochladen verwendet werden.

Preislich liegt ein ESP 32 Entwicklungsboard (Espduino-32) fast gleichauf mit einem ESP 8266 Entwicklungsboard (WeMos D1), so dass sich der Kauf eines leistungsschwächeren ESP8266-Boards nicht mehr lohnt.

Der ESP32 ist noch leistungsfähiger als der ESP8266, wie folgender Vergleich zeigt:

ESP8266 (12F)ESP32 (Wroom32, (ESP32D0WDQ6))
  • 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
  • WLAN 802.11 b/g/n 2.4 GHz WPA/WPA2 mit SmartLink Android/IOS, FCC zertifiziert
  • 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
  • 32 bit Microcontroller von 2016
  • 3.3V
  • RISC Befehlssatz
  • 160...240 MHz Mhz Takt
  • 4 MB SPI Flash, 448 KB ROM, 520 KB SRAM, 16 KB SRAM in RT, 1 Kbit of eFuse
  • 1280 KiB RAM Programmspeicher, 320 KiB RAM Variablenspeicher (lt. Arduino IDE)
  • 34 × programmable GPIOs, 12-bit SAR ADC up to 18 channels, 2 × 8-bit DAC
  • unterstützt I2C (2x), SPI (4x), I2S (2x), UART (3x), CAN, SDIO, IRDA, PWM, GPIO, TCP/IP, SD card, SDIO, IR (8 Ch.)
  • WLAN 802.11 b/g/n 2.4 GHz WPA/WPA2 mit SmartLink Android/IOS, FCC zertifiziert (802.11n up to 150 Mbps)
  • Bluetooth v4.2 BR/EDR and BLE specification
  • On-chip Hall sensor
  • integrierte RT Clock
  • Touch Sensor on Pins
  • Cryptographic hardware acceleration: AES, SHA-2 (Hash), RSA, Error-Correcting Code (ECC), Random Number Generator (RNG)
  • Chip-ID (6 Bytes)
  • Stromverbrauch (all typ.): Wifi Transmit 802.11b: 240mA, 802.11g: 190mA, Receive 95...110mA;
    BT Transmit: 130mA, Receive: 95...110mA
    Modem sleep, active: 240Mhz: 30...68mA, 160Mhz: 27...44mA, 80Mhz: 20...31mA
    Light sleep: 0.8mA, Deep sleep: 10...150µA, Hibernation: 5µA, Power off: 0.1µA

Espressif, der Hersteller der ESP-Chips, ist eine chinesische Firma und so bekommt man die Boards am besten direkt aus China, was allerdings immer Lieferzeiten von 3 bis 6 Wochen mit sich bringt, will man nicht Unmengen an Geld fürs Porto investieren. Mittlerweile bekommt man aber auch von deutschen oder europäischen Händlern die gängigsten Module.

Auch wenn ein ESP32 so ziemlich alles kann, muss er für ein Projekt nicht die erste Wahl sein. Er ist mindestens doppelt so teuer wie eine Blue Pill, aber auch wenn es nicht auf das Geld ankommt, so verbraucht er doch mehr Strom. Evtl. ist bei Dauerlaufprojekte selbst ein schwachbrüstiger ATtiny die beste Option.

Falls man den Raspberry Pi nur wegen des vorhandenen WLANs gewählt hätte, kann man hier viel Geld sparen. Mit dem ESP32 lassen sich kostengünstig alle möglichen Internet-Of-Things (IOT) Anwendungen realisieren.

Bei den ESP32-Board ist ein Trend beobachtbar. Es gibt nicht wie beim Ardunio "nur" ein Nano, Mini und Uno-Board, sondern man beginnt, sinnvolle Peripherie bereits auf der Platine zu integrieren, z. B. ein OLED-Display oder ein LoRaWAN (Long Range Wide Area Network) - Chip und Antenne. So spart man sich die Anschlussarbeit und bekommt ein besonders kompaktes Ergebnis. Der Nachteil: man sollte schon vorher wissen, welches Projekt man angeht und was man dafür braucht, sonst hat man für etwas bezahlt, was man am Ende gar nicht braucht und einem Anschlussmöglichkeiten raubt.

Sozusagen in guter alter Tradition gibt es auch ein ESP32-Board im Uno (Arduino) bzw. Wemos D1 (ESP8266) Format. 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. Anhand dieses "ESP32-Unos" als Beispiel, meine Version wurde vom Hersteller "ESPDuino-32" getauft, will ich die Einrichtung zur Verwendung der altbekannten Arduino-IDE erklären.

Die Hardware des ESP32-Boards ESPDuino-32


Das Board ist ähnlich dem eines ESP8266 bzw. Arduino Uno und schnell erklärt: Stets im Hinterkopf sollte man behalten, dass der ESP-32 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:

Das Pinout ist direkt neben die Pins in weiß aufgedruckt. Das Pinout wurde kompatibel zum Arduino Uno gehalten. So sind an der gleichen Stelle / dem gleichen Pin: Das bedeutet, dass man die Shields für Arduino Uno auch für dieses Board benutzen kann. Natürlich muss die Firmware an die ESP32-Umgebung angepasst werden.

Der ESP32 hat viel mehr Leitungen als der Arduino. Darum können nicht alle an den Uno-Headern herausgeführt sein. Darum befinden sich noch weitere Lötlöcher auf der Platine, an denen man ggf. auf weitere Pins zugreifen kann, wenn man hier Header oder Leitungen direkt anlötet.

Arduino IDE (Sketch) für das ESPDuino-32 Board einrichten

Den ESP32 können wir in unserer gewohnte Entwicklungsumgebung, der Arduino IDE programmieren und hier auch gleich das Programm auf das Board hochladen.

Das ESPDuino-3 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 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: https://dl.espressif.com/dl/package_esp32_index.json.

Dadurch kann die IDE auch die esp8266-Boards finden, die wir dann im Menü unter Werkzeuge/Boards/Boardverwalter... abrufen können, sollten noch keine ESP32-Board in der Dropdownliste stehtn:



Darauf erscheint eine sehr lange Liste mit allen möglichen ESP32-Boards:

Wir wählen das Modul esp32 by Espressif Systems aus und installieren es. Nach Download und Installation stehen uns dann eine Reihe von ESP32-Boards unter Werkzeuge/Boards... zur Verfügung.

Jetzt müssen wir nur noch das richtige Board finden. Das ist gar nicht so einfach. Vorweg: bei mir war das der Eintrag "Wemos D1 MINI ESP".

Um herauszufinden, welches Board das richtige ist, bin ich wie folgt vorgegangen:

Im Werkzeuge-Menü könnten wir das Feintuning für das Board vornehmen. Hier können die Standardeinstellungen aber 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 / ESP32 finden sich viele ESP32-spezifische Beispiele, die zeigen, wir man Deatures des ESP nutzen kann. Etwa für einen NTP-Client, um sich die Zeit übers Internet zu besorgen (ESP32/Time/SimpleTime).

Oder das Beispiel ESP32 / Touch / TouchRead, dass die Touch-Fähigkeiten des ESP32 aufzeigt. Dazu steckt man ein Jumperkabel in IO4 und jedesmal, wenn man es berührt, fällt der Wert ab. Hinweis: am besten ein delay(50); ans Ende der Loop-Funktion setzen.

Oder das Beispiel ESP32 / Hallsensor, dass die Hallsensor-Fähigkeiten des ESP32 aufzeigt. Dazu kommt man dem Gehäuse des ESP32 mit einem Magneten nahe. Auf dem Serial Monitor oder Serial Plotter kann man dann beobachten, wie sich die Werte ändern. Der Sensor ist allerdins nicht sehr empfindlich und nicht mit einem Magnetometer vergleichbar. Hinweis: am besten ein delay(10); ans Ende der Loop-Funktion setzen.

So kann man sich mit den Fähigkeiten des ESP32 vertraut machen und gleichzeitig die Hardware testen (bzw. ob man das richtige Board in Werkzeuge gewählt hat).

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 ESP32 hochladen. Dann sollte ungefähr das Folgende im Statusfenster zu lesen sein. "C:\\Users\\admin\\AppData\\Local\\Arduino15\\packages\\esp32\\tools\\xtensa-esp32-elf-gcc\\1.22.0-80-g6c4433a-5.2.0/bin/xtensa-esp32-elf-size" -A "C:\\Users\\admin\\AppData\\Local\\Temp\\arduino_build_638143/sketch_feb27a.ino.elf" Der Sketch verwendet 207705 Bytes (15%) des Programmspeicherplatzes. Das Maximum sind 1310720 Bytes. Globale Variablen verwenden 15228 Bytes (4%) des dynamischen Speichers, 312452 Bytes für lokale Variablen verbleiben. Das Maximum sind 327680 Bytes. esptool.py v2.6 Serial port COM21 Connecting....... Chip is ESP32D0WDQ6 (revision 1) Features: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse, Coding Scheme None MAC: a4:cf:xx:xx:xx:xx Uploading stub... Running stub... Stub running... Changing baud rate to 921600 Changed. Configuring flash size... Auto-detected Flash size: 4MB Compressed 8192 bytes to 47... Writing at 0x0000e000... (100 %) Wrote 8192 bytes (47 compressed) at 0x0000e000 in 0.0 seconds (effective 16384.2 kbit/s)... Hash of data verified. Compressed 15856 bytes to 10276... Writing at 0x00001000... (100 %) Wrote 15856 bytes (10276 compressed) at 0x00001000 in 0.1 seconds (effective 953.7 kbit/s)... Hash of data verified. Compressed 207824 bytes to 105394... Writing at 0x00010000... (14 %) Writing at 0x00014000... (28 %) Writing at 0x00018000... (42 %) Writing at 0x0001c000... (57 %) Writing at 0x00020000... (71 %) Writing at 0x00024000... (85 %) Writing at 0x00028000... (100 %) Wrote 207824 bytes (105394 compressed) at 0x00010000 in 1.5 seconds (effective 1096.7 kbit/s)... Hash of data verified. Compressed 3072 bytes to 128... Writing at 0x00008000... (100 %) Wrote 3072 bytes (128 compressed) at 0x00008000 in 0.0 seconds (effective 6144.1 kbit/s)... Hash of data verified. Leaving... Hard resetting via RTS pin... und die blaue LED auf dem ESP-32-Board sollte das Blinken anfangen. Danach befindet sich das Programm "fest" im Speicher und wird nach jedem Einschalten oder Reset sofort ausgeführt.

Wie wir der Anzeige entnehmen können, bietet der ESP-32 richtig viel Programmspeicherplatt, über 1.2 MB. Damit kann man sich richtig austoben und schon so einiges anstellen. Nichts im Vergleich zu einem Raspberry Pi, aber für einen Mikrocontroller doch recht ordentlich.

Was mit einem ESP-32 machbar ist, zeigt der Odroid-Go sehr schön: eine mobile Spielekonsole mit Emulation von Gameboy über GameGear bis hin zum C64. Programmieren kann man den Odroid-Go natürlich auch, das Schöne: LCD, Lautsprecher, Steuerkreuz, Tasten: alles schon an Board. Und es sind 10 Pins herausgeführt, an denen man eigene ESP32-Projekte realisieren kann.