Sommario:

LED controllati da Google Home: 8 passaggi
LED controllati da Google Home: 8 passaggi

Video: LED controllati da Google Home: 8 passaggi

Video: LED controllati da Google Home: 8 passaggi
Video: Zigbee LED Controller - универсальность за небольшую цену, Tuya, HomeKit, Home Assistant, биндинг 2024, Novembre
Anonim
LED controllati da Google Home
LED controllati da Google Home
LED controllati da Google Home
LED controllati da Google Home

Ultimamente ho avuto molto tempo libero a disposizione, quindi ho lavorato a un sacco di progetti.

Questo progetto ti consentirà di controllare i LED RGB tramite Google Home utilizzando un Raspberry Pi. Ora ci sono 3 parti del progetto, l'impostazione di un Raspberry Pi, l'impostazione di Google Home con un comando personalizzato utilizzando IFTTT e quindi la creazione di un circuito per le luci. Ho realizzato il circuito da solo, ma scommetto che potresti ottenere qualcosa da Adafruit che fa ciò che è necessario.

Materiali per la parte Raspberry Pi

  • Raspberry Pi: qualsiasi funzionerà, ma sto usando uno Zero
  • Wireless Dongle - se il Pi non ha Wi-Fi integrato
  • Google Home - Facoltativo se hai l'Assistente Google sul telefono

Materiali per la parte del circuito: non lasciarti scoraggiare… È abbastanza semplice

  • Protoboard
  • Filo
  • Striscia LED
  • Alimentatore a 12 V: qualsiasi cosa al di sopra di 2 Amp dovrebbe andare bene
  • DC Barrel Jack - Stesse dimensioni del tuo alimentatore
  • Transistor di potenza NPN BJT (x3) - Sto usando TIP31C
  • Intestazioni pin maschio e femmina - Facoltative, ma altamente consigliate

Passaggio 1: download di Express per Pi

Scaricare Express per il Pi
Scaricare Express per il Pi

Non entrerò nei dettagli sulla configurazione del Pi perché ci sono così tanti tutorial là fuori per configurarli.

Quello che dovrai fare che non sto coprendo…

  • Lampeggiante Raspberry Pi con il nuovo Raspbian
  • Configura la scheda di rete in modo da poter accedere a Internet dal Pi
  • Imposta un IP statico sul Raspberry Pi

Ora è qui che inizia il divertimento! Dobbiamo installare nodeJS, npm, express e express-generator.

sudo apt-get update

sudo apt-get install nodejs npm

Una volta installati, esegui quanto segue

npm install express-generatore

Express ti consente di creare un server web molto semplice da utilizzare per il tuo Raspberry Pi. Il generatore Express genera automaticamente i file per un server espresso.

Crea una directory e cd nella directory. Ho chiamato la mia piWebpage. Ora esegui quanto segue (visto anche nella foto)

mkdir piWebpage

cd piWebpage express --view=ejs webApp

Questo genererà una cartella denominata webApp con tutti i file express al suo interno. Se hai intenzione di fare di più con questa pagina web in un secondo momento e ti piace PUG, sostituisci --view=ejs con --view=pug. Non toccheremo la pagina web, quindi per questa applicazione non importa cosa usiamo.

Passaggio 2: configurazione del server Pi

Spostati nella nuova directory webApp.

cd webApp

installazione npm

npm install richiederà del tempo perché sta installando tutte le dipendenze per express.

Incolla setColor.py nella cartella webApp. Questo file contiene alcuni preset per i colori di base. Sentiti libero di aggiungerne altri come preferisci. L'intervallo è compreso tra 0 e 255, dove 255 è a colori. Ad un certo punto, probabilmente aggiungerò la possibilità di abbassare le luci, ma per ora sono a piena luminosità.

Spostati nei percorsi

percorsi cd

