Image
4.12.2019 0 Comments

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

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

Nechajte si posielať prehľad najdôležitejších správ emailom

Mohlo by Vás zaujímať

Mikrokontroléry

IoT prakticky: Python na ESP32 VI – webový server

24.11.2019 00:10

V šiestom pokračovaní seriálu budeme WiFi mikrokontrolér ESP 32 využívať ako webový server, ku ktorému sa dá pripojiť cez prehliadač webového obsahu. Mikrokontrolér bude môcť generovať webové stránky ...

Mikrokontroléry

IoT prakticky: Python na ESP32 V – ovládanie displejov LED, LCD a OLED

12.11.2019 00:10

V predchádzajúcej časti https://www.pcrevue.sk/a/IoT-prakticky--Python-na-ESP32-IV--kniznica-octopus-na-obsluhu-hardveru-a-komunikacie sme ukázali konfiguráciu knižnice Octopus, ktorá obsahuje triedy ...

Mikrokontroléry 3

IoT prakticky: predstavujeme jednodoskový mikropočítač ASUS Tinker board – konkurenta Raspberry Pi

06.11.2019 00:00

Tinker board je jednodoskový počítač s vysokým výkonom a grafickým výstupom. Rozmermi a konštrukčným formátom je podobný populárnemu mikropočítaču Raspberry Pi. Jeho srdcom je moderný štvorjadrový pro ...

Žiadne komentáre

Vyhľadávanie

ACER_122019

Najnovšie videá

Recenzie