SAMSUNG_092021 Advertisement SAMSUNG_092021 Advertisement SAMSUNG_092021 Advertisement

IoT a robotika: Ovládanie zariadenia s mikrokontrolérom ESP32 mobilnou apkou II.

0

predchádzajúcej časti miniseriálu sme ukázali jednoduchý príklad vytvorený vo vývojovom prostredí Arduino IDE ako ovládať zariadenie s mikrokontrolérom ESP32 pomocou mobilnej aplikácie, ktorá komunikuje s ESP 32 cez bluetooth vrátane konfigurácie vývojového prostredia, programového ovládania portov, sériovej komunikácie, komunikácie cez bluetooth a napokon ovládanie pomocou povelov zatiaľ s využitím hotovej aplikácie Serial Bluetooth Terminal

Vývojové dosky s platformou ESP32 sú výkonné zároveň lacné (typicky 8 – 15 eur) a už priamo na čipe je vyriešená komunikácia cez bluetooth aj WiFi, takže sa jedná o plnohodnotnú IoT platformu.

Video s príkladom

 

Pre príklad použijeme na ovládanie hotovú aplikáciu Serial Bluetooth Terminal. Neskôr ukážeme vytvorenie vlastnej jednoduchej Android aplikácie na posielanie príkazov pre ESP32.

Pri pripomíname, že pri zavádzaní programu z Arduino IDE je na niektorých vývojových doskách s ESP32 potrebné po začiatku zavádzania na chvíľu pridržať tlačidlo Enable/Reset.

Vysvetlenie fungovania príkladu z prvej časti

Našou snahou bolo ukázať krok za krokom postup vytvorenie jednoduchého, ale kompletného príkladu na ovládanie v jednom článku, takže začneme podrobným vysvetlením príkladu. Pomocou jednoznakových povelov posielaných cez mobilnú aplikáciu sme striedavo rozsvecovali a zhasínali dve LED-ky. Príkazom „C“ sme menili stav červenej LED a príkazom „M“ stav modrej LED.

Zdrojový kód príkladu

#include "BluetoothSerial.h"
 
BluetoothSerial SerialBT;
const int ledRed = 32;
const int ledBlue = 33;
 
int LedStavRed=HIGH;
int LedStavBlue=HIGH;
 
void setup() {
  Serial.begin(115200);
  SerialBT.begin("ESP32test"); //Bluetooth device name
  Serial.println("Zariadenie je pripravené na párovanie cez bluetooth!");
 
  pinMode(ledRed, OUTPUT); //LED
  pinMode(ledBlue, OUTPUT);
}
 
void loop() {
   if(SerialBT.available()) // ak dáta prišli
   {
      char cc = SerialBT.read();
      Serial.write(cc);
      if(cc == 'C') LedStavRed = !LedStavRed;
      else if(cc == 'M') LedStavBlue = !LedStavBlue;
      digitalWrite(ledRed, LedStavRed);
      digitalWrite(ledBlue, LedStavBlue);
      delay(20);
  }
}

 

Budeme využívať knižnicu BluetoothSerial, takže je potrebné k projektu pripojiť jej definičný súbor. Hĺbahejší čitatelia si tento súbor, ktorý obsahuje všetky funkcie objektu môžu zobraziť na GitHube.

#include "BluetoothSerial.h"

Deklaráciou

BluetoothSerial SerialBT;

vytvoríte objekt, ktorý bude mať na starosti komunikáciu cez bluetooth.

Všimnite si, že v príklade sa využíva nielen sériová komunikácia s mobilnou aplikáciou cez bluetooth, ale zároveň aj sériová komunikácia s vývojárskym počítačom, takže stavové a ladiace informácie posielať cez sériový kanál a vypisovať vo vývojovom prostredí Arduino IDE v okne monitora sériového portu. Veľmi vám to uľahčí ladenie kódu. Všimnite si kód vo funkcii setup(). Táto funkcia sa zavolá na začiatku a obsahuje kód na inicializáciu a počiatočné nastavenie. Treba rozlišovať objekt Serial na komunikáciu s PC po kábli a objekt ktorý sme nazvali  SerialBT pre bluetooth komunikáciu.

Najskôr nastavíme prenosovú rýchlosť sériovej komunikácie s PC  na 115 000 baudov, čiže bitov za sekundu.

Serial.begin(115200);