Ora sostituisci index.js con il file allegato. Questo aggiungerà alcune righe per ricevere un comando POST che è ciò che Google Home invierà. Da quel POST, otterremo il colore selezionato e diremo al Pi di eseguire lo script python setColor per regolare le luci.

Un'ultima cosa… Torna alla cartella webApp.

cd ~/piWebpage/webApp

Usando il tuo editor preferito, incolla e salva il codice qui sotto nel tuo webApp.js. Ovunque va bene purché sia prima di "module.exports = app;"

// Imposta driver hardware LED const {exec} = require('child_process'); exec('sudo pigpiod', (err, stdout, stderr)=>{ if(err){ console.log('Errore caricamento driver LED'); return; }else console.log('Driver LED caricato con successo'); });

Come dice il commento, pigpiod è il driver hardware per i segnali PWM che useremo per regolare i colori dei LED. Credo che sia già installato in Raspbian, ma in caso contrario…

sudo apt-get install pigpiod

Ora per la vera prova! Avvio del server!

DEBUG=webapp:* npm start

Passaggio 3: configurazione IFTTT (trigger)

Configurazione IFTTT (trigger)
Configurazione IFTTT (trigger)
Configurazione IFTTT (trigger)
Configurazione IFTTT (trigger)

IFTTT può fare molto e consiglio vivamente di dare un'occhiata ad alcune delle applicazioni.

Per prima cosa, dovrai creare un account. Usa lo stesso account Google associato al tuo Google Home, altrimenti non si sincronizzeranno insieme. Una volta completato e effettuato l'accesso, fai clic in alto a destra nella pagina IFTTT dove mostra il tuo nome e avatar. Quindi fai clic su Nuova applet dal menu a discesa.

Se sei curioso, IFTTT sta per IF This Then That se non te ne sei accorto dalla schermata che si apre. Quindi quello che vogliamo è Se Google Assistant, quindi Webhook come nostre opzioni.

Procedi facendo clic su +questo per caricare una barra di ricerca. Nella ricerca, digita Assistente Google e fai clic sull'icona sotto la ricerca.

In Scegli un trigger, seleziona la terza opzione chiamata Pronuncia una frase con un ingrediente di testo. Ora questo ti permette di avere 3 comandi che faranno la stessa azione. Aggiungi $ nella frase in cui menzioneresti il colore. Ad esempio, se dicessi naturalmente Hey Google, Set LEDs Blue (naturale come può essere urlare contro un dispositivo), allora digiterei nel campo Set LEDs $. Fallo per tutti e 3 i campi con versioni diverse del comando.

I 3 che ho usato erano

LED $

Imposta LED $

Imposta il colore del LED $

L'ultimo campo è quello che vorresti che il tuo Google Home rispondesse dopo aver pronunciato il tuo comando. Può essere qualsiasi cosa tu voglia, ma ho usato l'impostazione del colore su $. Il $ significa che ripeterà il colore indietro.

Fare clic su Crea trigger

Passaggio 4: configurazione IFTTT (azione)

Configurazione IFTTT (azione)
Configurazione IFTTT (azione)
Configurazione IFTTT (Azione)
Configurazione IFTTT (Azione)

Dopo aver fatto clic su Crea trigger, ricaricherai la vista se questo e poi quello, ma questo è stato sostituito con il logo dell'Assistente Google. Procedi facendo clic su +che

Stessa cosa di prima dove ti porta alla barra di ricerca. Digita Webhook e fai clic sull'icona del webhook sotto la barra di ricerca. In Scegli azione per webhook, c'è solo un'opzione, quindi fai clic su Effettua una richiesta web.

Qui è dove le cose si fanno un po' complicate. Poiché Google non è un altro computer di casa tua, avrai bisogno del tuo indirizzo IP esterno. Ciò richiederà un port forwarding, ma ne parleremo più avanti. Per ottenere il tuo indirizzo IP esterno, vai su

