Controllare un arduino con alexa

Hai appena comprato un dispositivo con alexa (e.g. echo dot) e ti sei già stufato di chiedere le tipiche domande divertenti come hakuna matata, distruggiti o conosci Siri? Sei un hobbista di arduino/rpi e tecnologie iot senza nuove idee? Perfetto, questo post fa per te!

E anche se non apaprtieni alla categoria di sopra potreti comunque imparare qualcosa di nuovo su questo bellissimo oggetto!

Ma cosa è alexa?

Echo Dot 3

Alexa è un assistente intelligente (come Siri, Cortana, Bixby) venduto principalmente come una cassa con microfono integrato da piazzare in casa o in ufficio. Esiste anche la versione di alexa su dispositivi mobili scaricando l'App Amazon Alexa. Per poterla utilizzare è necessario possedere un account amazon (in caso non siate in possesso di uno, basterà registrarsi al volo) e potrete iniziare a parlare con alexa e scoprire le cose divertenti da chiederle.

Peesa intelligente wifi

Alexa è stata progettata anche per l'impiego in una casa intelligente (la famosa moda della domotica esplosa qualche anno fa). Grazie ai tantissimi dispositivi compatibili con essa è possibile controllare le luci di casa (prese intelligenti), le tv ove compatibile (con Fire stick o altro), le webcam wifi e molto altro. Per configurarli basta alimentare il dispositivo, connetterlo al wifi e usare l'app oppure chiedere ad alexa di aggiungere un dispositivo.

Chiaramente tutti questi oggetti hardware hanno un costo accessibile ma l'hobbista che è in noi tenta sempre di portarci ad un banco di lavoro con microcontrollori, breadboard, fili e tante righe di codice per accendere un led. Ed è quello che andremo a fare.

Quale è la magia dietro ad alexa?

Chairamente alexa è collegata ad internet e processa di continuo il flusso audio per tradurre in parole e poi azioni ciò che noi gli diciamo. Le funzionalità di base sono già implementate da alexa per noi (quindi controllo domotico e dei dispositivi già connessi). Per tutto il resto è possibile creare delle skill per alexa.

Cosa succede quando si invia un comando ad alexa

Una skill per alexa è come una app per uno smartphone: ci sono tanti smartphone in circolazione (prendiamo ad esempio tutti i dispositivi android) e su ognuno di essi è possibile installare dallo store varie app che possono essere giochi, app di gestione file, di lettura di news, di riproduzione musica, di controllo di dispositivi e così via.
Anche per alexa è così: si possono installare skill come Akinator, La Repubblica e GialloZafferano.

Tra le varie skill alcune hanno bisogno di essere aperte ("alexa, apri GialloZaffernao") mentre altre lavorano in background per gestire le comunicazioni (specie quelle che lavorano con dispositivi hardware esterni).

Per i nostri scopi non scriveremo una skill (che richiede uno sforzo e una conoscenza troppo elevate per un progetto al volo). Utilizzeremo invece la skill Sinric.

Scopriamo la skill Sinric

Sinric è la skill creata da Aruna Tennakoon (a.k.a. kakkopappa su github) per consentire il collegamento tra alexa e un dispositivo iot come RaspberryPi, ESP8266, ESP32 o Arduino. Per utilizzarla basterà installare la skill in questione e crearsi un proprio dispositivo hardware con connessione wifi in grado di eseguire i comandi che invieremo tramite alexa.

Ma in pratica come funziona? Beh una volta registrati con un account (gratuito) sul sito, potremo aggiungere un dispositivo personale (una luce, un pulsante, una tv virtuali) che saremo in grado di controllare.
Il sito ci fornirà un codice per il nostro account API KEY univoco che non cambierà mai e un codice DEVICE ID per ogni dispositivo che aggiungeremo .

Collegamento con il microcontrollore

Con questi due codici possiamo scaricare direttamente un progetto dalla repo github e aprirlo con l'ide di arduino. Dovremmo inserire nel codice sorgente il nome della rete wifi, la password e la API KEY sopra citata. Continuando nel codice troveremo i TODO che mostrano dove mettere il codice DEVICE ID (oppure i codici, in caso controllassimo più dispositivi con un solo controller).

A questo punto è fatta, possiamo compilare, trasferire il codice sul nostro controllore e iniziare ad utilizzare alexa.
Ogni volta che invieremo un comando come accendi la luce, Sinric si preoccuperà di inviare un file json al dispositivo in questione che lo interpreterà a modo ed eseguirà l'azione richiesta.

Esempio 1: controllare una luce

Parti necessarie:

  • Scheda NodeMCU con ESP8266
  • Cavo usb di connessione
  • Un alimentatore per arduino
  • Jumper (fili)
  • Un Relè 5V che controlla carichi fino a 250v e 10A
  • Software arduino installato

