Robotul Hexspider revizuit!

Pentru Google I / O anul acesta, am testat biblioteca Google Cloud Arduino JWT pentru a produce o demonstrație în care niște roboți mici păianjen hexbug au fost controlați utilizând Core Cloud IoT Google. Puteți citi postarea mea pe blog pentru a afla mai multe despre lucrurile de făcut și nu pentru demo și puteți consulta și prezentarea completă pe YouTube:

Demo-ul a fost limitat în câteva moduri, majoritatea n o tabel bibliotecii a funcționat prin HTTP în loc de protocolul MQTT mai receptiv. Începând cu versiunea Arduino v1.0.5 și mai târziu, există acum un client MQTT care funcționează cu placa Esp8266. Pentru știință, am decis să migrez demo-ul la biblioteca actualizată. Această postare va acoperi observațiile mele.

Migrația

Am reușit să migrez codul HTTP către MQTT în mai puțin de o oră datorită participării la actualizările bibliotecii și cunoașterii codului Hexspider. Aș putea enumera toate modificările din esențiale, dar este probabil mai ușor să le urmăriți aruncând o privire asupra diferențelor din această cerere de extragere.

Prima modificare a fost eliminarea antetului HTTP și introducerea în antetul MQTT din exemplele Esp8266. Acest lucru a necesitat modificări în fișierul .ino principal al proiectului pentru a elimina metoda de configurare HTTP ( setupWifi ) și pentru a adăuga două noi metode de configurare:

Următoarea modificare a fost eliminarea funcției de interogare, getHexConfig și înlocuirea acesteia cu un getter pentru răspunsul actualizat returnat de la MQTT. Am adăugat și o metodă de apel invers, spiderMessage și am adăugat-o la codul MQTT. Apelarea va fi declanșată de fiecare dată când un mesaj MQTT este trimis de bridge-ul Cloud IoT MQTT. Deoarece mesajul nu mai trebuia decodat în baza 64 (vin ca text pentru MQTT) am putut înlocui analizorul cu String.toInt . Singura problemă a fost că implementarea Arduino a toInt returnează 0 la eșec, un cod de mesaj pe care îl foloseam deja. Am incrementat codurile mesajului și apoi am putut folosi 0 pentru a indica eșecul.

După ce am făcut toate modificările protocolului la demonstrație, mesajele de înregistrare au devenit prea frecvente, așa că le-am eliminat. În plus, robotul a devenit prea receptiv la transmiterea datelor sale de telemetrie – momentul pentru înregistrarea și transmiterea telemetriei după mutarea capului robotului depindea de latența HTTP – așa că am adăugat o întârziere de 200 ms după transmiterea codurilor IR pentru rotirea capului robotului.

Odată cu toate aceste schimbări, demo-ul a fost din nou în funcțiune și rulează pe MQTT!

Rezultatele

În următorul videoclip, puteți vedea câteva aspecte esențiale ale îmbunătățirilor de performanță de la utilizarea MQTT în loc de interogare HTTP:

În primele 15 secunde ale videoclipului, roboții nu sunt conectați la controlere. Robotul cu pălăria cu pene folosește MQTT, pălăria pătrată este HTTP. Dacă te uiți la modelele de clipire de pe pălării, LED-ul robotului cu cap pătrat clipește mai rar și are puncte în care LED-ul rămâne aprins. Când LED-ul robotului HTTP este aprins, acest lucru se datorează faptului că punctul de pornire al LED-ului este înainte ca solicitarea de extragere a configurării să fie returnată de robot. Rețineți cum robotul MQTT clipește rapid și constant – acest lucru se datorează faptului că actualizările MQTT au loc asincron și rareori blochează execuția codului robotului.

În următoarea secțiune a videoclipului, roboții sunt amândoi complet conectați și răspund la modificările de configurare trimise dispozitivelor. Ambii roboți răspund la modificarea inițială a configurației, dar există o întârziere notabilă între cei doi timpi de răspuns ai roboților în cea de-a doua modificare a configurației. Acest lucru se datorează cererii anterioare de blocare a robotului HTTP în timp ce s-a produs modificarea configurației.

Concluzii

Dacă utilizați HTTP pe un dispozitiv care ar putea folosi MQTT, ar trebui să luați în considerare comutarea. Codabilitatea MQTT este pur și simplu mai bună, deoarece elimină preocuparea de a urmări dacă un nou ID de configurație a fost transmis pe dispozitivul dvs. și vă permite să vă îndepărtați de interogare pentru o performanță mai bună. O nouă conexiune nu mai trebuie creată pentru transmiterea datelor de telemetrie, ceea ce îmbunătățește și performanța dispozitivului.

Pentru a îmbunătăți în continuare capacitatea de răspuns a demonstrației, puteți migra codul pentru a utiliza în schimb funcția beta Comenzi, care permite actualizări mult mai frecvente ale dispozitivului dvs. și nu suprasolicită funcționalitatea configurării dispozitivului. Dacă ați dori cu adevărat să folosiți performanța, ați putea folosi un microcontroler dual-core și puteți dedica unul dintre nuclee gestionării comunicării MQTT și ați putea vedea un impuls semnificativ în sensibilitatea roboților dvs. prin cablu.

Actualizare : începând cu 2018-12-05, funcția Comenzi este în general disponibilă!