Zur Werkzeugleiste springen

Last Updated on 7. November 2020 by sfambach

Der ESP32 ist der Nachfolger des erfolgreichen ESP8266 Controllers. Er besitzt eine 32Bit Tensilica Xtensa LX6 CPU in der Regel mit zwei Kernen (RISC Architektur). Hier sammle ich für mich interessante Informationen.

Anwendungsgebiete

  • Haushaltsanwendungen
  • Hausautomation
  • Smarte Steckdosen und Licht Steuerung
  • WLAN Steuerung
  • Babyphone
  • IP Kameras
  • Sensor Networks
  • Wearables
  • Bloototh Applikationen wie Kopfhörer/Lautsprecher …

Innenleben

Das folgende Schaubild zeigt die Architektur des Controllers.
Neben diversen Schnittstellen besitzt er:

  • WLan
  • Bluetooth
  • Einen Temperatursensor
  • Crypto Routinen
Blockschaltbild ESP32

Dokumentation

https://www.espressif.com/en/products/hardware/esp32/overview

https://github.com/espressif/arduino-esp32

Einrichtung der Programmierumgebung

Arduino Gui

Die Einrichtung mit GIT kann dem folgenden Beitrag entnommen werden

https://fambach.net/esp32-arduino-gui-einrichten/

Sofware Tipps

Hardware Daten auslesen

Die Datei esp.h/Klasse ESP bietet Zugriff auf einige Informationen der Hardware. Wie Id, Versionen, freier Speicher usw.. Der komplette Funktionsumfang kann in Githup eingesehen werden.

https://github.com/espressif/arduino-esp32/blob/master/cores/esp32/Esp.h

Eingebunden werden muss die Esp.h meist nicht diese ist bei den Standardbibliotheken mit dabei. (Danke für den Hinweis an Andreas, siehe Kommentar) . Folgend ein paar Beispiele aus der Datei.

Neustart auslösen

Eine Funktion ist das Neustarten des ESPs. Dies kann nach einem remote Update der Firmware nötig sein oder bei schlampiger Programmierung wenn der Speicher voll ist ;).

ESP.restart();

Speicher Informationen abfragen

Gerade für das Debuggen sind Speicherinfomationen ganz nützlich. Zum Beispiel kann hieran erkannt werden, ob verwendeter Speicher auch wieder frei gegeben wird. Die folgenden können hierfür aufgerufen werden:

Heap/SPI Speicher Größe

uint32_t var = ESP.getHeapSize(); 
uint32_t var2 = ESP.getPsramSize();

Freier Heap/PS Speicher

uint32_t var1 = ESP.getFreeHeap(); 
uint32_t var2 = ESP.getFreePsram();

Minimalwert des Heap/SPI Speichers seit Controller start.

uint32_t var1 = ESP.getMinFreeHeap(); 
uint32_t var2 = ESP.getMinFreePsram();

Maximale Blockgröße des Heap/SPI Speichers

uint32_t var1 = ESP.getMaxAllocHeap(); 
uint32_t var2 = ESP.getMaxAllocPsram();

Spannung am ESP Abfragen

Der ESP 8266 hat noch die Möglichkeit die Spannung zu messen. Beim ESP32 beötigt man eine Hilfsschaltung, ein Spannungsteiler mit 100kOhm und 10kOhm am ADC.

Mehr infos gibts in dem gelinkten Beitrag:

https://www.arduinoforum.de/arduino-Thread-ESP32-Batteriestatus

Formel zur Berechnung der Spannung:

Uin =  (100 + 10) / 10 ((R1 + R2) /R2) 

https://www.arduinoforum.de/arduino-Thread-ESP32-Batteriestatus

UART 1,2,3

Der Esp32 besitzt 3 UART Schnittstellen, die von einander unabhängig konfiguriert werden können. Die Maximalgeschwindigkeit beträgt 5Mbps Dies ermöglicht eine asysnchrone Kommunikation mit RS232, RS485 und IrDa unterstützung. Als Anschluss kann jeder GPIO Pin dienen. (Quelle: Espressif ESP32Datenblatt Seite 28, 31)

Pinbelegung per default:

UARTRX IOTX IOCTSRTS
UART0GPIO3GPIO1N/AN/A
UART1GPIO9GPIO10GPIO6GPIO11
UART2GPIO16GPIO17GPIO8GPIO7
Quelle: https://circuits4you.com/2018/12/31/esp32-hardware-serial2-example/

In der Arduino Gui sind folgende Einstellungen:

  • Serial – Uart0 GPIO 1/3
  • Serial1 – Uart 1, GPIO 9/10 meist schon mit Flash Speicher belegt
  • Serial2 – Uart 2 GPIO 16/17

Die Ansteuerung ist in allen gängigen Frameworks wie Arduino IDE, Espressif, Micropython… enthalten.

I²C Wire Bus

Der ESP32 hat zwei Wire Busse. Für den Anschluss kann jeder GPIO Pin gewählt werden. Er kann mit einer Geschwindigkeit von 100Kbit’s (Standard Mode), 400Kbit’s (Fast Mode) bis hin zu 5 MHz arbeiten. Die beiden Busse beherrschen 7bit und 10 Bit Addressierung. (Quelle: Espressif ESP32 Datenblatt Seite 28,31)

