S_BUDS3 Advertisement S_BUDS3 Advertisement S_BUDS3 Advertisement

IoT prakticky: Programovanie ESP 32 vo vývojovom prostredí pre Arduino

Mikrokontroléry
0

V predchádzajúcich častiach sme ukázali možnosti programovania moderného a výkonného mikrokontroléra ESP 32 s podporou WiFi v programovacom jazyku Micropython. Výhodou a nevýhodou Pythonu je, že je to interpretačný jazyk. Ukážeme preto aj ďalšiuveľmi rozšírenú alternatívu – programovanie ESP32 v rovnakom vývojovom prostredí, v ktorom sa programuje populárna vývojová doska Arduino. Využíva programovací jazyk, ktorý je veľmi podobný programovaciemu jazyku C, prípadne Java a zdrojový kód sa kompiluje. Pre tých, čo majú skúsenosti s Arduinom je to najjednoduchšia možnosť ako prejsť na výkonnejšiu platformu s podporou WiFi komunikácie. Zatiaľ nebudeme riešiť implementačné detaily, uspokojíme sa s tým, že podpora ESP32 sa do vývojového prostredia pre Arduino dá jednoducho pridať a následne môžete aj na tejto oveľa výkonnejšej platforme využiť skúsenosti s vývojom pre Arduino.

Konfigurácia vývojového prostredia Arduino IDE a spustenie prvého príkladu je vo videu



Čip s označením ESP 32 od spoločnosti Espressif Systems podporuje komunikačné rozhrania WiFi aj bluetooth 4.0 LE. Má dvojjadrový procesor s 32 bitovými jadrami Xtensa LX6 taktovanými na 160 MHz. Jedno jadro rieši WiFi komunikáciu a druhé máte k dispozícii pre svoj program. Jadrá sa dajú pretaktovať až na 240 MHz. K dispozícii je až 36 GPIO pinov. Kapacita pamäti Flash je 4 MB a RAM je tvorená tromi blokmi s celkovou kapacitou 520 kB. Používateľ má k dispozícii približne 400 kB RAM. Zavádzací program je v ROM s kapacitou 448 kB.

Na porovnanie tabuľka parametrov dosiek Arduino Uno a ESP 32

 
Ardunio UNO
ESP32
Architektúra
8 bit
32 bit
RAM
2 KB
512 KB
Flash
32 KB
16 MB
CPU frekvencia
16MHz
160MHz
GPIO PINy
14
36
Komunikačné zbernice
SPI, I2C, UART
SPI,I2C,UART,I2S,CAN
Piny AD prevodníka
6
18
Piny DA prevodníka
0
2

Hardvérová výbava je podrobnejšie popísaná v článku https://www.pcrevue.sk/a/IoT-prakticky--Python-na-ESP32--popis-portov-a-rozhrani

Produktová stránka výrobcu – spoločnosti Espressif je: https://www.espressif.com/en/products/hardware/esp32/overview

Na účely tohoto seriálu budeme využívať vývojový modul ESP32/DevKitC, ktorý má zabudované USB rozhranie pre programovanie cez sériovú linku a zároveň napájanie celého modulu z USB. Napájacie napätie samotného modulu je 3.3V. USB poskytuje napájacie napätie 5V, preto doska ESP32/DevKitC má aj obvody, generujúce napätie 3.3V.

Konfigurácia softvéru

Najskôr vyriešime sériovú komunikáciu s vývojovou doskou ESP 32 cez USB. Ak Windows 10 dosku nerozpoznal, nainštalujte ovládač zo stránky: 

https://www.silabs.com/products/development-tools/software/usb-to-uart-bridge-vcp-drivers

Na stránke https://www.arduino.cc si v sekcii Software stiahnite vývojové prostredie Arduino IDE. K dispozícii je pre platformy Windows, Mac OS aj Linux. Vývojové prostredie sa neinštaluje, z internetu si stiahnete priamo aplikáciu, ktorú vo Windows umiestnite do vhodného adresára a na platforme Mac OS ju z adresára Stiahnuté prekopírujete do adresára Aplikácie. ESP32 Arduino core je na GitHube.

Po spustení vývojového prostredia v menu aktivujte položku File > Preferences (v slovenskej verzii Súbor > Vlastnosti). Adresu rozšírenia pre prídavnú dosku v našom prípade ESP32

https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json

skopírujte do poľa  Additional Board Manager URLs (v slovenskej verzii Manažér prídavných dosiek URL).

Teraz aktivujte menu Tools > Board menu (alebo v slovenskej verzii Nástroje > Manažér Dosiek). Do poľa pre vyhľadávanie zadajte ESP32 a nainštalujte najnovšiu verziu doplnkov pre dosky ESP32. Návod na inštaláciu, predovšetkým URL doplnku pre dosku ESP 32 nájdete na GitHube na adrese http://txplo.re/ardesp32

V menu  Nástroje -> Doska a vyberte dosku, ktorú budete používať, v našom prípade DOIT ESP32 DEVKIT V1. Následne pomocou menu Nástroje -> Port nastavte port, ku ktorému je vaša doska pripojená.

O správnosti nastavenia portu sa presvedčíte pomocou funkcie Nástroje -> Získať informácie o Doske. Ak sa vám zobrazí aspoň ID dosky, pripojenie je správne nakonfigurované a všetko je pripravené na napísanie prvej aplikácie a jej zavedenie do dosky. Pre niektoré dosky je potrebné znížiť znížiť komunikačnú rýchlosť na 115 200 bitov/s.

Aplikácia „Blinky“

