Pin SERIAL
Questi sono i pin collegati alle UART (Universal Asynchronous Receiver/Transmitter), cioè le interfacce seriali. Te li spiego uno per uno.
1. Concetti base
-
L’ESP32-S3 ha più UART (tipicamente 3: UART0, UART1, UART2), tutte mappabili su vari pin GPIO.
-
Ogni UART ha di solito:
-
Le UART possono essere usate per:
-
Comunicazione con PC (monitor seriale)
-
Comunicazione con altri microcontrollori
-
Moduli esterni (GPS, sensori, Nextion, moduli Bluetooth, ecc.)
2. Mappatura pin che riporti
| Pin GPIO |
Funzione |
UART |
Descrizione |
| GPIO15 |
V0RTS |
UART0 |
Controllo hardware RTS |
| GPIO16 |
V0CTS |
UART0 |
Controllo hardware CTS |
| GPIO17 |
V1TXD |
UART1 |
Trasmette dati |
| GPIO18 |
V1RXD |
UART1 |
Riceve dati |
| GPIO19 |
V1RTS |
UART1 |
RTS hardware |
| GPIO20 |
V1CTS |
UART1 |
CTS hardware |
| GPIO43 |
V0TXD |
UART0 |
Trasmette dati |
| GPIO44 |
V0RXD |
UART0 |
Riceve dati |
3. Come si usano.
// Esempio per UART1
HardwareSerial Serial1(1); // 1 = UART1
void setup() {
Serial.begin(115200); // UART0 per debug su USB
Serial1.begin(9600, SERIAL_8N1, 18, 17); // RX=18, TX=17
}
void loop() {
if (Serial1.available()) {
int val = Serial1.read();
Serial.println(val); // manda dati su USB
}
} |
Nota: su ESP32-S3 puoi mappare quasi tutte le UART su qualsiasi GPIO compatibile, grazie alla funzione di “GPIO matrix”.
4. Regole pratiche
-
V0 → UART0 (tipicamente usata per USB/Seriale per debug)
-
V1 → UART1 (puoi collegarla a moduli esterni)
-
TXD/RXD bastano se non usi hardware flow control.
-
Se usi Nextion o moduli GPS, di solito basta TX/RX senza RTS/CTS.
UART2 sull’ESP32-S3 (ideale per collegare il Nextion).
1. UART disponibili sull’ESP32-S3
| UART |
Pin tipici (può variare) |
Uso comune |
| UART0 |
GPIO43 (TXD), GPIO44 (RXD) |
Debug/USB seriale |
| UART1 |
GPIO17 (TXD), GPIO18 (RXD) |
Moduli esterni, sensori, comunicazioni generiche |
| UART2 |
variabile (es. GPIO?), qui puoi mappare TX/RX |
Moduli esterni come Nextion |
Nota: sull’ESP32-S3 quasi tutti i GPIO compatibili possono essere assegnati a qualsiasi UART tramite la GPIO matrix, quindi puoi scegliere quasi liberamente i pin per la UART2.
2. Come scegliere i pin per la UART2
Supponiamo tu voglia usare UART2 per il Nextion. Serve:
1️⃣ UART0 – TX = GPIO43, RX = GPIO44 (V0TXD/V0RXD)
-
A cosa serve: di default è la UART di sistema collegata all’USB per caricare gli sketch e per il monitor seriale.
-
Cavo USB → UART0: esattamente, quando colleghi l’ESP32-S3 al PC via USB, il chip usa internamente la UART0 per dialogare con l’IDE.
-
Cosa succede se colleghi altre cose ai pin TX/RX di UART0:
-
Può creare conflitti durante il caricamento dello sketch o la stampa su Serial Monitor.
-
Meglio non usare i pin di UART0 per altri dispositivi, almeno durante lo sviluppo/debug via USB.
2️⃣ UART1 – TX = GPIO17, RX = GPIO18 (V1TXD/V1RXD)
-
Uso tipico: collegare moduli esterni (Nextion, sensori seriali, GPS, ecc.)
-
Ha pin dedicati, ma puoi anche mappare questa UART su altri pin se vuoi (grazie alla GPIO matrix).
-
Non ha conflitti con la USB, quindi puoi usarla liberamente.
3️⃣ UART2 – nessun pin fisso
-
Sì, puoi assegnare i pin che vuoi, purché siano compatibili con la funzione UART (GPIO abilitati).
-
Quando assegni i pin di UART2:
-
Non puoi usare gli stessi pin di UART0 o di UART1 contemporaneamente per UART2.
-
Se provi a sovrapporre, avrai conflitti di bus: dati che si mescolano, malfunzionamenti o mancato caricamento sketch.
-
Quindi UART2 ha pin “liberi” da scegliere, ma non quelli già usati da altre UART attive.
4️⃣ Regola pratica per il Nextion
-
Se vuoi usare il Nextion senza problemi:
-
Lascia UART0 per USB / debug.
-
Usa UART1 o UART2 per il Nextion.
-
Non assegnare i pin della UART2 a quelli di UART0 (TX/RX USB) o UART1 già usati.
-
Ad esempio, se UART2 non ha pin dedicati, puoi scegliere due GPIO liberi, tipo GPIO21 (TX2) e GPIO22 (RX2), e collegarci il Nextion.
-
Nel codice Arduino:
HardwareSerial Serial2(2); // UART2
Serial2.begin(9600, SERIAL_8N1, 22, 21); // RX=22, TX=21 |
💡 In sintesi:
-
UART0 → solo USB / debug / caricamento sketch
-
UART1 → moduli esterni, pin dedicati
-
UART2 → pin a scelta (liberi), non sovrapporre altri UART)
Come funziona allora per UART2
-
UART2 non ha pin “fissi”: puoi assegnare qualsiasi GPIO compatibile come TX/RX tramite la GPIO matrix.
-
Però devi scegliere GPIO liberi sulla tua scheda, cioè quelli visibili nello schema/pinout che non siano già usati da altre funzioni critiche (UART0, Touch, ADC, STRAP, SPI flash).
-
Esempio di pin liberi possibili per UART2 (dipende dal tuo schema, vedi quali GPIO non assegnati ad altre funzioni):
| Funzione prevista |
Pin liberi? |
| TX2 (Nextion) |
GPIO21 o altri liberi dal tuo schema |
| RX2 (Nextion) |
GPIO20, GPIO19, ecc., liberi |
1️⃣ Pin da evitare
Seriali (UART dedicate)
-
GPIO15, 16, 17, 18, 19, 20, 43, 44
→ meglio non usarli per altri dispositivi, perché sono già mappati su UART0/1.
STRAP (boot mode)
JTAG / USB
-
GPIO39, 40, 41, 42
→ serve per debug e USB, meglio non toccarli.
2️⃣ SPI flash / periferiche critiche
Sulla tua scheda, l’ESP32-S3 usa la flash interna via SPI. I pin tipici dedicati allo SPI flash (VSPI / HSPI) sono:
| Pin SPI flash |
Funzione |
| GPIO6–11 |
QSPI flash (CLK, CS, D0–D3) |
Questi pin non devono essere usati per altre funzioni, altrimenti il chip non parte.
3️⃣ Pin inesistenti o non esposti
4️⃣ Quindi quali pin rimangono liberi?
Dalla numerazione GPIO0–46, togliendo:
-
Seriali → 15, 16, 17, 18, 19, 20, 43, 44
-
STRAP → 0, 3, 45, 46
-
JTAG/USB → 39, 40, 41, 42
-
SPI flash → 6–11
-
Pin non esistenti → 22–34
Rimangono i GPIO liberi:
| GPIO liberi plausibili |
Note |
| 1, 2, 4, 5 |
ADC1_CH0–CH4, touch (alcuni) |
| 7, 8, 9, 10 |
ADC1_CH6–CH9 |
| 12, 13, 14 |
ADC2_CH1–CH3 (attenzione Wi-Fi se usi ADC2) |
| 21, 25, 26, 27, 28, 29, 30, 31, 32, 33, 35, 36, 37, 38 |
GPIO liberi per UART2, sensori o altri moduli |
Ovviamente va sempre verificato sullo schema esatto della tua scheda, perché alcune schede compatte non espongono tutti i GPIO.
|