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 mini), so dass sich der Kauf eines leistungsschwächeren ESP8266-Boards fast nicht mehr lohnt.
Der ESP32 ist noch leistungsfähiger als der ESP8266, wie folgender Vergleich zeigt:
ESP8266 (12F) | ESP32 (Wroom32, (ESP32D0WDQ6)) |
---|---|
|
|
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 8 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:
- 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 "old school" USB-A-Buchse.
- unten links die schwarze Buchse (DC) 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 neben der Strombuchse sitzen die Spannungswandler, die auf die Buchsenleite unten links 3.3V und 5V sowie Masse bereitstellen.
- rechts daneben die 6 Analogeingänge (max. 3.3V)
- darüber das WROOM-32 Modul, das Herz der Platine. In dem silbernen Kästchen ist alles Nötige für WLAN integriert. Rechts daneben die Schlangenlinien ist die WLAN-Antenne. Links oberhalb befinden sich die Power-LED (bei mir rot) und eine kleine programmierbare LED (bei mir blau).
- die obere Buchsenleiste liefert die Digital Ein/Ausgänge, die vielseitig verwendet und mehrfach beschriftet sind.
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:
- alle GND, 3.3V und 5V Stromanschlüsse
- RX und TX für die ser. Schnittstelle
- SCL and SDA für den I2C Bus
- Reset-Leitung im Stromversorgungs-Block
- Analog-Eingänge, wenn auch mit unterschiedlichen Bezeichnungen
- Digital-Eingänge, wenn auch mit unterschiedlichen Bezeichnungen
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-32 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:/
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:
- Das Beispiel LEDC Software Fade unter Datei / Beispiele / ESP32 / Analog Out auswählen
- Das Beispiel wie in Zeile 23 rechts abändern: #define LED_PIN LED_BUILTIN
- Ein vielversprechendes Board unter Werkzeuge auswählen
- Bei Komplilierungfehler wegen LED_BUILTIN das Board wechseln, Vorgang wiederholen
- Leuchtet die LED auf dem Board nicht, das Board wechseln, Vorgang wiederholen
- ist das richtige Board gefunden, sollte die LED auf und abschwellend leuchten. Zumindest sind wir jetzt sicher, dass die Definition für LED_BUILTIN richtig ist. Hoffentlich auch der Rest. Testen Sie weitere Beispiele, um sicher zu gehen.
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.