Primárnym cieľom takéhoto príkladu je uistiť sa, že máte správna nainštalované a nakonfigurované vývojárske nástroje a správne pripojené zariadenie, na ktorom aplikáciu testujete. Aby ste k doske nemuseli nič pripájať, využijeme modrú LED diódu, ktorá je priamo na doske a je pripojená k portu GPIO 2. Cieľom aplikácie je LED diódu rozblikať, čiže striedavo nastavovať na vybranom porte, ku ktorému je dióda pripojená úrovne „logická 0“ a „logická1“. 

Na rozdiel od udalosťami riadených aplikácií pre desktopové a mobilné platformy, kód pre mikrokontroléry funguje v nekonečnej slučke. Ak dôjde k nejakej udalosti vyvolá sa prerušenie, obslúži sa príslušným kódom a aplikácia sa znovu cyklí v nekonečnej sľučke Veľa napovie pripravená šablóna kódu pracovnom okne vývojového prostredia, kde sú metódy setup() a loop(). Najskôr je potrebné mikrokontrolér inicializovať, to znamená definovať ktoré piny budú vstupné, ktoré výstupné, aké budú parametre prípadných komunikačných rozhraní a podobne. V našej aplikácii nastavíme port D2 ako výstupný a v hlavnej slučke budeme v sekundových intervaloch prepínať na tomto porte hodnoty HIGH a LOW.

const byte led_gpio = 2;
void setup() {
    pinMode(led_gpio, OUTPUT); // inicializácia pinu ako výstupný.
}
 
// hlavná sľučka
void loop() {
  digitalWrite(led_gpio, HIGH);   
  delay(1000);                      
  digitalWrite(led_gpio, LOW);    
  delay(1000);                      
}

Po preložení a zostavení projektu tlačidlom na lište nástrojov prvým zľava sa zobrazí informácia o tom koľko výsledný kód a jeho premenné zaberajú v pamäti.

Projekt zaberá 207705 bytov (15%) pamäte pre program. Maximum je 1310720 bytov.
Globálne premenné zaberajú 15228 bytov (4%) dynamickej pamäti, 
312452 bytov zostáva pre lokálne premenné. Maximum je 327680 bytov.

Následne môžete program zaviesť do dosky ESP 32, kde sa spustí. Použite tlačidlo na toolbare v tvare šipky doprava. Niekedy je potrebné na module ESP držať tlačidlo „boot“, aby sa modul pripojil. Spoznáte to podľa výpisu

Serial port COM3
Connecting........_____....._____....._____.....__

Ak je všetko v poriadku výpis o priebehu zavádzania kódu sa skončí oznamom, že doska bola softvérovo zresetovaná 

Leaving...
Hard resetting via RTS pin...

Spustí sa program. LED dióda začne v sekundových intervaloch blikať.  Frekvenciu blikania nastavujete pomocou konštánt v príkazoch delay(), ktoré udávajú časový interval v milisekundách. V reálnej aplikácii by ste namiesto LED pripojili napríklad relé a spínali vhodný elektrický obvod.

Otestovali sme aj rýchlosť vykonávania inštrukcií tak, že sme vypustili príkaz delay() a zmerali sme frekvenciu generovaných impulzov. Pre slučku z dvoch príkazov sme namerali 3.2 MHz

const byte led_gpio = 2;
void setup() {
    pinMode(led_gpio, OUTPUT); // inicializácia pinu ako výstupný.
}
 
// hlavná sľučka
void loop() {
  digitalWrite(led_gpio, HIGH);   
  digitalWrite(led_gpio, LOW);    
}

Po doplnení podpory pre ESP32 pribudnú do ponuky aj príklady pre túto platformu. Odporúčam preštudovať príklady na obsluhu hardvérových komponentov, ktoré budete používať.

Na ilustráciu ukážem príklad, ktorý skenuje WiFi siete. 

#include "WiFi.h"
 
void setup()
{
    Serial.begin(115200);
 
    // Set WiFi to station mode and disconnect from an AP if it was previously connected
    WiFi.mode(WIFI_STA);
    WiFi.disconnect();
    delay(100);
 
    Serial.println("Setup done");
}
 
void loop()
{
    Serial.println("scan start");
 
    // WiFi.scanNetworks will return the number of networks found
    int n = WiFi.scanNetworks();
    Serial.println("scan done");
    if (n == 0) {
        Serial.println("no networks found");
    } else {
        Serial.print(n);
        Serial.println(" networks found");
        for (int i = 0; i < n; ++i) {
            // Print SSID and RSSI for each network found
            Serial.print(i + 1);
            Serial.print(": ");
            Serial.print(WiFi.SSID(i));
            Serial.print(" (");
            Serial.print(WiFi.RSSI(i));
            Serial.print(")");
            Serial.println((WiFi.encryptionType(i) == WIFI_AUTH_OPEN)?" ":"*");
            delay(10);
        }
    }
    Serial.println("");
 
    // Wait a bit before scanning again
    delay(5000);
}

Zoznam sietí aplikačný kód vypisuje cez sériové rozhranie. Vo vývojovom prostredí v menu Nástroje aktivujte položku Monitor sériového portu a nastavte prenosovú rýchlosť 115 200 bit/s. V okne monitora sa bude periodicky zobrazovať zoznam portov

scan start
scan done
3 networks found
1: TP-LINK_A471 (-59)*
2: DIRECT-39-HP DeskJet 2600 series (-60)*
3: TP-LINK_A471 (-76)*

x

Zobrazit Galériu

Luboslav Lacko

Všetky autorove články
IoT ESP32 arduino Arduino IDE programovanie robotika mikrokontrolery

Pridať komentár