Nel campo URL, digita https://xxx.xxx.xxx.xxx:3000/{{TextField}} (dove le x sono il tuo indirizzo IP esterno). Se sei curioso, TextField avrà il colore che hai selezionato quando esegui un comando. Il motivo per cui usiamo 3000 è perché questa è la porta su cui è in esecuzione il server Raspberry Pi Express. (Puoi cambiare la porta nel codice, ma stiamo solo usando le impostazioni predefinite per Express)

Per Metodo, seleziona POST.

Per Tipo di contenuto, seleziona testo/normale.

Per Corpo, digita {{TextField}}

Quelli di voi che sanno come funziona un comando POST, penserebbero che se si analizzasse la proprietà del corpo della richiesta si otterrebbe il colore. Per qualche ragione, non viene mai inserito nulla nel campo del corpo della richiesta, quindi sto effettivamente analizzando l'URL per il colore. Spero che venga risolto presto, poiché ciò semplificherebbe il mio codice nel percorso index.js. Ma sto divagando.

Infine, fai clic su Crea azione e poi su Fine nella pagina successiva. (Ho disattivato le notifiche, ma questa è la preferenza)

Passaggio 5: inoltro alla porta

Port forwarding
Port forwarding
Port forwarding
Port forwarding

È qui che le cose diventano difficili da spiegare perché tutti i router sono diversi…

Ora abbiamo Google che invia un comando a casa nostra utilizzando la porta 3000, ma non sa a quale dispositivo della LAN deve andare. Per rimediare, dobbiamo inoltrare la porta 3000 all'indirizzo IP locale del tuo Raspberry Pi.

Entra nel tuo router usando 10.0.0.1 o 192.168.1.1 (l'ho visto anche dove l'ultima cifra è 254) e trova il port forwarding. Nel port forwarding, simile all'immagine, nominerai un nuovo dispositivo (IFTTT) e inoltrerai la porta (3000) all'indirizzo IP del Pi (nel mio caso 10.0.0.11).

Salva la tua nuova impostazione, riavvia il router e controlla che il tuo server Raspberry Pi sia ancora in esecuzione. Se non è in esecuzione, riavvialo.

Torna a quel pratico sito web https://canyouseeme.org/. Sotto il tuo indirizzo IP, ha un controllo delle porte. Supponendo che il port forwarding sia corretto, digita 3000 e premi check port. Dovrebbe tornare con un successo.

Passaggio 6: verifica del lavoro svolto finora

Controllando il tuo lavoro finora
Controllando il tuo lavoro finora
Controllando il tuo lavoro finora
Controllando il tuo lavoro finora

Ora… il momento che stavi aspettando… Dì a Google un comando come LED blu (se hai seguito il mio esempio).

Supponendo che tutto sia andato a buon fine, otterrai l'output mostrato nell'immagine. Non abbiamo ancora un circuito, quindi vedrai solo un testo su uno schermo. Di solito c'è un secondo o 2 di ritardo prima che venga elaborato da Google e appaia sul Pi.

