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:
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
-
È 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.
-
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 |
-
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.
-
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 |
|