Následne inicializujeme bluetooth komunikáciu. Parametrom je textový reťazec, ktorý uvidíte v smartfóne, alebo tablete pri párovaní s bluetooth zariadeniami

  SerialBT.begin("ESP32test"); //Názov Bluetooth zariadenia

Potrebujeme nejako používateľovi signalizovať, že zariadenie je pripravené na párovanie. Väčšinou sa vypíše oznam na displeji, alebo sa rozbliká modrá LED. Naše cvičné zapojenie displej nemá. Modrú LED síce má, ale jednoduchý kód na niekoľko riadkov sme nechceli komplikovať o blikanie LED, takže pripravenosť na párovanie so smartfónom budeme provizórne indikovať ladiacim výpisom cez sériový kanál   

  Serial.println("Zariadenie je pripravené na párovanie cez bluetooth!");

Ak sa v okne terminálu Arduino IDE zobrazí táto správa, znamená to, že objekt pre bluetooth komunikáciu bol úspešne vytvorený a inicializovaný a môžete svoje zariadenie s ESP 32 párovať zo smartfónom, alebo tabletom. V tomto seriáli budeme využívať smartfón s Androidom a aplikáciu Serial Bluetooth Terminal. Podobná aplikácia na sériovú komunikáciu je k dispozícii aj pre iPhone a iPad pod názvom Bluetooth Serial Lite.

V nastaveniach smartfónu povoľte bluetooth a spárujte smartfón so zariadením ESP32test. V aplikácii Serial Bluetooth Terminal je ľavom hornom rohu obrazovky ikona tzv hamburgerového menu (tri vodorovné čiarky). V menu vyberte položku Devices a malo by sa vám zobraziť v zozname spárovaných zariadení aj „ESP32test“. Vyberte toto zariadenie a môžete začať komunikovať, čiže posielať a prijímať správy. V našom prípade môžete zadaním znakov C a M ovládať červenú a modrú LED.

Vo funkcii nekonečnej prázdnej slučky loop() kontrolujeme, či z modulu Bluetooth prichádzajú nejaké údaje. Ak áno, údaje sa načítajú a ukladajú do premennej cc. Túto hodnotu zároveň vypíšeme na PC cez sériový monitor, aby sme skontrolovali, čo ESP32 prijíma.

if(SerialBT.available()) // ak dáta prišli
{
   char cc = SerialBT.read();
   Serial.write(cc);
         ..
}

prijatý údaj uložený v premennej cc porovnávame s očakávanou hodnotou a vykonáme požadovanú akciu. V našom prípade zmeníme stavové premenné pre červenú a modrú LED

if(cc == 'C') LedStavRed = !LedStavRed;
else if(cc == 'M') LedStavBlue = !LedStavBlue;

Následne nastavíme porty na ktoré sú pripojené LED-ky podľa aktuálne nastaveného stavu

digitalWrite(ledRed, LedStavRed);
digitalWrite(ledBlue, LedStavBlue);

LED-ky sme použili ako najjednoduchšie výstupný prvok. V reálnom zariadení by ste pomocou signálov na vstupno-výstupných portoch ovládali čokoľvek, napríklad motorčeky, relé, elektromagnety a podobne, samozrejme nie priamo, alebo prostredníctvom spínacích tranzistorov, či rôznych riadiacich obvodov, napríklad pre jednosmerné, alebo krokové motory.

Popis pinov vývojovej dosky s ESP32, ktorú sme použili v príklade

Úmyselne sme použili príkazy na zmenu stavu a nie priame príkazy na zapnutie a vypnutie, pretože sme predpokladali, že zariadenie sa môže paralelne ovládať aj lokálne, napríklad pomocou tlačidiel.  Takže ak niekto zapne zariadenie napríklad na porte GPIO 4 pomocou tlačidla, alebo menu na lokálnom displeji, povelom z mobilnej aplikácie zmeníte stav, čiže zariadenie vypnete. Vo väčšine prípadov je žiadúce, ak nie priem nevyhnutné, aby sa zmeny vykonané pomocou lokálnych ovládacích prvkov prejavili aj v mobilnej aplikácii. Komunikácia, či už cez sériové rozhranie, alebo cez bluetooth, čo je vlastne len iná forma sériovej komunikácie je obojsmerná, takže to nie je žiadny problém.

V budúcom pokračovaní ukážeme kompletný postup vytvorenia jednoduchej  Android aplikácie na ovládanie ESP32 cez bluetooth.

S predstihom si môžete pozrieť video

Video s príkladom