(Passa al passaggio successivo se è uscito in modo simile all'immagine)

Ora ci sono alcune cose da guardare se non ha funzionato…

Nella foto c'è una riga che dice

POST /colore/blu 200 250.458 ms - 2

Il 200 è la parte importante. Se non vedi un 200, c'è stato un POST errato, il che significa che il tuo server non sapeva cosa fare con i dati. Torna al passaggio 2 e controlla il file index.js.

Anche nella foto

stdout: blu

stderr:

Questo è l'output del file python che esegue i LED. Se vedi un errore lì, potrebbe essere che tu non abbia installato il driver al passaggio 2.

Infine, se non viene visualizzato nulla … il tuo IFTTT potrebbe non essere stato configurato correttamente o non è riuscito a connettersi al server. Torna alla pagina IFTTT e nella barra di navigazione in alto, fai clic su Attività. Lì puoi vedere ogni volta che la tua app è stata eseguita e, se si è verificato un errore, puoi vedere di cosa si trattava. Ho eseguito un comando Google con il server Pi spento e ho ricevuto l'errore nell'immagine.

Passaggio 7: costruire il circuito

Costruire il circuito
Costruire il circuito
Costruire il circuito
Costruire il circuito
Costruire il circuito
Costruire il circuito

Il motivo per cui dobbiamo farlo è perché il Raspberry Pi non ha abbastanza potenza… Quindi la soluzione è… PI POTENZA (Tim l'uomo degli attrezzi Taylor grugnisce in lontananza). AKA un altro alimentatore (12V 2A)

Materiali per la parte del circuito

  • Protoboard
  • Filo
  • Striscia LED RGB
  • Alimentatore a 12 V: qualsiasi cosa al di sopra di 2 Amp dovrebbe andare bene
  • DC Barrel Jack - Stesse dimensioni del tuo alimentatore
  • Transistor di potenza NPN BJT (x3) - Sto usando TIP31C
  • Intestazioni pin maschio e femmina

Usando la pratica immagine che ho rubato dagli interweb con il GPIO del Pi Zero, puoi vedere GPIO17, GPIO18 e GPIO 27 sono tutti uno accanto all'altro con un GND. Useremo quel quadrato di 4 pin (pin 11, 12, 13, 14).

Prima di tutto, consiglierei di saldare le intestazioni maschili sulla striscia LED come mostrato nell'immagine (non è il mio lavoro migliore). Ciò consente una facile disconnessione se necessario. Ho usato intestazioni femmina per il collegamento della striscia LED alla mia scheda prototipi e intestazioni maschio dalla scheda prototipi al Raspberry Pi. (Utilizzare sempre connessioni femmina per la sorgente di alimentazione/segnale). Non è necessario spostare tutti i pin del Pi uno accanto all'altro come ho fatto io… Volevo solo che sembrasse pulito, ma è stato un sacco di lavoro.

Spiegazione del circuito

Per quelli di voi che non hanno familiarità con i transistor, i transistor sono fondamentalmente un interruttore digitale. I pin GPIO del Pi attivano i tre interruttori (rosso, verde e blu). Guardando in particolare RED nello schema del circuito, quando GPIO_17 è acceso, l'interruttore "si chiude" collegando RED a GND provocando l'accensione delle luci rosse. Quando GPIO_17 si spegne, l'interruttore è aperto e quindi le luci sono spente.

Base - GPIO

Collezionista - Colori (ROSSO, VERDE, BLU)

Emettitore - Terra (sia dell'alimentatore che del Pi)

Assicurati di collegare la terra del Pi alla terra dell'alimentatore. Le luci funzioneranno ancora, ma appariranno molto deboli fino a quando non sarà collegata la terra.

Ho un dispositivo alla ricerca di un quarto transistor sulla mia scheda prototipi. È un L7805CV che viene utilizzato per convertire 12V in 5V in modo da poter alimentare il Pi sullo stesso circuito. Ha funzionato ma ha continuato a surriscaldarsi, quindi ho rimosso i suoi collegamenti.

Passaggio 8: provalo

Una volta completato il circuito, riavvia il tuo Pi prima di effettuare qualsiasi connessione. Questo perché i pin sono probabilmente ancora attivi dal test del server. In alternativa, puoi uccidere il server e il servizio pigpiod.

Collega i LED e i ponticelli dalla scheda prototipi al Pi. Ricontrolla tutti i collegamenti prima di fornire alimentazione. Se lo hai cablato in modo sbagliato, potresti friggere il tuo Pi (senza pressione).

Lista di controllo

  • Controllare i fili
  • Potenza più
  • Circuito di alimentazione
  • Avvia server (DEBUG=webapp:* npm start mentre si trova nella directory ~/piWebpage/webApp)
  • Di' a Google di fare le tue offerte!

CONGRATULAZIONI non hai fatto esplodere nulla e ora puoi controllare i tuoi LED da Google Home.

Lascia commenti se hai problemi e farò del mio meglio per risponderti!

Consigliato: