ESP32

Aus brainelectronics Wiki
Wechseln zu: Navigation, Suche

Informationen

Allgemein

  • Tensilica Xtensa
  • 32-bit LX6 CPU
  • 2 oder 1 Core
  • 240 MHz max CPU frequency
  • VDD von 2.0 V bis 3.6 V
  • 4MB Flash
  • 520 KB SRAM
  • WiFi 820.11 b/g/n
  • Bluetootg 4.2 mit BLE
  • 40 GPIO (34 usable, 6 for SPI flash)
  • 18 12-bit ADC with (2 ADC @ each 9 channels)
  • 2 8-bit DAC (2 channels)
  • 16 channel PWM
  • On Board RTC
  • 2 Hardware Timer Groups
  • I2C
  • 3 USART
  • 4 SPI (SPI0 (Flash), SPI1 (same as flash), HSPI (free) and VSPI (free))
  • #CAN 2.0

ESP32 Peripherals API

Pinout

Die I/O Pins sind nur 3.3V tolerant!
Pinout ESP32 Core Board V2 aka ESP32 Devkit V2 ESP32 Core Board V2 Schaltplan

API

Standardmäßig gibt es fast alles.

IDE

Grundlegend sind pip und pyserial zur Verwendung bzw. Programmierung des Chips notwendig.

   $ sudo easy_install pip
   $ sudo pip install pyserial

Anschließend muss der Toolchain konfiguriert werden. Toolchin Mac Setup.

   $ cd ~/Download
   $ wget https://dl.espressif.com/dl/xtensa-esp32-elf-osx-1.22.0-73-ge28a011-5.2.0.tar.gz
   $ cd ~/Documents/
   $ mkdir -p esp
   $ cd esp
   $ tar -xzf ~/Downloads/xtensa-esp32-elf-osx-1.22.0-73-ge28a011-5.2.0.tar.gz
   $ nano ~/.bash_rc
# path configs for ESP32
export PATH=$PATH:$HOME/Documents/esp/xtensa-esp32-elf/bin
export IDF_PATH=$HOME/Documents/esp/esp-idf
 

Das Bash file neu laden, damit es in allen zukünftigen Terminals verfügbar ist und prüfen

   $ . ~/.bash_rc
   $ printenv IDF_PATH
   $ cd ~/Documents/esp/
   $ git clone --recursive https://github.com/espressif/esp-idf.git

Xcode

Für die Verwendung mit Xcode, wird zum Testen das hello_word Beispiel genutzt

   $ cd ~/Documents/ESP-Test/
   $ cp -r $IDF_PATH/examples/get-started/hello_world .

In Xcode wird ein neues Projekt erstellt (⌘+⇧+N). Es ist ein "Command Line Tool" vom Typ "C" mit beliebigen Namen zu wählen.
Anschließend über File -> New -> Target ... eine neues "External Build System" erstellen. Als Name kann beliebiges gewählt werden. Es empfiehlt sich der Name "Build and Upload" zu wählen. Als Build Tool ist "/usr/bin/make" einzugeben, falls nicht bereits vordefiniert. Im Info Tab muss abschließend noch das Directory angegeben werden, in welchem sowohl das Makefile als auch die später kompilierten Daten liegen. Als Argument wird "flash" eingetragen.
Das alte Target (mit dem Namen des Xcode Projekts) und das von Xcode automatisch erzeugte main.c File kann gelöscht (in den Papierkorb legen)
Nun die Dateien des hello_word Beispiel zum Xcode Projekt mit ⌘ + ⌥ + A hinzufügen.
Wichtig
Dateien sollten in das neue Verzeichnis kopiert werden UND zur neu erstellten Target hinzugefügt werden.
Neues external Build SystemBuild Tool Path and NameTarget Settings aufräumenAdd items to target

Jetzt muss Xcode beendet werden und die menuconfig im Terminal ausgeführt werden, dies kann von Xcode nicht automatisch erstellen werden.

   $ cd ~/Documents/Xcode-Testproject/
   $ make menuconfig

Dort ist der richtige Serial Port über Serial flasher config -> Serial Port einzutragen, zu speichern und zu beenden.
Menuconfig port settingsSave menuconfig settings


Im nächsten Schritt wird Xcode über das Terminal gestartet, da nur so die Pfad Variablen PATH und IDF_PATH übernommen werden.

   $ open -a xcode

Final correct setup
Mit dem Shortcut ⌘ + B für Project->Build kann nun der am definierten USB Port verbundene ESP32 mit dem hello_world Code geflashed werden.
Successful Upload

Probleme

Links

Add Makefile to Xcode
ESP IDF Get started
ESP Toolchain Mac Setup
Use bash env variables Xcode

Blink Code

#define BLINK_GPIO CONFIG_BLINK_GPIO

void blink_task(void *pvParameter)
{
    /* Configure the IOMUX register for pad BLINK_GPIO (some pads are
       muxed to GPIO on reset already, but some default to other
       functions and need to be switched to GPIO. Consult the
       Technical Reference for a list of pads and their default
       functions.)
    */
    gpio_pad_select_gpio(BLINK_GPIO);
    /* Set the GPIO as a push/pull output */
    gpio_set_direction(BLINK_GPIO, GPIO_MODE_OUTPUT);
    while(1) {
        /* Blink off (output low) */
        gpio_set_level(BLINK_GPIO, 0);
        vTaskDelay(1000 / portTICK_PERIOD_MS);
        /* Blink on (output high) */
        gpio_set_level(BLINK_GPIO, 1);
        vTaskDelay(1000 / portTICK_PERIOD_MS);
    }
}

void app_main()
{
    xTaskCreate(&blink_task, "blink_task", configMINIMAL_STACK_SIZE, NULL, 5, NULL);
}
 

Programmieren

siehe Arduino STM32 Upload
Das Programmieren des STM32 Boards ist über die nachfolgenden 3 Möglichkeiten gegeben: Bootloader, STLink, USB Serial Adapter

Nach dem Verbinden per USB kann der Code erst hochgeladen werden, nachdem die Onboard LED mehrmals schnell hintereinander geblinkt hat.

Boot Pin Settings

Normaler boot (mit Benutzer Code, der auch ein zweiter Bootloader sein kann):


Bootloader

USB to Serial Adapter

Probleme

Flashing Timeout

Failed to connect to ESP32

   $ make flash
Flashing binaries to serial port /dev/cu.SLAB_USBtoUART (app at offset 0x10000)...
esptool.py v2.1
Connecting........_____....._____....._____....._____....._____....._____....._____....._____....._____....._____

A fatal error occurred: Failed to connect to ESP32: Timed out waiting for packet header
make: *** [flash] Error 2
 

Lösung

   unplug ESP32
   start to hold the BOOT button
   plug ESP in
   execute: make flash monitor
   release the BOOT button when it tries to connect

Credits