Acum aproximativ 3 săptămâni m-am apucat să fac ordine printre arduino și senzori și am găsit un NeoPixel de care și uitasem că îl am am zis hai totuși să mă joc cu el, cine știe ce idee îmi mai vine. Am reușit să îl fac să lumineze, am găsit si diferite moduri de iluminare și m-am jucat cu el câteva ore.
Am zis că dacă tot nu am o lampă mai inteligentă prin casă, hai că îl fac să lumineze și eventual să îi pun un buton ca să îl opresc, dar nu am mai adăugat butonul.
A mai trecut o zi și m-am gândit că: ce ar fi dacă aș putea să îl controlez pe interfața serială printr-un script python; că și așa mă jucasem cu interfața serială în python acum 3 ani când controlam laptopul printr-un arduino la care avem legată o telecomandă.
Mi-am bătut capul cu transmisia de date din python către arduino prin faptul că am uitat să adaug un mic delay imediat după deschiderea interfeței seriale iar informațiile care se scriau nu ajungeau pe arduino.
L-am implementat inițial cu două comenzi, una pentru a porni neopixelul(care rulează un curcubeu pe acesta) si una pentru a opri neopixelul.
După ce am testat codul l-am mutat pe Raspberry Pi deoarece le el voiam să leg arduino și dacă tot l-am mutat pe Raspberry de ce să nu încerc să pot porni și opri neopixelul dintr-o pagină web că și așa aveam un server de apache cu care mă mai jucam și rula pe Raspberry.
Aici începe adevărata distracție pentru că nu înțelegeam de ce nu se rula scriptul python din php. După o oră de debug pe toate părțile și încercat metode diferite de rulat, verific logurile de eroare din apache și eroarea era de la faptul că userul sub care rulam scriptul python nu avea drepturi să deschidă interfața serială către arduino. Reușesc într-un final să rezolv această problemă și în sfârșit puteam să aprind și să stâng neopixelul din interfața web atât de pe PC cât și de pe telefon.
Între timp, pe lângă pornit și oprit am mai adăugat ca și funcționalități să pot seta intensitatea luminoasă respectiv culoarea în care să lumineze neopixelul.
Acum că am terminat cu introducerea, de unde până unde joaca cu Google Assistant?
La câteva zile după ce îmi funcționa să aprind și să sting neopixelul, într-o seară mă gândeam că mi-ar fi m-ai comod să am un asistent care să îl pornească și să îl oprească pentru mine. Aici a intervenit următoarea dilemă pentru mine: Google Assistant sau Amazon Alexa? Am cerut și eu sfaturi, ce să aleg și dintre Google Nest Mini și Echo Dot gen 3 și după ce am cântărit argumentele am optat pentru Google Nest Mini. Mă bucură tare faptul că Nest-ul meu a venit cu încărcător pentru România doar că după ce l-am băgat în priză mă salută în italiană. Chiar râdeam cu un prieten când desfăceam cutia, că e scris în italiană pe ea la care el: „O să îți zică: Ciao… când o bagi în priză” și fix așa a și fost.

În continuare o să prezint partea tehnică a magiei din spatele comenzilor pentru a porni și opri cu Google Assistant neopixelul.
- Pentru a prelua comanda vocală am folosit IFTTT. Platforma IFTTT îți permite ca având un trigger să se execute o comandă – If This(<trigger>) Then That(<comandă>) . Deci am folosit ca și trigger Google Assitant iar comanda pe care am vrut să o execute a fost un request de tipul POST către serverul meu de apache.
- Pe server, în funcție de comanda care se afla în body-ul requestului, se apelează scriptul de python cu parametrii corespunzători.
- Scriptul python trimite comanda mai departe către arduino care aprinde sau stinge neopixelul.
Ce este comun atât pentru comenzile din browser cât și pentru cele date vocal sunt pașii începând cu POST requestul care se face. Am optat pentru acest mod de structurare a aplicației pentru a putea face cât mai puține modificări în dezvoltările ulterioare.
În continuare vă prezint un mic demo:
În perioada următoare o să vă prezint și alte comenzi pe care le-am implementat cu Google Assistant.
P.S. Aș dori să le mulțumesc studenților mei pentru că m-au inspirat să mă apuc de acest proiect. 🙂
Răspunde-i lui Macro-KeyBoard | Andrei Diaconescu Anulează răspunsul