Indholdsfortegnelse:

Google Home -kontrollerede lysdioder: 8 trin
Google Home -kontrollerede lysdioder: 8 trin

Video: Google Home -kontrollerede lysdioder: 8 trin

Video: Google Home -kontrollerede lysdioder: 8 trin
Video: Умные лампочки Xiaomi - Обзор 2024, November
Anonim
Google Home -kontrollerede lysdioder
Google Home -kontrollerede lysdioder
Google Home -kontrollerede lysdioder
Google Home -kontrollerede lysdioder

På det seneste har jeg haft meget fritid på hænderne, så jeg har arbejdet på en masse projekter.

Dette projekt giver dig mulighed for at styre RGB -lysdioder via Google Home ved hjælp af en Raspberry Pi. Nu er der 3 dele af projektet, oprettelse af en Raspberry Pi, opsætning af Google Home med en brugerdefineret kommando ved hjælp af IFTTT og derefter oprette et kredsløb til lysene. Jeg lavede kredsløbet selv, men jeg vedder på, at du kunne få noget fra Adafruit, der gør, hvad der er nødvendigt.

Materialer til Raspberry Pi Part

  • Raspberry Pi - enhver vil fungere, men jeg bruger en Zero
  • Trådløs Dongle - hvis Pi ikke har indbygget Wifi
  • Google Home - Valgfrit, hvis du har Google Assistant på din telefon

Materialer til kredsløbsdel- Lad ikke dette afskrække dig … Det er ret simpelt

  • Protoboard
  • Tråd
  • LED Strip
  • 12V strømforsyning - Alt over 2 ampere skal være fint
  • DC Barrel Jack - Samme størrelse som din strømforsyning
  • NPN BJT Power Transistors (x3) - Jeg bruger TIP31C
  • Male & Female Pin Headers - Valgfri, men anbefales stærkt

Trin 1: Downloading af Express til Pi

Hent Express til Pi
Hent Express til Pi

Jeg vil ikke gå for meget i detaljer om opsætning af Pi, fordi der er så mange tutorials derude til opsætning af dem.

Hvad du skal gøre, som jeg ikke dækker …

  • Blinkende Raspberry Pi med nyeste Raspbian
  • Konfigurer netværkskortet, så du kan få adgang til internettet fra Pi
  • Indstil en statisk IP på Raspberry Pi

Nu er det her, det sjove begynder! Vi skal installere nodeJS, npm, express og express-generator.

sudo apt-get opdatering

sudo apt-get install nodejs npm

Når disse er installeret, skal du køre følgende

npm installer express express-generator

Express giver dig mulighed for at lave en meget grundlæggende webserver, som din Raspberry Pi kan bruge. Express-generator genererer bare automatisk filer til en ekspresserver.

Lav en mappe og cd i biblioteket. Jeg kaldte min piWebpage. Kør nu følgende (også set på billedet)

mkdir piWebpage

cd piWebpage express --view = ejs webApp

Dette genererer en mappe med navnet webApp med alle ekspresfilerne i den. Hvis du planlægger at gøre mere med denne webside senere, og du kan lide PUG, skal du erstatte --view = ejs med --view = pug. Vi rører ikke websiden, så for denne applikation er det ligegyldigt, hvad vi bruger.

Trin 2: Opsætning af Pi -server

Gå ind i det nye webApp -bibliotek.

cd webApp

npm installation

npm installation vil tage noget tid, fordi det installerer alle afhængigheder for express.

Indsæt setColor.py i webApp -mappen. Denne fil har nogle forudindstillinger i den for grundlæggende farver. Tilføj gerne mere som du vil. Intervallet er 0 til 255, hvor 255 er i fuld farve. På et tidspunkt vil jeg sandsynligvis tilføje muligheden for at dæmpe lysene, men i øjeblikket er de fuld lysstyrke.

Gå ind på ruter

cd -ruter

