Spisu treści:

Diody LED sterowane przez Google Home: 8 kroków
Diody LED sterowane przez Google Home: 8 kroków

Wideo: Diody LED sterowane przez Google Home: 8 kroków

Wideo: Diody LED sterowane przez Google Home: 8 kroków
Wideo: Smart Home czyli inteligentny dom w 2023 roku | Po co się w to bawić? #VlogTechnologiczny 2024, Listopad
Anonim
Diody LED sterowane przez Google Home
Diody LED sterowane przez Google Home
Diody LED sterowane przez Google Home
Diody LED sterowane przez Google Home

Ostatnio miałem dużo wolnego czasu, więc pracowałem nad kilkoma projektami.

Ten projekt pozwoli Ci sterować diodami LED RGB przez Google Home za pomocą Raspberry Pi. Teraz są 3 części projektu, konfigurowanie Raspberry Pi, konfigurowanie Google Home za pomocą niestandardowego polecenia za pomocą IFTTT, a następnie tworzenie obwodu dla świateł. Obwód zrobiłem sam, ale założę się, że można dostać coś z Adafruit, co zrobi to, co jest potrzebne.

Materiały dla części Raspberry Pi

  • Raspberry Pi - dowolna będzie działać, ale używam Zero
  • Bezprzewodowy klucz sprzętowy - jeśli Pi nie ma wbudowanego Wifi
  • Google Home – opcjonalnie, jeśli masz na telefonie Asystenta Google

Materiały do części obwodu - nie pozwól, aby cię to zniechęciło… To dość proste

  • Płyta prototypowa
  • Drut
  • Pasek ledowy
  • Zasilanie 12 V - Wszystko powyżej 2 A powinno być w porządku
  • Gniazdo DC Barrel Jack - ten sam rozmiar co zasilacza
  • Tranzystory mocy NPN BJT (x3) - używam TIP31C
  • Męskie i żeńskie nagłówki pinów - opcjonalne, ale wysoce zalecane

Krok 1: Pobieranie Express dla Pi

Pobieranie Express dla Pi
Pobieranie Express dla Pi

Nie zamierzam zagłębiać się w szczegóły dotyczące konfiguracji Pi, ponieważ istnieje tak wiele samouczków dotyczących ich konfigurowania.

Co musisz zrobić, czego nie opisuję…

  • Flashowanie Raspberry Pi z najnowszym Raspbianem
  • Skonfiguruj kartę sieciową, aby mieć dostęp do Internetu z Pi
  • Ustaw statyczne IP na Raspberry Pi

Teraz zaczyna się zabawa! Musimy zainstalować nodeJS, npm, express i express-generator.

aktualizacja sudo apt-get

sudo apt-get zainstaluj nodejs npm

Po ich zainstalowaniu uruchom następujące

npm zainstaluj ekspres ekspresowy generator

Express umożliwia stworzenie bardzo prostego serwera WWW do użytku przez Raspberry Pi. Express-generator po prostu automatycznie generuje pliki dla ekspresowego serwera.

Utwórz katalog i cd do katalogu. Nazwałem moją piWebpage. Teraz uruchom następujące (widoczne również na obrazku)

mkdir piStrona internetowa

cd piWebpage express --view=ejs aplikacja internetowa

Spowoduje to wygenerowanie folderu o nazwie webApp ze wszystkimi zawartymi w nim plikami ekspresowymi. Jeśli planujesz zrobić więcej z tą stroną później i lubisz PUG, zamień --view=ejs na --view=pug. Nie będziemy dotykać strony internetowej, więc w przypadku tej aplikacji nie ma znaczenia, z czego korzystamy.

Krok 2: Konfiguracja serwera Pi

Przejdź do nowego katalogu webApp.

cd aplikacja internetowa

instalacja npm

instalacja npm zajmie trochę czasu, ponieważ instaluje wszystkie zależności dla ekspresu.

Wklej setColor.py do folderu webApp. Ten plik zawiera kilka ustawień wstępnych dla podstawowych kolorów. Możesz dodać więcej, jak chcesz. Zakres wynosi od 0 do 255, gdzie 255 to pełny kolor. W pewnym momencie prawdopodobnie dodam możliwość przyciemniania świateł, ale na razie są one w pełnej jasności.

Przenieś się na trasy

trasy cd

