ESP32 a Hardwarová sériová linka

Pokud jste četli starší návody věnované podpoře vývojových desek ESP32 a Arduina, tak víte, že ESP32 má několik rozdílů oproti své starší verzi ESP8266 a také běžným Arduino deskám. V tomto návodu se zaměříme na práci se sériovými linkami.
Jak asi víte, tak například Arduino UNO deska má pouze jednu sériovou linku na pinech D0 a D1, přes kterou zároveň komunikuje s počítačem. U desky Arduino MEGA jsou to už čtyři sériové linky, díky čemuž můžeme na přidané tři UART rozhraní připojit další obvody. Ale u desky ESP8266 to byla opět pouze jedna sériová linka. U všech zmíněných desek máme také ale možnost využít softwarovou variantu, která se nazývá SoftwareSerial. Díky ní pak můžeme u vybraných pinů nastavit další rozhraní pro UART komunikaci, která má ale například rychlostní omezení apod.

U desky ESP32 je situace jiná. Tento čip totiž obsahuje tři hardwarové sériové linky, kdy HardwareSerial0 slouží pro komunikaci s počítačem. Další dvě rozhraní ale lze namapovat na vybrané piny, kdy RX pin můžeme nastavit na libovolný pin a TX pin na GPIO0 až GPIO31.

Uvedený ukázkový kód obsahuje na svém začátku nastavení čísel propojovacích pinů, po kterém následuje inicializace hardwarových sériových linek 1 a 2.
V dalším kroku v podrogramu setup zahájíme komunikaci všech tří linek. U hardwarových sériových linek vidíme, že jako první parametr zadáme rychlost komunikace, dále druh komunikace, číslo pinu RX a číslo pinu TX.
V nekonečné smyčce loop pak už pracujeme se sériovými linkami tak, jak jsme byli doposud zvyklí. Vidíte tedy například ukázku, ve které kontrolujeme, jestli nám na sériovou linku hwSerial_1 nepřišly nějaké znaky. Pokud nějaký znak najdeme, uložíme ho do proměnné a následně vytiskneme do počítače přes rozhraní Serial.

// ESP32 Hardwarová seriová linka

// nastavení čísel propojovacích pinů
#define RX1 16
#define TX1 17
#define RX2 30
#define TX2 31
// inicializace sériových linek 1 a 2
HardwareSerial hwSerial_1(1);
HardwareSerial hwSerial_2(2);

void setup() {
  // Zahájení komunikace pro:
  //  HW serial port pro propojení s PC
  Serial.begin(115200);
  //  HW Serial porty na daných pinech RX a TX
  hwSerial_1.begin(9600, SERIAL_8N1, RX1, TX1);
  hwSerial_2.begin(115200, SERIAL_8N1, RX2, TX2);
}

void loop() {
  while (hwSerial_1.available()) {
    // vytvoření proměnné pro uložení načteného znaku
    char c = hwSerial_1.read();
    Serial.write(c);
  }
}

Hardwarová sériová linka je speciální funkcí desek s čipem ESP32. Na první pohled se může zdát, že nastavení hw UARTu je podobné SoftwareSerial, ale oproti softwarové variantě má ta hardwarová výhodu například v podporovaných vyšších rychlostech či menší zátěži procesoru.
Tato funkcionalita se používá často při připojení modulů jako je GPS či GSM nebo když chceme pomocí sériové linky propojit více desek mezi sebou.

Seznam použitých komponent:
https://dratek.cz/arduino/1581-esp-32s-esp32-development-board-2-4ghz-dual-mode-wifi-bluetooth-antenna-module-1493028819.html

Další podobné články