Udskift nu index.js med den vedhæftede fil. Dette tilføjer nogle linjer for at modtage en POST -kommando, som er hvad Google Home sender. Fra den POST får vi valgt farven og beder Pi om at køre setColor python -scriptet for at justere lysene.

En sidste ting … Gå tilbage til webApp -mappen.

cd ~/piWebpage/webApp

Brug din foretrukne editor til at indsætte og gem koden herunder i din webApp.js. Overalt er fint, så længe det er før "module.exports = app;"

// Setup LED hardware driverconst {exec} = require ('child_process'); exec ('sudo pigpiod', (err, stdout, stderr) => {if (err) {console.log ('Error loading LED Driver'); return;} else console.log ('LED Driver Successfully Loaded'); });

Som kommentaren siger, er pigpiod hardware driveren til PWM signaler, som vi vil bruge til at justere LED farverne. Jeg tror, det allerede er installeret i Raspbian, men hvis ikke …

sudo apt-get install pigpiod

Nu til den rigtige test! Starter serveren!

DEBUG = webapp:* npm start

Trin 3: IFTTT -opsætning (udløser)

IFTTT -opsætning (udløser)
IFTTT -opsætning (udløser)
IFTTT -opsætning (udløser)
IFTTT -opsætning (udløser)

IFTTT kan meget, og jeg vil stærkt anbefale at kigge rundt på nogle af applikationerne.

Først skal du oprette en konto. Brug den samme Google -konto, der er knyttet til dit Google Home, ellers synkroniseres de ikke sammen. Når du er færdig og logget ind, skal du klikke øverst til højre på IFTTT -siden, hvor det viser dit navn og din avatar. Klik derefter på Ny applet i rullemenuen.

Hvis du er nysgerrig, står IFTTT for IF This Then That, hvis du ikke bemærkede det ved skærmen, der dukker op. Så det, vi ønsker, er Hvis Google Assistant, så Webhook som vores muligheder.

Fortsæt ved at klikke på +dette, som indlæser en søgelinje. I søgningen skal du skrive Google Assistant og klikke på ikonet under søgningen.

I Vælg en udløser skal du vælge den tredje mulighed kaldet Sig en sætning med en tekstingrediens. Nu giver dette dig mulighed for at have 3 kommandoer, der udfører den samme handling. Du tilføjer $ til sætning, hvor du vil nævne farven. For eksempel, hvis jeg naturligt ville sige Hey Google, Set LEDs Blue (lige så naturligt som at råbe på en enhed kan være), så ville jeg skrive i feltet Set LEDs $. Gør det for alle 3 felter med forskellige versioner af kommandoen.

De 3 jeg brugte var

Lysdioder $

Indstil lysdioder $

Indstil LED farve $

Det sidste felt er, hvad du gerne vil have, at dit Google Home svarer efter at have sagt din kommando. Det kan være hvad du vil, men jeg brugte Indstilling af farve til $. $ Betyder, at hun vil gentage farven tilbage.

Klik på Opret udløser

Trin 4: IFTTT -opsætning (handling)

IFTTT -opsætning (handling)
IFTTT -opsætning (handling)
IFTTT -opsætning (handling)
IFTTT -opsætning (handling)

Efter at have klikket på Opret udløser, indlæser du tilbage til hvis dette er denne visning, men dette er blevet erstattet med Google Assistant -logoet. Fortsæt ved at klikke +det

Det samme som før, hvor det bringer dig til søgelinjen. Indtast Webhooks, og klik på webhook -ikonet under søgelinjen. Under Vælg handling for Webhooks er der kun en mulighed, så klik på Foretag en webanmodning.

Her er det, hvor tingene bliver lidt vanskelige. Fordi Google ikke er en anden computer i dit hus, skal du bruge din eksterne IP -adresse. Dette vil kræve noget portvideresendelse, men vi kommer senere ind på det. For at få din eksterne IP -adresse skal du gå til