Teraz zastąp index.js załączonym plikiem. Spowoduje to dodanie kilku linii, aby otrzymać polecenie POST, które wyśle Google Home. Z tego POST otrzymamy wybrany kolor i powiemy Pi, aby uruchomił skrypt setColor python, aby dostosować światła.

Ostatnia rzecz… Wróć do folderu webApp.

cd ~/piStrona internetowa/aplikacja internetowa

Używając swojego ulubionego edytora, wklej i zapisz poniższy kod w swoim webApp.js. Wszędzie jest w porządku, o ile jest przed "module.exports = app;"

// Konfiguracja sterownika sprzętowego diody LEDconst {exec} = require('child_process'); exec('sudo pigpiod', (err, stdout, stderr)=>{ if(err){ console.log('Błąd podczas ładowania sterownika LED'); return; }else console.log('Sterownik LED został pomyślnie załadowany'); });

Jak mówi komentarz, pigpiod jest sprzętowym sterownikiem sygnałów PWM, którego użyjemy do dostosowania kolorów LED. Wierzę, że jest już zainstalowany w Raspbian, ale jeśli nie…

sudo apt-get zainstaluj pigpiod

Teraz prawdziwy test! Uruchamiam serwer!

DEBUG=aplikacja internetowa:* npm start

Krok 3: Konfiguracja IFTTT (wyzwalacz)

Konfiguracja IFTTT (wyzwalacz)
Konfiguracja IFTTT (wyzwalacz)
Konfiguracja IFTTT (wyzwalacz)
Konfiguracja IFTTT (wyzwalacz)

IFTTT może wiele zdziałać i gorąco polecam zapoznać się z niektórymi aplikacjami.

Najpierw musisz założyć konto. Użyj tego samego konta Google powiązanego z Google Home, w przeciwnym razie nie będą się ze sobą synchronizować. Po zakończeniu i zalogowaniu się, kliknij w prawym górnym rogu strony IFTTT, gdzie pokazuje swoje imię i awatar. Następnie kliknij Nowy aplet z menu rozwijanego.

Jeśli jesteś ciekawy, IFTTT oznacza IF This Then That, jeśli nie zauważyłeś na ekranie, który się pojawia. Więc to, czego chcemy, to Asystent Google, a następnie Webhook jako nasze opcje.

Kontynuuj, klikając +to, co załaduje pasek wyszukiwania. W wyszukiwaniu wpisz Asystent Google i kliknij ikonę pod wyszukiwaniem.

W sekcji Wybierz wyzwalacz wybierz trzecią opcję o nazwie Wypowiedz frazę ze składnikiem tekstowym. Teraz możesz mieć 3 polecenia, które wykonają tę samą akcję. Dodajesz $ do frazy, w której wymienisz kolor. Na przykład, gdybym naturalnie powiedział Hej Google, Set LEDs Blue (tak naturalny, jak może być wrzask na urządzenie), to wpisałbym w pole Set LEDs $. Zrób to dla wszystkich 3 pól z różnymi wersjami polecenia.

3, których użyłem, były

Diody LED

Ustaw diody LED $

Ustaw kolor LED $

Ostatnie pole to to, na co chcesz, aby Twój Google Home odpowiedział po wypowiedzeniu polecenia. Może to być cokolwiek chcesz, ale użyłem ustawienia koloru na $. Znak $ oznacza, że powtórzy kolor z powrotem.

Kliknij Utwórz wyzwalacz

Krok 4: Konfiguracja IFTTT (działanie)

Konfiguracja IFTTT (działanie)
Konfiguracja IFTTT (działanie)
Konfiguracja IFTTT (działanie)
Konfiguracja IFTTT (działanie)

Po kliknięciu Utwórz wyzwalacz załaduje się z powrotem do widoku „jeśli to, to tam”, ale zostało to zastąpione logo Asystenta Google. Kontynuuj, klikając +to

To samo, co poprzednio, gdy prowadzi do paska wyszukiwania. Wpisz Webhooks i kliknij ikonę webhooka pod paskiem wyszukiwania. W obszarze Wybierz akcję dla webhooków jest tylko jedna opcja, więc kliknij Utwórz żądanie internetowe.

Tutaj sprawy stają się trochę skomplikowane. Ponieważ Google nie jest kolejnym komputerem w Twoim domu, będziesz potrzebować zewnętrznego adresu IP. Będzie to wymagało przekierowania portów, ale omówimy to później. Aby uzyskać zewnętrzny adres IP, przejdź do

