La  UART

Universal Asynchronous Receiver/Transmitter

 

👉 Ricevitore/Trasmettitore Universale Asincrono.

Per comprendere il funzionamento di una UART/TTL vedi qui

UART su Arduino ESP32

L’ESP32 dispone di 3 porte UART hardware:

  • UART0 → usata di default come Serial (TX0=GPIO1, RX0=GPIO3, collegata all’USB).

  • UART1 → può essere usata come Serial1 e i pin TX/RX si possono assegnare liberamente.

  • UART2 → può essere usata come Serial2, anche qui i pin sono configurabili.

Esempio di uso con pin personalizzati:

// Imposta UART2 con pin dedicati
HardwareSerial Serial2(2);  // numero 2 = UART2

void setup() {
  Serial.begin(115200);       // Porta USB
  Serial2.begin(9600, SERIAL_8N1, 16, 17);  // RX=16, TX=17
  Serial.println("UART2 pronta");
  Serial2.println("Ciao da UART2");
}

void loop() {
  if (Serial2.available()) {
    int c = Serial2.read();
    Serial.write(c);
  }
}

Se non specifichi i pin, la UART usa quelli di default (che però cambiano a seconda della scheda).
Puoi comunque lasciar fare al sistema la configurazione automatica:

Serial1.begin(9600);

 

ma se vuoi specificare i pin (ad esempio perché TX0/RX0 sono già occupati), basta indicare:

 

Serial1.begin(9600, SERIAL_8N1, RX_PIN, TX_PIN);

 

In questo modo puoi collegare qualsiasi dispositivo UART su qualunque coppia di GPIO compatibili.

 

Vediamo nel dettaglio perché la UART2 è preferita per il Nextion 👇

🔹 Le tre UART dell’ESP32

Nome Numero Uso tipico Pin di default Note
UART0 Serial Debug, monitor seriale (USB) RX0=GPIO44 - D0 TX0=GPIO43 - D1 Collegata internamente alla USB; meglio non usarla per moduli esterni
UART1 Serial1 libera, ma a volte usata da PSRAM, flash o log interni TX1=GPIO17 - D8 RX1=GPIO18 - D9 Su molte schede questi pin sono riservati (non sempre liberi)
UART2 Serial2 completamente libera per uso utente

Consigliati:
TX2=GPIO9 - D6 RX2=GPIO10 - D7

Perfetta per collegare moduli come Nextion, GPS, Bluetooth esterni, ecc.

🔹 Perché il Nextion sta meglio su UART2

  1. È totalmente indipendente da USB e da debug, quindi puoi:

    • caricare sketch,
    • stampare su Serial per il monitor,
    • e contemporaneamente dialogare con il Nextion sulla UART2.
  2. Puoi scegliere qualsiasi coppia di GPIO per adattarti al cablaggio.
    Esempio:

 

HardwareSerial Serial2(2); // UART2
Serial2.begin(115200, SERIAL_8N1, 7, 6); // RX, TX verso Nextion

 

  1. UART1 è parzialmente vincolata su alcune schede (specialmente ESP32-S3 e Nano ESP32):

    • i pin 9 e 10 possono essere interni al flash QSPI,
    • oppure usati per logging,
    • o semplicemente non disponibili ai connettori esterni.
  2. UART2 non interferisce con altri bus (SPI, I²C, PSRAM ecc.), quindi è la scelta “sicura”.

🔹 Configurazione tipica consigliata (per Nextion)

#include <HardwareSerial.h>

HardwareSerial nextion(2);  // usa UART2

void setup() {
  Serial.begin(115200);                      // per debug via USB
  nextion.begin(115200, SERIAL_8N1, 7, 6); // RX, TX verso Nextion
  Serial.println("Nextion connesso su UART2");
}

void loop() {
  if (nextion.available()) {
    int c = nextion.read();
    Serial.write(c);
  }
}

🔸 In breve

UART Uso consigliato Note
Serial (UART0) Debug / USB Non toccare
Serial1 (UART1) Riservata / evitare Potrebbe condividere pin
Serial2 (UART2) ✅ Nextion, GPS, moduli seriali Libera e affidabile