Ahoj pcforumáci a priaznivci Arduina a NodeMCU, prípadne ESP32. Po veľmi dlhom čase som sa odhodlal zmeniť šablónu pre webaplikáciu ovládania hlasom pre mikrokontroléry, aby som ju lepšie dokázal sprístupniť aj verejnosti a bola ľahšia na implementáciu aj laikmi.
Na môj web som pridal ďalšie info o tomto ovládaní, doplnil som zdroje, pridal aj EN, RU jazyk. Samotná možnosť ovládania hlasom je zabudovaná do prehliadača Chrome, využíva technológiu Webkit, ktorá umožňuje speech-to-text v reálnom čase a to XHR requestom na Google servery. Nakoľko sa jedná o Google službu, je možné využiť akýkoľvek svetový jazyk vrátane regiónov, napr en-US, ale taktiež aj en-CA, en-GB a iné podľa language kódov. Táto zmena sa dáva priamo do zdrojového kódu Javascriptu. V prípade slovenčiny sa používa sk-SK jazykový kód a pre český jazyk cs-CZ.
Popis funkčnosti (zjednodušene povedané):
Používateľ klikne na mikrofón vo webaplikácii, čo aktivuje jeho mikrofón s použitím javascriptu (za predpokladu, že je povolený) a začne nahrávať hlas, to prebieha, pokým používateľ hovorí, keď dohovorí, autoamticky sa prostredníctvom XHR requestu odošle požiadavka na Google servery, vráti sa odpoveď a AJAX ju predá PHP scriptu, ktorý túto informáciu uloží do textového súboru (ten je najľahší na čítanie mikrokontrolérmi). Mikrokontróler je už iba v úlohe klienta, ktorý si obsah súboru číta a vyhodnocuje jeho obsah na vykonanie akcie.
Odpoveď na XHR request:Využil som jednoduchú Bare Boostrap šablónu, ktorá mi ponúkla ľahký grid systém na zostavenie jednoduchých stĺpcových elementov, v ktorom stránka beží. Pridal som stručné informácie, ako webaplikáciu rozbehnúť, aby ste mohli vyskúšať voice-to-text v reálnom čase aj u vás doma s jednou zo spomínaných vývojový dosiek.
V deme na vyskúšanie som sprístupnil 2 príkazy Zapni/Zapnúť Vypni/Vypnúť, k dispozícii som spravil aj obdobnú českú verziu s príkazmi Zapni/Zapnout Vypni/Vypnout. Na konci tohto príspevku je preklik na tieto stránky.
Toto ovládanie hlasom využívam primárne na ovládanie Arduina, prípadne dosiek ESP8266, či ESP32. Dôležité je iba si vyparsovať obsah .txt súboru. Problém pri webovo orientovaných aplikáciách je taký, že odpoveď prichádza ako niekoľko riadková response. Je v nej údaj o HTTP hlavičke, kód HTTP hlavičky, sprievodné informácie o serveri, napríklad verzia, engine... Tu je dôležité prečítať iba presný riadok, ktorý sa má prečítať, aby sa informácia dala porovnať v Arduino kóde cez jednoduchú if podmienku. Pre vyprasovanie premennej pri Arduine a Ethernet shielde som napísal parser, ktorý to umožňuje a prebytočnú časť hlavičky zahodí. Parser je momentálne vyhotovený pre 12 riadkovú response, ktorú webserver vracia na HTTP request. (Môže sa líšiť podľa servera, enginu, rošírení)
Na mojom webe som sprístupnil i kódy pre mikrokontroléry, konkrétne v spojení: Arduino + Ethernet shield W5100 (totožný kód funguje aj s W5500, ale vyžaduje zmeniť knižnicu na Ethernet2.h) a NodeMCU, ESP32. Dosku ESP32 je možné napojiť aj na podnikovú sieť, či univerzitnú - Eduroam pod protokolom 802.1x (WPA/WPA2 Enterprise).
Aby Webkit na webserveri mohol bežať, je nutné, aby server bežal pod HTTPS protokolom a toto je niekedy veľký problém, nakoľko Arduino sa s Ethernet shieldom nedokáže pripojiť na HTTPS web, preto je nutné mať aj jeden variant tohto webu i druhý, napríklad primárne
https://web.sk a sekundárne
http://www.web.sk, aby sa Arduino dokázalo pripojiť, pri NodeMCU to nie je problém, nakoľko plne podporuje HTTPS, rovnako aj ESP32. Vývojová doska ESP32 ale vyžaduje root certifikát priamo do svojho programu, čo je trochu ťažšie na implementáciu z dôvodu pridania ukončovacích znakov riadku. Pri ESP8266 (NodeMCU) doskách stačilo na HTTPS spojenie pridať do zdrojového kódu odtlačok HTTPS certifikátu v SHA1 formáte.
Ak bude stránka pod HTTP protokolom, Chrome nedovolí zapnúť mikrofón!
Priamo vo webaplikácii je možné vidieť aktuálny stav zariadenia pri ovládaní hlasom, vďaka Ajaxu sa stav mení okamžite bez nutnosti refreshu stránky.
Zapnuté:
Vypnuté:
Ak máte chuť túto webaplikáciu vyskúšať, navštívte môj web, kde je možné nájsť aj zdrojové kódy pre mikrokontroléry Arduino a NodeMCU, ESP32 (zatiaľ s HTTP requestom). K dispozícii je EN, RU, CS, SK verzia.
Info o webaplikácii + zdrojové kódy pre mikrokontroléry:
https://arduino.php5.sk/ovladanie-hlasom.phpProjekt na Githube CS a SK verzia:
https://github.com/martinius96/Ovladanie-hlasom-Arduino-NodeMCU-ESP32CS:
https://arduino.php5.sk/PHP_cs/SK:
https://arduino.php5.sk/PHP_sk/EN:
https://arduino.php5.sk/PHP_en/RU:
https://arduino.php5.sk/PHP_ru/Postupujte prosím podľa inštrukcií na stránke!
Projekt je možné využiť na akýkoľvek účel, projekt je pod MIT licenciou. Web je univerzálny a je možné použiť na akýkoľvek mikrokontróler s konektivitou na web (C.H.I.P, Raspberry, Bigclown, micro:bit a mnoho iných).