Farbige Darstellung der Logs mit ESP32 und PlatformIO
Logging gehört zu den wichtigsten Hilfsmitteln bei der Softwareentwicklung. Das Espressif IoT Development Framework bietet dazu eine Bibliothek an, die standardmäßig auf die UART-Schnittstelle loggt. In der PlatformIO IDE schaut der Output mit den Standardeinstellungen folgendermaßen aus:
␛[0;32mI (42) boot.esp32: SPI Mode : DIO␛[0m
␛[0;32mI (46) boot.esp32: SPI Flash Size : 4MB␛[0m
␛[0;32mI (51) boot: Enabling RNG early entropy source...␛[0m
␛[0;32mI (56) boot: Partition Table:␛[0m
␛[0;32mI (60) boot: ## Label Usage Type ST Offset Length␛[0m
␛[0;32mI (67) boot: 0 nvs WiFi data 01 02 00009000 00006000␛[0m
␛[0;32mI (75) boot: 1 phy_init RF data 01 01 0000f000 00001000␛[0m
␛[0;32mI (82) boot: 2 factory factory app 00 00 00010000 0013d620␛[0m
␛[0;32mI (90) boot: End of partition table␛[0m
␛[0;32mI (94) boot_comm: chip revision: 3, min. application chip revision: 0␛[0m
␛[0;32mI (101) esp_image: segment 0: paddr=00010020 vaddr=3f400020 size=18cc8h (101576) map␛[0m
␛[0;32mI (146) esp_image: segment 1: paddr=00028cf0 vaddr=3ffb0000 size=04098h ( 16536) load␛[0m
␛[0;32mI (153) esp_image: segment 2: paddr=0002cd90 vaddr=40080000 size=03288h ( 12936) load␛[0m
␛[0;32mI (158) esp_image: segment 3: paddr=00030020 vaddr=400d0020 size=7c164h (508260) map␛[0m
␛[0;32mI (344) esp_image: segment 4: paddr=000ac18c vaddr=40083288 size=12050h ( 73808) load␛[0m
␛[0;32mI (375) esp_image: segment 5: paddr=000be1e4 vaddr=50000000 size=00010h ( 16) load␛[0m
␛[0;32mI (386) boot: Loaded app from partition at offset 0x10000␛[0m
␛[0;32mI (386) boot: Disabling RNG early entropy source...␛[0m
␛[0;32mI (397) cpu_start: Pro cpu up.␛[0m
␛[0;32mI (397) cpu_start: Starting app cpu, entry point is 0x40081c14␛[0m
␛[0;32mI (0) cpu_start: App cpu up.␛[0m
Bei den seltsamen Zeichen am Anfang und am Ende jeder Zeile handelt es sich um sogenannte ANSI-Escape-Sequenzen mit denen Texteigenschaften wie Vorder- und Hintergrundfarbe festgelegt werden können.
Der Aufbau einer Escape-Sequenz sieht folgendermaßen aus:
␛[CODEm
Es können auch mehrer Codes in einer Sequenz vorkommen. Die einzelnen Codes werden mit einem Strichpunkt getrennt:
␛[CODE1;CODE2m
Die wichtigsten Codes für das Logging sind
31 | Rot | |
32 | Grün | |
33 | Gelb | |
0 | Reset/Normal |
Der Device Monitor der PlatformIO IDE kann mit diesen Escape-Sequenzen umgehen. Dazu muss in der Datei platform.ini folgende, fett markierte Zeile einfügen:
; PlatformIO Project Configuration File ; ; Build options: build flags, source filter, extra scripting ; Upload options: custom port, speed and extra flags ; Library options: dependencies, extra library storages ; ; Please visit documentation for the other options and examples ; http://docs.platformio.org/page/projectconf.html [env:esp32dev] platform = espressif32 framework = espidf board = esp32dev monitor_speed = 115200 monitor_port = COM4 monitor_flags = --raw
Mit dieser Einstellung werden die in den Escape-Sequenzen codierten Farben richtig angezeigt:
I (42) boot.esp32: SPI Mode : DIO
I (46) boot.esp32: SPI Flash Size : 4MB
I (51) boot: Enabling RNG early entropy source...
I (56) boot: Partition Table:
I (60) boot: ## Label Usage Type ST Offset Length
I (67) boot: 0 nvs WiFi data 01 02 00009000 00006000
I (75) boot: 1 phy_init RF data 01 01 0000f000 00001000
I (82) boot: 2 factory factory app 00 00 00010000 0013d620
I (90) boot: End of partition table
I (94) boot_comm: chip revision: 3, min. application chip revision: 0
I (101) esp_image: segment 0: paddr=00010020 vaddr=3f400020 size=18cc8h (101576) map
I (146) esp_image: segment 1: paddr=00028cf0 vaddr=3ffb0000 size=04098h ( 16536) load
I (153) esp_image: segment 2: paddr=0002cd90 vaddr=40080000 size=03288h ( 12936) load
I (158) esp_image: segment 3: paddr=00030020 vaddr=400d0020 size=7c164h (508260) map
I (344) esp_image: segment 4: paddr=000ac18c vaddr=40083288 size=12050h ( 73808) load
I (375) esp_image: segment 5: paddr=000be1e4 vaddr=50000000 size=00010h ( 16) load
I (386) boot: Loaded app from partition at offset 0x10000
I (386) boot: Disabling RNG early entropy source...
I (397) cpu_start: Pro cpu up.
I (397) cpu_start: Starting app cpu, entry point is 0x40081c14
I (0) cpu_start: App cpu up.
Die einzelnen Loglevels werden folgendermaßen dargestellt:
E (1301) Loglevel test: Error W (1305) Loglevel test: Warning I (1309) Loglevel test: Info D (1312) Loglevel test: Debug V (1315) Loglevel test: Verbose
Mit dieser einfachen Einstellung sind die seltsamen Zeichen verschwunden und das Logfile ist auch etwas übersichtlicher geworden
Update 05.08.2022
Seit einem der letzten PlatformIO Updates erscheint folgende Fehlermeldung im Device Monitor:
Warning! Ignore unknown configuration option `monitor_flags` in section [env:esp32dev]
Das liegt daran, dass die Einstellung monitor_flags = --raw nicht mehr unterstützt wird. Stattdessen muss die Einstellung monitor_raw = yes verwendet werden. Die platform.ini Datei sieht dann wie folgt aus:
[env:esp32dev] platform = espressif32 board = esp32dev framework = espidf monitor_port = COM3 monitor_speed = 115200 monitor_raw = yes