Procediamo nel seguente modo:

  1. Entriamo su Sinric e creiamo un nuovo dispositivo. Forniamo un nome "luce salotto" (che si potrà modificare di nuovo dall'app di alexa) e una descrizione "controllo della luce del salotto". Alla fine Sinric lo mostrerà nella home del sito (nel nostro account) insieme al DEVICE ID.
  2. Scarichiamo il file light_example.ino di esempio dalla cartella arduino_examples della repo e apriamolo con l'ide di arduino.
  3. Sostituiamo MyApiKey, MySSID e MyWifiPassword nelle prime righe del codice con i dati della nostra wifi e della API KEY del nostro account
  4. Sostituiamo nelle funzioni turn_on e turn_off al posto di 5axxxxxxxxxxxxxxxxxxx il DEVICE ID del dispositivo appena aggiunto su Sinric (è possibile aggiungere più luci da controllare, controllare la descrizione del file, i commenti e aggiungere i dispositivi su Sinric).
  5. Colleghiamo il relè ad arduino:
    VCC->5v
    GNG->gnd
    In->D4 (ovvero il pin 2 oppure un qualsiasi pin digitale disponibile)
  6. Aggiungiamo nel codice dentro la funzione setup per inizializzare il pin:
    pinMode(2, OUTPUT);
    E nella funzione turn_on e turn_off il codice per accendere o segnere il relè:
    digitalWrite(2, HIGH)
    digitalWrite(2, LOW)
  7. Compiliamo, carichiamo su arduino

A questo punto alimentiamo il microcontrollore e aspettiamo circa un minuto (nei primi 5 secondi si avvia e si connette al Wifi, poi scambia dei dati). Chiediamo ad alexa di aggiungere un nuovo dispositivo oppure tramite l'app andiamo nella sezione aggiungi un nuovo dispositivo.

Quando alexa avrà trovato il dispositivo in questione, chiedere "alexa, accendi la luce salotto".

Esempio 2: controllare la tv

Alexa è già predisposta a controllare la tv attraverso i Fire Stick ma costano e serve anche una smart tv che la supporti Noi andremo invece a creare su Sinric un dispositivo di tipo TV.

Parti necessarie:

  • Scheda NodeMCU con ESP8266
  • Cavo usb di connessione
  • Un alimentatore per arduino
  • Jumper (fili)
  • Un emettitore a infrarossi
  • Software arduino installato

Creiamo su Sinric un dispositivo di tipo TV (chiamiamolo tv salotto) seguendo gli stessi passi di sopra e scaricando il codice di esempio chiamato tv_codec_ir.ino.

Una volta scaricato dovremo inserire i soliti dati (ssid, password, api key e device id) e poi cambiare i valori dei codici hex: ogni telecomando, alla pressione di un tasto invia tramite infrarossi un comando (in esadecimale o in binario) verso la tv che lo interpreta a dovere. Sul nostro microcontrollore viene sfruttata la libreria IRremoteESP8266.h per comunicare tramite un emettitore infrarossi (da collegare tra GND e D2).

Quindi in base al modello della propria tv dovremo camiare tutti questi codici (quelle variabili const unsigned long).
Le variabili che iniziano per TV_ riguardano i codici verso la tv quindi per accensione, spegnimento, volume, muto e così via.
Le variabili che inziano per CODEC_ sono quelle che riguardano il codec (nei casi in cui non sia incorporato nella tv) e ci scriveremo i codici per i numeri 0-9, OK, Volume +/- e così via.

Per quanto riguarda il wiring, basterà inserire il led infrarossi emettitore tra il pin D2 (il valore intero nel codice sorgente sarà 4) e GND. Se saldate altri due piccoli pezzi di fili più rigidi potrete manualmente direzionare il led verso la tv in questione. Se poi usate una mini breadboard, potrete avere un dispositivo molto compatto da piazzare in una qualunque parte della casa e alimentarlo da un qualsiasi carcatore da cellulare con micro usb.

Circuito di collegamento
Risultato finale del nostro dispositivo Iot connesso con alexa
Possibile Posizionamento nell'area di interesse

Fatto ciò compiliamo, carichiamo, aggiungiamo il dispositivo e chiediamo "alexa, accendi la tv in salotto".

Ingegnere informatico conosciuto (si spera) nel web con il nickname “fabian_57” (ma alcuni siti non me lo consentono, in quel caso fabian57fabian). Sempre pronto ad esplorare nuovi progetti con arduino, raspberry e molto altro.

Controllare un arduino con alexa ultima modifica: 2020-08-26T08:17:43+01:00 da Fabian Greavu


Advertisment ad adsense adlogger