Site icon Renzo Mischianti

ESP32: gestire più seriali e logging per il debug – 3

ESP32 Seriali multiple e livelli di logging per debug

ESP32 Seriali multiple e livelli di logging per debug

Spread the love

ESP32 multiple Serial UART and Logging levels

Come puoi vedere nel diagramma di pinout, l’esp32 può avere più UART, alcuni sono segnati come RX2 e TX2.

Puoi trovare gli esp32 che uso in questo articolo su ESP32 Dev Kit v1 - TTGO T-Display 1.14 ESP32 - NodeMCU V3 V2 ESP8266 Lolin32 - NodeMCU ESP-32S - WeMos Lolin32 - WeMos Lolin32 mini - ESP32-CAM programmer - ESP32-CAM bundle - ESP32-WROOM-32 - ESP32-S

Noi andremo a verede un ESP32 DOIT DEV KIT v1

esp32 dev kit pinout v1

Ed un ESP32 sicuramente migliore come il WeMos LOLIN32.

ESP32 WeMos LOLIN32 pinout

Questi pin possono essere utilizzati per trasmettere le informazioni di debug di base o come una classica seriale nominata Serial2.

Per connetterti, naturalmente, devi usare un convertitore da USB a TTL, lo trovi a 1$.

Esiste un modulo FT232RL o FT232 più costoso, ma un CH340G o un CH340 funzionano molto bene.

CH340G Module It is my forced choice

Puoi trovare quello più economico qui su USB to TTL CH340G - USB to TTL FT232RL


FT232RL Module

Lo schema di connessione è molto semplice, qui per il DOIT DEV KIT v1

esp32 DOIT DEV KIT v1 Serial2 UART2 ttl to usb schema

e qui per il WeMos LOLIN32

esp32 WeMos LOLIN32 Serial2 UART2 ttl to usb schema

Esempio di uso

/*
 *  ESP32 DOIT DEV KIT v1 - ESP32 WeMos LOLIN32
 *  Debug on standard Serial and Serial2 on GPIO17 pin
 *  by Mischianti Renzo <https://mischianti.org>
 *
 *  https://mischianti.org/
 *
 */
#include "Arduino.h"

void setup()
{
	Serial.begin(9600);
	Serial2.begin(9600);
}

int i = 0;
void loop()
{
	i++;
	Serial.print("Hi, I'm Serial on standard TX RX pin! --> ");
	Serial.println(i);
	Serial2.print("Hi, I'm Serial2 on GPIO17! --> ");
	Serial2.println(i);
	delay(1000);
}

Qui il monitor seriale su standard UART (connessione USB).

Hi, I'm Serial on standard TX RX pin! --> 1
Hi, I'm Serial on standard TX RX pin! --> 2
Hi, I'm Serial on standard TX RX pin! --> 3
Hi, I'm Serial on standard TX RX pin! --> 4

Qui la Serial2 (USB to TTL converter).

Hi, I'm Serial2 on GPIO17! --> 1
Hi, I'm Serial2 on GPIO17! --> 2
Hi, I'm Serial2 on GPIO17! --> 3
Hi, I'm Serial2 on GPIO17! --> 4

Debug delle funzioni di base del microcontrollore

È possibile attivare nel Tools --> Debug level il livello di debug da impostare in fase di compilazione. Questo flag può attivare il logging di sistema di basso livello, il livello è

Li scrivo in ordine gerarchico, quindi se selezioni None, non vengono visualizzati i registri, se selezioni Verbose vengono visualizzati tutti i registri.

ArduinoIDE esp32 log levels

Ma impostare il livello di debug di base non è sufficiente, devi abilitare il log sulla tua seriale:

Serial2.setDebugOutput(true);

Poi puoi usare questa funzionalità per il tuo progetto, con i comandi di log di sistema, uno per ogni livello:

	log_v("Verbose");
	log_d("Debug");
	log_i("Info");
	log_w("Warning");
	log_e("Error");