W polu URL wpisz https://xxx.xxx.xxx.xxx:3000/{{TextField}} (gdzie x to Twój zewnętrzny adres IP). Jeśli jesteś ciekawy, TextField będzie miał kolor wybrany podczas tworzenia polecenia. Powodem, dla którego używamy 3000, jest to, że jest to port, na którym działa serwer Raspberry Pi Express. (Można zmienić port w kodzie, ale my używamy tylko domyślnych ustawień dla Express)

Jako Metoda wybierz POST.

Jako Typ zawartości wybierz tekst/zwykły.

W polu Treść wpisz {{TextField}}

Ci z was, którzy wiedzą, jak działa polecenie POST, pomyśleliby, że jeśli przeanalizujecie właściwość body żądania, otrzymacie kolor. Z jakiegoś powodu nic nie jest umieszczane w polu treści żądania, więc w rzeczywistości analizuję adres URL koloru. Mam nadzieję, że wkrótce zostanie to naprawione, ponieważ uprościłoby to mój kod w trasie index.js. Ale robię dygresję.

Na koniec kliknij Utwórz akcję, a następnie Zakończ na następnej stronie. (Wyłączyłem powiadomienia, ale to jest preferencja)

Krok 5: Przekierowanie portów

Przekazywanie portów
Przekazywanie portów
Przekazywanie portów
Przekazywanie portów

W tym miejscu sprawy stają się trudne do wyjaśnienia, ponieważ wszystkie routery są różne…

Teraz Google wysyła polecenie do naszego domu za pomocą portu 3000, ale nie wie, do którego urządzenia w sieci LAN musi się udać. Aby temu zaradzić, musimy przekierować port 3000 na lokalny adres IP twojego Raspberry Pi.

Wejdź do routera za pomocą 10.0.0.1 lub 192.168.1.1 (widziałem też, gdzie ostatnia cyfra to 254) i znajdź przekierowanie portów. W przekierowaniu portów, podobnie jak na obrazku, nazwiesz nowe urządzenie (IFTTT) i przekażesz port (3000) na adres IP Pi (w moim przypadku 10.0.0.11).

Zapisz nowe ustawienie, uruchom ponownie router i sprawdź, czy serwer Raspberry Pi nadal działa. Jeśli nie działa, uruchom go ponownie.

Wróć do tej przydatnej strony https://canyouseeme.org/. Poniżej twojego adresu IP znajduje się sprawdzanie portów. Zakładając, że przekierowanie portów jest prawidłowe, wpisz 3000 i kliknij sprawdź port. Powinien wrócić z sukcesem.

Krok 6: Sprawdzanie dotychczasowej pracy

Sprawdzanie dotychczasowej pracy
Sprawdzanie dotychczasowej pracy
Sprawdzanie dotychczasowej pracy
Sprawdzanie dotychczasowej pracy

Teraz… chwila, na którą czekałeś… Powiedz Google polecenie, takie jak niebieskie diody LED (jeśli podążałeś za moim przykładem).

Zakładając, że wszystko poszło poprawnie, otrzymasz wynik widoczny na obrazku. Nie mamy jeszcze obwodu, więc wszystko, co zobaczysz, to tekst na ekranie. Zwykle występuje drugie lub 2 opóźnienie, zanim zostanie przetworzony z Google i pojawi się na Pi.

(Przejdź do następnego kroku, jeśli wyszło podobnie jak na zdjęciu)

Teraz jest kilka rzeczy, na które należy zwrócić uwagę, jeśli to nie zadziałało…

Na obrazku jest linia, która mówi

POST /kolor/niebieski 200 250.458 ms - 2

200 jest ważną częścią. Jeśli nie widzisz 200, oznacza to, że wystąpił zły POST, co oznacza, że Twój serwer nie wiedział, co zrobić z danymi. Wróć do kroku 2 i sprawdź plik index.js.

Również na zdjęciu

stdout: niebieski

stderr:

To jest wyjście z pliku Pythona, który uruchamia diody LED. Jeśli zobaczysz tam błąd, może to oznaczać, że nie masz zainstalowanego sterownika w kroku 2.