Die Ansteuerung ist in allen gängigen Frameworks wie Arduino IDE, Espressif, Micropython… enthalten.

Probleme

WiFi Verbindet sich nur jedes 2. Mal

Wie folgt die Verbindung starten:

  WiFi.disconnect();
  WiFi.mode(WIFI_STA); // kann auch ein anderer Mode sein
  while (WiFi.status() != WL_CONNECTED) {
    WiFi.begin(SSID, PASSWORD);
    delay(1000);
  }

Verwandte Beiträge

Quellen

https://en.wikipedia.org/wiki/ESP32

https://www.espressif.com/en/products/hardware/esp32/overview

https://github.com/espressif/arduino-esp32

Von sfambach

6 Gedanken zu „ESP32 Nützliche Infos“
  1. hallo stefan!
    danke für die so informativ gestaltete seite. vielleicht kannst du mir weiterhelfen?
    ich nutze die esp32 cam für eine türsprechanlage und habe das problem, dass sich die kamera nach ein paar tagen nicht mehr abrufen lässt (http://http://192.168.X.X/capture). über den resetbutton ist das problem behoben. was aber nicht die lösung ist. gibt es einen http-befehl mit der ein solcher reset ausgelöst werden kann? bei mir läuft alles über den iobroker, mit welchem solche befehle via script jederzeit absetzbar sind.
    sg tom

    1. Hi Tom,

      danke für deinen Beitrag. Einen Befehl per HTML der den ESP.restart() aufruft gibt es soweit ich weiss nicht. Allerdings sollte es möglich sein in der ESP cam den Befehl im bestehenden Format zu implementieren.

      in der Datei app_httpd.cpp des Cam Webservers ab ca Zeile 491 (If Kaskade) einen weitere If Bedingung eintragen:

      else if (!strcmp(variable, „reset“)) { ESP.restart();}

      und dann per http mit

      http:///control?var=reset&val=1

      aufrufen. So sollte es theoretisch gehen, ausprobiert habe ichs nicht 😉
      Mehr zur ESP Cam hier: https://www.fambach.net/esp32-cam-modul/

  2. Hallo Stefan
    danke für die interessanten Hinweise.
    Zuerst habe ich Esp.h in die library eingebunden und auf dem Sketch mit #include gestartet.
    Die diversen Hardware-Infos konnten angezeigt werden.
    Als ich dann den include auskommentierte, kam die Anzeige gleichwohl. Wie kann ich mir das erklären?
    2. Frage: du hast die Anweisung „ESP.restart()“ so prominent dargestell; es funktioniert aber ich kann mir keine sinnvolle Anwendung vorstellen. Wann braucht man das?
    Andreas

    1. Hallo Anreas,
      vielen Dank für deinen Kommentar. Die Esp.h ist per default bei den Boardtreibern mit dabei, diese muss nicht extra eingebunden werden. Ich habe sie nur aufgelistet weil man in Git so die Funktionalitäten finden kann die sie bietet.
      Zur zentralen Darstellung muss ich zu meinder Schande gestehen, dass ich die Seite eröffnet habe um hier mehrere nützliche Informationen zu sammeln, leider ist es dabei geblieben :(. Auch weil dauernd neue Boards raus kommen die alle mal testen möchte.
      Wichtig finde ich die Funktion zum Beispiel für:

    2. Schlampig programmiert, einmal am Tag den Esp gezielt neustarten 😉
    3. Für OTA (Over the Air (Aktualisierung der Firmware), firmware aktualisieren und neustarten, bzw. nach dem neustart installieren.

      Gruß Stefan

      P.S. Habe den Beitrag diesbezüglich erweitert.

  3. Hallo Stefan, danke für Deinen sorgfältig gestalteten und informativen Blog.
    Als erstes einen kurzen Hinweis auf einen Tippfehler ;-).
    Überschrift „Sofware Tips“ soll bestimmt „Software Tipps“ bedeuten.
    Dann war ich enttäuscht, dass Du dich noch nicht mit einer besseren, als der Arduino IDE befast hast. Für mich, als lang jähriger (> 40 Jahre) Elektronik und Software Entwickler, ist diese IDE nur ein Graus.
    Versuche die Arduino Umgebung in professionellere Tools einzubinden waren bisher mit einigen Hürden verbunden und nicht wirklich erfolgreich.
    Hast Du sich schon einmal mit der neuen Eclipse 2019 befasst? Hier hat der Umgang mit mehren Projekten so seine Tücken.
    M.f.G. Manfred

    1. Hallo Manfred,

      danke für deinen Kommentar und den Tipp ;)(habe es geändert).
      Es stimmt die Arduino IDE ist wirklich nur was für einfache Anwendungen. Da ich aber immer nur sporadisch dazu kommen reicht das aktuell aus. Der Vorteil von ihr ist, sie funktioniert auch nach Updates. Ich habe Sloeber für Eclipse ausprobiert, das Plugin ist eigentlich genial, hat bei mir aber immer wieder zu Fehlern bei der Auflösung der Bibliotheken geführt. Eine Weile habe ich auch mit PlatformIO gearbeitet, diese IDE ist auch recht ordentlich, bis durch Updates nichts mehr funktionierte. Eclipse 2019 habe ich noch nicht probiert das wäre wahrscheinlich mal was für den nächsten Urlaub 🙂

      Gruß
      Stefan

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.