I URL -feltet skal du skrive https://xxx.xxx.xxx.xxx:3000/{{TextField}} (hvor x'erne er din eksterne IP -adresse). Hvis du er nysgerrig, har TextField den farve, du valgte, når du laver en kommando. Grunden til, at vi bruger 3000, er fordi det er den port, Raspberry Pi Express -serveren kører på. (Du kan ændre porten i koden, men vi bruger bare standardindstillingerne for Express)

Vælg POST for metode.

For indholdstype skal du vælge tekst/almindelig.

For krop, indtast {{TextField}}

Dem af jer, der ved, hvordan en POST -kommando fungerer, ville du tro, at hvis du analyserer egenskaben for anmodningen om, at du ville få farven. Af en eller anden grund er der aldrig lagt noget i anmodningens kropsfelt, så jeg analyserer faktisk webadressen for farven. Håber det snart bliver rettet, da det ville forenkle min kode i index.js -ruten. Men jeg afviger.

Klik til sidst på Opret handling og derefter på Afslut på den næste side. (Jeg har deaktiveret underretninger, men det er præference)

Trin 5: Portvideresendelse

Portvideresendelse
Portvideresendelse
Portvideresendelse
Portvideresendelse

Det er her tingene bliver svære at forklare, fordi alle routere er forskellige …

Nu har vi Google til at sende en kommando til vores hus ved hjælp af port 3000, men den ved ikke, hvilken enhed på LAN det skal gå til. For at afhjælpe dette skal vi videresende port 3000 til den lokale IP -adresse på din Raspberry Pi.

Gå ind på din router ved hjælp af enten 10.0.0.1 eller 192.168.1.1 (jeg har også set det, hvor det sidste ciffer er 254) og find port forwarding. I port forwarding, svarende til billedet, navngiver du en ny enhed (IFTTT) og videresender porten (3000) til Pi's IP -adresse (i mit tilfælde 10.0.0.11).

Gem din nye indstilling, genstart din router, og kontroller, om din Raspberry Pi -server stadig kører. Hvis det ikke kører, skal du starte det igen.

Gå tilbage til det praktiske websted https://canyouseeme.org/. Under din IP -adresse har den en portchecker. Forudsat at din portvideresendelse er korrekt, skal du indtaste 3000 og trykke på checkport. Det skulle komme tilbage med en succes.

Trin 6: Kontrol af dit arbejde indtil videre

Tjek dit arbejde indtil videre
Tjek dit arbejde indtil videre
Tjek dit arbejde indtil videre
Tjek dit arbejde indtil videre

Nu … det øjeblik, du har ventet på … Fortæl Google en kommando, f.eks. Lysdioder blå (hvis du fulgte mit eksempel).

Forudsat at alt gik korrekt, får du output vist på billedet. Vi har ikke et kredsløb endnu, så alt du kan se er tekst på en skærm. Der er normalt en anden eller to forsinkelser, før den behandles fra Google og vises på Pi.

(Spring til næste trin, hvis dette kom ud på samme måde som billedet)

Nu er der et par ting at se på, hvis det ikke virkede …

På billedet er der en streg, der siger

POST /farve /blå 200 250,458 ms - 2

200 er den vigtige del. Hvis du ikke ser en 200, så var der en dårlig POST, hvilket betyder, at din server ikke vidste, hvad han skulle gøre med dataene. Gå tilbage til trin 2, og kontroller din index.js -fil.

Også på billedet

stdout: blå

stderr:

Dette er output fra python -filen, der kører lysdioderne. Hvis du ser en fejl der, kan det være, at du ikke har driveren installeret på trin 2.

Endelig, hvis der slet ikke dukkede noget op … din IFTTT var muligvis ikke konfigureret korrekt eller ikke kunne oprette forbindelse til serveren. Gå tilbage til IFTTT -siden, og klik på Aktivitet i den øverste navigationslinje. Derinde kan du se hver gang din app har kørt, og hvis der var en fejl, kan du se, hvad den var. Jeg lavede en Google -kommando med Pi -serveren slukket og fik fejlen på billedet.