Di seguito un semplice sketch per testarli:

/*
 *  ESP32 DOIT DEV KIT v1 - ESP32 WeMos LOLIN32
 *  Debug on standard Serial and Serial2 on GPIO17 pin
 *  And logging on Serial2
 *  You must set log level on option of your IDE
 *  by Mischianti Renzo <https://mischianti.org>
 *
 *  https://mischianti.org/
 *
 */
#include "Arduino.h"
#include <WiFi.h>

#define STA_SSID "<YOUR-SSID>"
#define STA_PASS "<YOUR-PASSWD>"

#include "esp32-hal-log.h"

void setup() {
	Serial.begin(9600);
	Serial2.begin(9600);
	Serial2.setDebugOutput(true);

	Serial2.println("START WIFI");
	WiFi.begin(STA_SSID, STA_PASS);

    while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial2.print(".");
    }

    Serial2.println("");
    Serial2.println("WiFi connected");
    Serial2.println("IP address: ");
    Serial2.println(WiFi.localIP());
    delay(1000);
}

int i = 0;
void loop() {
	i++;
	Serial.print("Hi, I'm Serial on standard TX RX pin! --> ");
	Serial.println(i);
	delay(100);
	Serial2.print("Hi, I'm Serial2 on GPIO17! --> ");
	Serial2.println(i);
	delay(1000);

	log_v("Verbose");
	log_d("Debug");
	log_i("Info");
	log_w("Warning");
	log_e("Error");
	delay(5000);
}

Quindi se compili e carichi lo sketch con il livello di log impostato su Info ottieni questo risultato su Serial e Serial2

START WIFI
.
WiFi connected
IP address:  
192.168.1.168
Hi, I'm Serial on standard TX RX pin! --> 1 
Hi, I'm Serial2 on GPIO17! --> 1
[I][esp32_serial_serial2_log_test.ino:50] loop(): Info
[W][esp32_serial_serial2_log_test.ino:51] loop(): Warning
[E][esp32_serial_serial2_log_test.ino:52] loop(): Error
Hi, I'm Serial on standard TX RX pin! --> 2 
Hi, I'm Serial2 on GPIO17! --> 2
[I][esp32_serial_serial2_log_test.ino:50] loop(): Info
[W][esp32_serial_serial2_log_test.ino:51] loop(): Warning
[E][esp32_serial_serial2_log_test.ino:52] loop(): Error

Ma se carichi uno sketch con impostato Verbose :

START WIFI
[D][WiFiGeneric.cpp:337] _eventCallback(): Event: 0 - WIFI_READY
[D][WiFiGeneric.cpp:337] _eventCallback(): Event: 2 - STA_START
[D][WiFiGeneric.cpp:337] _eventCallback(): Event: 4 - STA_CONNECTED
[D][WiFiGeneric.cpp:337] _eventCallback(): Event: 7 - STA_GOT_IP
[D][WiFiGeneric.cpp:381] _eventCallback(): STA IP: 192.168.1.168, MASK: 255.255.255.0, GW: 192.168.1.1
.
WiFi connected
IP address: 
192.168.1.168
Hi, I'm Serial on standard TX RX pin! --> 1 
Hi, I'm Serial2 on GPIO17! --> 1
[V][esp32_serial_serial2_log_test.ino:48] loop(): Verbose
[D][esp32_serial_serial2_log_test.ino:49] loop(): Debug
[I][esp32_serial_serial2_log_test.ino:50] loop(): Info
[W][esp32_serial_serial2_log_test.ino:51] loop(): Warning
[E][esp32_serial_serial2_log_test.ino:52] loop(): Error
Hi, I'm Serial on standard TX RX pin! --> 2 
Hi, I'm Serial2 on GPIO17! --> 2
[V][esp32_serial_serial2_log_test.ino:48] loop(): Verbose
[D][esp32_serial_serial2_log_test.ino:49] loop(): Debug
[I][esp32_serial_serial2_log_test.ino:50] loop(): Info
[W][esp32_serial_serial2_log_test.ino:51] loop(): Warning
[E][esp32_serial_serial2_log_test.ino:52] loop(): Error

