ESP-32 Lora utilizza tutte le interfacce seriali

Benvenuti in una nuova edizione dei nostri blog. Questa volta si tratta di come utilizzare tutte le interfacce seriali del modulo Lora ESP-32.

ESP32 ha tre interfacce hardware seriali. L'interfaccia seriale standard seriale alle connessioni GPIO3 (RX) e GPIO1 (TX) viene utilizzata per la comunicazione con l'IDE Arduino ed è permanentemente cablata al CP2102.

Tramite la libreria aggiuntiva HardwareSerial, che fa parte del pacchetto hardware per la scheda ESP32-LoRa, è anche possibile utilizzare le altre due interfacce hardware seriali. Tuttavia, c'è un grosso problema. L'interfaccia seriale 1 è normalmente collegata ai pin GPIO9 (RX) e GPIO10 (TX), che vengono utilizzati con la scheda LoRa per controllare la memoria flash e non sono accessibili. L'uso di questa porta comporterebbe immediatamente un arresto anomalo dell'applicazione. L'interfaccia seriale 2 è normalmente collegata ai pin GPIO16 (RX) e GPIO17 (TX). Può essere utilizzato sulla scheda LoRa, ma il display rimane scuro perché GPIO16 è collegato al ripristino del display OLED.

Bene, la soluzione a questo problema è molto semplice. Il chip ESP32 è in grado di collegare le interfacce hardware seriali (UARTS) a quasi tutti i pin IO. Questo viene preso in considerazione nella funzione .begin () della libreria HardwareSerial. Questa funzione ha tre parametri aggiuntivi con cui è possibile definire la configurazione e l'assegnazione dei pin.

Serial2.begin (9600, SERIAL_8N1,12,13)

Avvia l'interfaccia hardware seriale 2 con 9600 baud e 8 bit senza parità più 1 bit di stop sui pin GPIO12 (RX) e GPIO13 (TX). In questo modo, tutte e tre le interfacce hardware seriali possono essere gestite su tutti i pin IO utilizzabili. Sulla scheda LoRa, si tratta di pin IO 11, 13, 17, 21, 22 e 23. I pin da 33 a 39 possono essere utilizzati anche per RX, in quanto non possono funzionare come uscite.

Il seguente piccolo esempio trasferisce un input nella finestra del monitor da Serial1 a Serial2 e viceversa tramite Serial1 per il test nella finestra del monitor. Per il funzionamento del programma, l'uscita TX da Seriale1 (GPIO13) deve essere collegata all'ingresso RX da Seriale2 (GPIO22) e l'uscita TX da Seriale2 (GPIO23) all'ingresso RX da Seriale1 (GPIO12).

 

 

// Definizione delle due interfacce
Serial hardware Serial1(1);
Serial hardware Serial2(2);

vuoto configurazione() {   // avvia le interfacce   serial.iniziare(115200);   // Seriale1 sui pin 12 e 13   Serial1.iniziare(9600,SERIAL_8N1,12,13);   // Seriale2 sui pin 22 e 23   Serial2.iniziare(9600,SERIAL_8N1,22,23);   // messaggio di avvio dell'output   serial.println();   serial.println("Inserisci:");

}

vuoto cappio() {   int dati;   // Stiamo aspettando l'input dalla finestra del monitor   mentre (serial.disponibile()) {     // emette i dati ricevuti via seriale1     dati = serial.leggere();     Serial1.write(dati);   }   // Stiamo aspettando i dati da Serial2   mentre (Serial2.disponibile()) {     // Emette di nuovo i dati ricevuti su Serial2     dati = Serial2.leggere();     Serial2.write(dati);   }   // Stiamo aspettando i dati da Serial1   mentre (Serial1.disponibile()) {     // Emette i dati ricevuti sul monitor     dati = Serial1.leggere();     serial.write(dati);   }

}

Ti è piaciuto il post sul blog di oggi? Scrivici e facci sapere cosa ne pensi dell'argomento. Non vediamo l'ora del tuo messaggio. Fino ad allora, ti auguriamo un buon inizio di settimana,

La tua squadra AZ-Delivery

Esp-32Progetti per principianti

5 Kommentare

Thorsten

Thorsten

Wieder einmal eine große Hilfe durch einen kleinen Artikel .
Aber da ist noch etwas offen, das ich mir auch nicht ergoogeln kann:
Die Methode begin() hat zwei weitere Parameter. Der vollständige Prototyp lautet:
void begin(unsigned long baud, uint32_t config=SERIAL_8N1, int8_t rxPin=-1, int8_t txPin=-1, bool invert=false, unsigned long timeout_ms = 20000UL);
Unter “invert” kann ich mir vorstellen, dass halt 0/1 inversen 0/3.3V Pegel haben, soweit kein Problem.
Aber der Timeout lässt offen, ob es sich um Mikrosekunden oder Millisekunden handelt. Oder gar um Bitzeiten, also Baudratenabhängig? Ausserdem – wann und wo wirkt sich das aus? Wenn das die Wartezeit des .read() auf ein char ist kann ich mir meine selbstgestrickte wartemethode mit Serial2.available() sparen.

Peter Freundorfer

Peter Freundorfer

Hallo Zusammen,
Erstmal danke für die Anregung zu der HardwareSerial, hat mir sehr geholfen.
Eine Frage hab ich noch, ihr verwendet hier ist data; als Variable, gibt es hierfür einen Grund ( data) ? Oder kann hier jede andere Bezeichnung für die variablen verwendet werden… ich möchte für eine Fehlersuche den Datenaustausch auf einer RS232 mitschreiben und würde hat gerne RX und TX in unterschiedliche Variablen schieben in die Daten sauber getrennt ablegen zu können. Über eine Antwort würde Ichsucht sehr freuen

Andreas

Andreas

Das hat mir mit wenig Aufwand viel geholfen, auch für den ESP WROOM 32. Ist ein Tool, mit dem man die Funktion der Schnittstellen testen kann und auf dem man gut aufbauen kann. Danke hierfür!

Werner

Werner

Sehr interessanter Beitrag über die seriellen Schnittstellen. Weiter so.

Neidhard

Neidhard

Ich finde es super das der ESP32 hier oft gezeigt wird. Weiter so :)

Einen Kommentar hinterlassen

Alle Kommentare werden vor der Veröffentlichung moderiert

Post di blog consigliati

  1. Installa ESP32 ora dal gestore del consiglio di amministrazione
  2. Lüftersteuerung Raspberry Pi
  3. Arduino IDE - Programmieren für Einsteiger - Teil 1
  4. ESP32 - das Multitalent
  5. OTA - Over the Air - Programmazione ESP tramite WLAN