Wreszcie, jeśli nic się nie pojawiło… Twój IFTTT mógł nie zostać poprawnie skonfigurowany lub nie mógł połączyć się z serwerem. Wróć do strony IFTTT i na górnym pasku nawigacyjnym kliknij Aktywność. Tam możesz zobaczyć za każdym razem, kiedy Twoja aplikacja została uruchomiona, a jeśli wystąpił błąd, możesz zobaczyć, co to było. Zrobiłem polecenie Google z wyłączonym serwerem Pi i na obrazku pojawił się błąd.

Krok 7: Budowanie obwodu

Budowanie obwodu
Budowanie obwodu
Budowanie obwodu
Budowanie obwodu
Budowanie obwodu
Budowanie obwodu

Powodem, dla którego musimy to zrobić, jest to, że Raspberry Pi nie ma wystarczającej mocy… Więc rozwiązaniem jest… WIĘCEJ MOCY (Tim, człowiek od narzędzi, Taylor chrząka w oddali). AKA inny zasilacz (12V 2A)

Materiały na część obwodu

  • Płyta prototypowa
  • Drut
  • Taśma LED RGB
  • Zasilanie 12 V - Wszystko powyżej 2 A powinno być w porządku
  • Gniazdo DC Barrel Jack - ten sam rozmiar co twój zasilacz
  • Tranzystory mocy NPN BJT (x3) - używam TIP31C
  • Męskie i żeńskie nagłówki pinowe

Korzystając z poręcznego zdjęcia, które ukradłem z sieci z GPIO Pi Zero, widać, że GPIO17, GPIO18 i GPIO 27 są obok siebie z GND. Będziemy używać tego kwadratu z 4 pinami (piny 11, 12, 13, 14).

Po pierwsze, polecam przylutowanie męskich nagłówków do paska LED, jak widać na obrazku (nie moja najlepsza praca). Pozwala to na łatwe rozłączenie, jeśli zajdzie taka potrzeba. Użyłem żeńskich nagłówków do połączenia taśmy LED z moją płytą prototypową i męskich nagłówków od płyty prototypowej do Raspberry Pi. (Zawsze używaj złączy żeńskich dla źródła zasilania/sygnału). Nie musisz przesuwać wszystkich pinów Pi obok siebie, tak jak ja… Chciałem tylko, żeby wyglądało czysto, ale to było dużo pracy.

Obwód Objaśnienie

Dla tych, którzy nie są zaznajomieni z tranzystorami, tranzystory są w zasadzie przełącznikami cyfrowymi. Piny GPIO z Pi wyzwalają trzy przełączniki (czerwony, zielony i niebieski). Patrząc konkretnie na RED na schemacie, gdy GPIO_17 jest włączone, przełącznik "zamyka się" łącząc RED z GND powodując zaświecenie się czerwonego światła. Gdy GPIO_17 zgaśnie, to przełącznik jest otwarty i tym samym światła są wyłączone.

Baza - GPIO

Kolekcjoner - Kolory (CZERWONY, ZIELONY, NIEBIESKI)

Emiter - uziemienie (zarówno zasilacza, jak i Pi)

Upewnij się, że uziemienie Pi jest połączone z uziemieniem zasilacza. Światła będą nadal działać, ale będą wydawać się bardzo przyciemnione, dopóki masa nie zostanie podłączona.

Na mojej płytce prototypowej mam urządzenie wyglądające na 4 tranzystor. Jest to L7805CV, który służy do konwersji 12V na 5V, abym mógł zasilać Pi na tym samym obwodzie. Działało, ale przegrzewało się, więc usunąłem jego połączenia.

Krok 8: Przetestuj to

Po zakończeniu obwodu uruchom ponownie Pi przed wykonaniem jakichkolwiek połączeń. Dzieje się tak, ponieważ piny są prawdopodobnie nadal aktywne z testu serwera. Alternatywnie możesz zabić serwer i usługę pigpiod.

Podłącz diody LED i zworki z płyty prototypowej do Pi. Przed podłączeniem zasilania sprawdź dokładnie wszystkie połączenia. Jeśli źle go podłączysz, możesz usmażyć swoje Pi (bez nacisku).

Lista kontrolna

  • Sprawdź przewody
  • Moc Pi
  • Obwód zasilania
  • Uruchom serwer (DEBUG=webapp:* npm start w katalogu ~/piWebpage/webApp)
  • Powiedz Google, aby wykonał Twoją licytację!

GRATULUJEMY, niczego nie wysadziłeś, a teraz możesz sterować diodami LED z Google Home.

Zostaw komentarze, jeśli masz problemy, a postaram się odpowiedzieć!

Zalecana: