ESP32 MicroController

Der ESP32 ist ein kostengünstiger Microcontroller der seit 2016 von der Firma Espressif vertrieben wird. Inzwischen gibt es unzählige Klone der MCU von anderen Firmen. Es gibt ihn in unterschiedlichen Bauformen und Konfigurationen, so dass für jedes Projekt das Passende dabei ist.

Ein ESP32-WROOM-32 MCU
Olli Graf - raspithek.de
esp32-wroom-32Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License . loading=
Ein ESP32-WROOM-32 MCU

ESP32

Der ESP32 ist vor allem wegen seiner vielfältigen Kommunikationskanäle und der geringen Leistungsaufnahme beliebt. Dem Arduino Uno fehlte das Wifi Modul. Außerdem war er für einen Microcontroller relativ groß. Mit dem ESP32 hat Espressif diese Lücke geschlossen. Dabei hat sie auf eine Kompatibilität zur Arduino IDE geachtet, so dass wir keine neue Software zur Programmierung benötigen.

In diesem Post verwende ich einen Espressif ESP32-WROOM devkit von AZ-Delivery und einen diymore ESP32-WROOM NodeMCU. Beide wurden mit vorgelöteten Headern geliefert.

Der doppelkernige 32-Bit Prozessor von Xtensa ist standardmäßig mit 240MHz getaktet, kam aber auf bis zu 80 MHz herunter getaktet werden, um Strom zu sparen. Die bis zu 16MB Hauptspeicher sind sehr viel großzügiger bemessen als beim Arduino oder Pico.

Die meiste Fläche auf der Platine belegt der SoC, er wirkt etwas klobig, allerdings sitzt unter seine Abdeckung auch noch der Temperatursensor und das WLAN-Modul.

Abmessung69 * 26mm
CPUXtensa® 32-bit LX6
Takt80 – 240MHz
Betriebsspannung3,3V
RAM520kB SRAM
Flash4/8/16MB
ROM448kB
WiFi802.11 b/g/n/d/e/i/k/r
Bluetoothv4.2 BR/EDR and BLE
GPIO26 Pins
I²C2
SPI3
UART2
PWM16
ButtonsReset, Boot
www.mischianti.org
esp32-pinoutCreative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License . loading=

Sensoren

Ein ESP32 bringt in manchen Bauformen zwei Sensoren mit, die direkt im CPU Chip integriert sind.

HallSensor

Der Hallsensor misst Magnetfelder in der Nähe des ESP32. Er reagiert auf Änderungen in der Magnetfeldstärke, die durch Magneten oder elektromagnetische Felder verursacht werden.

Mein ESP32 Modell scheint diesen aber nicht integriert zu haben, zumindest konnte ich bei allen Versuchen ihn nicht programmatisch erreichen.

Temperatursensor

Der Temperatursensor misst die Temperatur des Mikrocontrollers. Er ist hauptsächlich für die Überwachung der Chip-Temperatur gedacht und weniger für Umgebungstemperaturen geeignet. Dieses Sketch läuft auf dem ESP2 von AZ-Delivery.

void setup() {
  Serial.begin(9600);
}
extern "C" {
  uint8_t temprature_sens_read();  // ESP32-Sensor auslesen
}

void loop() {
 int temp = temprature_sens_read();  // Rohwert (in °C nahe Chip-Kern)
  Serial.println("Chip-Temperatur: " + String(temp) + " °C");
}

Der Sketch gibt die Temperatur des Chips beständig aus.

Ausgabe des Sketchs im Serial Monitor
raspithek.de - Olli Graf
temperature-sensorCreative Commons Attribution-NonCommercial-ShareAlike 4.0 International License . loading=
Ausgabe des Sketchs im Serial Monitor

Ampelbeispiel

Ich baue mein Ampelbeispiel mit dem diymore Board auf und verbinde die LED wie folgt:

  • rot Pin 15
  • gelb Pin 2, dies ist gleichzeitig die onboard LED
  • grün Pin 4
  • Masse Pin 14
int ledRot = 15;
int ledGelb = 2;
int ledGruen = 4;
boolean blinkmode = false;

int phase = 1;// Ampelphase

void setup() {
  Serial.begin(9600);
  // put your setup code here, to run once:
    pinMode(ledRot, OUTPUT);
   pinMode(ledGelb, OUTPUT);
    pinMode(ledGruen, OUTPUT);
}

void loop() {

  // put your main code here, to run repeatedly:
  if(blinkmode) {
    // Blinkmodus
  digitalWrite(ledRot, HIGH);
  digitalWrite(ledGelb, HIGH);
  digitalWrite(ledGruen, HIGH);
  delay(1500);              
  digitalWrite(ledRot, LOW);
  digitalWrite(ledGelb, LOW);
  digitalWrite(ledGruen, LOW);
  delay(200);
  }
  else {
    // Ampelmodus
    switch(phase) {
      case 1:  // Phase rot
        digitalWrite(ledRot, HIGH);
        digitalWrite(ledGelb, LOW);
        digitalWrite(ledGruen, LOW);
        delay(1500);
        phase = 2;
        break;
      case 2: // Phase Rot/Gelb
        digitalWrite(ledRot, HIGH);
        digitalWrite(ledGelb, HIGH);
        digitalWrite(ledGruen, LOW);
        delay(1000);
        phase = 3;
        break;
      case 3:  // Phase Grün
        digitalWrite(ledRot, LOW);
        digitalWrite(ledGelb, LOW);
        digitalWrite(ledGruen, HIGH);
        delay(2000);
        phase = 4;
        break;
      case 4:  // Phase Gelb
        digitalWrite(ledRot, LOW);
        digitalWrite(ledGelb, HIGH);
        digitalWrite(ledGruen, LOW);
        delay(1500);
        phase = 1;
        break;
    }
  }
}

Der Code unterscheidet sich vom Arduino R4 lediglich in den gewählten Pins. Der ESP32 sitzt etwas unorthodox auf dem Breadboard, damit ich mehr Platz beim Stecken der Jumperkabel habe.

Ampel in der Phase rot/gelb
raspithek.de - Olli Graf
ampelCreative Commons Attribution-NonCommercial-ShareAlike 4.0 International License . loading=
Ampel in der Phase rot/gelb

Fazit

Der ESP32 ist zu Recht einer der beliebtesten MCU. Er kommt in allen denkbaren Konfigurationen für die unterschiedlichsten Anwendungszwecke daher. Seine Kompatibilität zur Arduino IDE macht den Umstieg besonders einfach.

Schreibe einen Kommentar

Insert math as
Block
Inline
Additional settings
Formula color
Text color
#333333
Type math using LaTeX
Preview
\({}\)
Nothing to preview
Insert
Creative Commons License
Except where otherwise noted, the content on this site is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
Olli Graf - raspithek.de
WordPress Cookie Hinweis von Real Cookie Banner