Puoi vedere che ci sono anche i log di debug della funzione core WiFi marcati con [D], questo perché sono impostati sulla libreria WiFi.

Grazie

  1. ESP32: piedinatura, specifiche e configurazione dell’Arduino IDE
  2. ESP32: fileSystem integrato SPIFFS
  3. ESP32: gestire più seriali e logging per il debug
  4. ESP32 risparmio energetico pratico
    1. ESP32 risparmio energetico pratico: gestire WiFi e CPU
    2. ESP32 risparmio energetico pratico: modem e light sleep
    3. ESP32 risparmio energetico pratico: deep sleep e ibernazione
    4. ESP32 risparmio energetico pratico: preservare dati al riavvio, sveglia a tempo e tramite tocco
    5. ESP32 risparmio energetico pratico: sveglia esterna e da ULP
    6. ESP32 risparmio energetico pratico: sveglia da UART e GPIO
  5. ESP32: filesystem integrato LittleFS
  6. ESP32: filesystem integrato FFat (Fat/exFAT)
  7. ESP32-wroom-32
    1. ESP32-wroom-32: flash, piedinatura, specifiche e configurazione dell’Arduino IDE
  8. ESP32-CAM
    1. ESP32-CAM: piedinatura, specifiche e configurazione dell’Arduino IDE
    2. ESP32-CAM: upgrade CamerWebServer con gestione della luce flash
  9. ESP32: ethernet w5500 con chiamate standard (HTTP) e SSL (HTTPS)
  10. ESP32: ethernet enc28j60 con chiamate standard (HTTP) e SSL (HTTPS)
  11. Come usare la scheda SD con l’esp32
  12. esp32 e esp8266: file system FAT su memoria SPI flash esterna
  13. Gestione aggiornamenti firmware e OTA
    1. Gestione del firmware
      1. ESP32: flash del firmware binario compilato (.bin)
      2. ESP32: flash del firmware e filesystem (.bin) con strumenti grafici
    2. Aggiornamento OTA con Arduino IDE
      1. Aggiornamenti OTA su ESP32 con Arduino IDE: filesystem, firmware e password
    3. Aggiornamento OTA con browser web
      1. Aggiornamenti OTA su ESP32 tramite browser web: firmware, filesystem e autenticazione
      2. Aggiornamenti OTA su ESP32 tramite browser web: caricamento in HTTPS (SSL/TLS) con certificato autofirmato
      3. Aggiornamenti OTA su ESP32 tramite browser web: interfaccia web personalizzata
    4. Aggiornamenti automatici OTA da un server HTTP
      1. Aggiornamento automatico Firmware OTA dell’ESP32 dal server
      2. Aggiornamento automatico Firmware OTA dell’ESP32 dal server con controllo della versione
      3. Aggiornamento automatico Firmware OTA dell’ESP32 in HTTPS (SSL/TLS) con certificato autofirmato affidabile
    5. Aggiornamento del firmware non standard
      1. Aggiornamento firmware e filesystem ESP32 dalla scheda SD
      2. Aggiornamento firmware e filesystem ESP32 con client FTP
  14. Integrare LAN8720 con ESP32 per la connettività Ethernet con plain (HTTP) e SSL (HTTPS)
  15. Collegare l’EByte E70 (CC1310) ai dispositivi ESP32 c3/s3 ed un semplice sketch di esempio
  16. ESP32-C3: piedinatura, specifiche e configurazione dell’IDE Arduino
  17. Integrazione del modulo W5500 su ESP32 con Core 3: supporto nativo ai protocolli Ethernet con SSL e altre funzionalità
  18. Integrazione del modulo LAN8720 su ESP32 con Core 3: supporto nativo del protocollo Ethernet con SSL e altre funzionalità.

Spread the love
Exit mobile version