Trin 7: Opbygning af kredsløbet

Bygger kredsløbet
Bygger kredsløbet
Bygger kredsløbet
Bygger kredsløbet
Bygger kredsløbet
Bygger kredsløbet

Grunden til, at vi er nødt til at gøre dette, er fordi Raspberry Pi ikke har nok strøm … Så løsningen er … MERE KRAFT (Tim værktøjsmanden Taylor grynter i det fjerne). AKA anden strømforsyning (12V 2A)

Materialer til kredsløbsdel

  • Protoboard
  • Tråd
  • RGB LED Strip
  • 12V strømforsyning - Alt over 2 ampere skal være fint
  • DC Barrel Jack - Samme størrelse som din strømforsyning
  • NPN BJT Power Transistors (x3) - Jeg bruger TIP31C
  • Male & Female Pin Headers

Ved hjælp af det praktiske billede, jeg stjal fra interwebs med GPIO i Pi Zero, kan du se GPIO17, GPIO18 og GPIO 27 er lige ved siden af hinanden med en GND. Vi bruger den firkant med 4 ben (ben 11, 12, 13, 14).

Først og fremmest vil jeg anbefale lodning af hanhoveder på din LED -strimmel som det ses på billedet (ikke mit bedste arbejde). Dette giver mulighed for en let afbrydelse, hvis du nogensinde har brug for det. Jeg brugte kvindelige headers til tilslutning af LED -båndet til mit protoboard og mandlige headers fra protoboardet til Raspberry Pi. (Brug altid hunforbindelser til strøm/signalkilde). Du behøver ikke at flytte alle Pi's pins ved siden af hinanden som jeg gjorde … Jeg ville bare have det til at se rent ud, men det var meget arbejde.

Forklaring på kredsløb

For dem af jer, der ikke er bekendt med transistorer, er transistorer dybest set en digital switch. GPIO -benene fra Pi udløser de tre kontakter (rød, grøn og blå). Ser man specifikt på RØD i kredsløbsdiagrammet, når GPIO_17 er tændt, "lukker" kontakten, der forbinder RØD med GND, hvilket får de røde lys til at tænde. Når GPIO_17 slukker, er kontakten åben, og lyset er derfor slukket.

Base - GPIO'er

Samler - Farver (RØD, GRØN, BLÅ)

Emitter - Jord (af både strømforsyningen og Pi)

Sørg for at tilslutte Pi's jord til strømforsyningens jord. Lysene vil stadig fungere, men de vil se meget svage ud, indtil jorden er forbundet.

Jeg har en 4. transistor udseende enhed på mit protoboard. Det er en L7805CV, der bruges til at konvertere 12V til 5V, så jeg kunne drive Pi'en på det samme kredsløb. Det fungerede, men blev ved med at varme op, så jeg fjernede forbindelserne.

Trin 8: Test det

Når du er færdig med kredsløbet, skal du genstarte din Pi, før du opretter forbindelser. Dette skyldes, at benene sandsynligvis stadig er aktive fra servertesten. Alternativt kan du dræbe serveren og pigpiod -tjenesten.

Tilslut lysdioderne og jumperne fra protoboardet til Pi. Dobbelttjek alle tilslutninger, før du giver strøm. Hvis du har tilsluttet den forkert, kan du stege din Pi (intet tryk).

Tjekliste

  • Tjek ledninger
  • Power Pi
  • Strømkredsløb
  • Start Server (DEBUG = webapp:* npm start, mens du er i ~/piWebpage/webApp -biblioteket)
  • Fortæl Google om at gøre dit bud!

TILLYKKE du sprængte ikke noget, og du kan nu styre dine lysdioder fra Google Home.

Efterlad kommentarer, hvis du har problemer, så gør jeg mit bedste for at vende tilbage til dig!

Anbefalede: