Spisu treści:
- Krok 1: Sprzęt
- Krok 2: Konfiguracja Raspberry Pi
- Krok 3: Pi-blaster
- Krok 4: Konfiguracja przykładowego kodu
- Krok 5: Utwórz samopodpisany certyfikat SSL
- Krok 6: Okablowanie obwodu
- Krok 7: Kod po stronie serwera
- Krok 8: Kod strony internetowej
- Krok 9: Wreszcie
Wideo: Kolor-pi: 9 kroków
2024 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2024-01-30 11:32
Ta instrukcja pokazuje, jak używać Raspberry Pi do sterowania głosowego paskiem LED RGB za pośrednictwem strony internetowej, korzystając z interfejsów Web Speech API dla SpeechRecognition i SpeechSynthesis.
Ten przykład pokazuje, jak:
- Utwórz podstawową stronę internetową za pomocą Node.js przez
- Użyj interfejsów Web Speech API dla SpeechRecognition i SpeechSynthesis.
- Użyj frameworka Cylon.js do sterowania paskiem LED RGB na Raspberry Pi
- Komunikacja przez WSS (Secure Web Sockets) ze strony internetowej do Cylon.js, aby kontrolować kolor diody LED
Notatka
- Do usłyszenia syntezatora mowy potrzebne będą głośniki lub słuchawki
- Aby rozpoznawanie głosu działało, musisz zezwolić na dostęp do mikrofonu
- Ponieważ w ten sposób uzyskujesz dostęp do mikrofonu, witryna musi działać w protokole
- Biblioteka cylon-api-socketio nie obsługuje obecnie https. Mam pull request czekający na scalenie, ale do tego czasu musisz zastąpić /node_modules/cylon-api-socketio/lib/api.js plikiem z tego repozytorium
- Pi-blaster jest potrzebny, aby to zadziałało.
Krok 1: Sprzęt
- Raspberry Pi - użyłem Raspberry Pi 2B, który układałem, ale możesz dostać zestaw startowy Raspberry Pi 3 za około 100 CAD
- Taśma LED RGB Light - bawiłem się taśmą LED Minger Light 32.8ft/10M 600leds RGB SMD 5050. W zestawie kontroler i zasilacz za około 40 CAD
- Złącze Barrel Jack - kupiłem jedno w moim lokalnym sklepie z elektroniką, coś takiego. Tylko upewnij się, czy pasuje do twojego zasilacza
- Złącza zworek / drut - miałem kilka kabli połączeniowych żeńskich i męskich i trochę drutu o rozmiarze 22 Gauge Solid leżącego wokół?
- Breadboard Solderless Prototype PCB Board - coś takiego
- Rezystory 3x10kΩ
- 3 x N-kanałowy MOSFET do sterowania diodami LED - kupiłem kilka IRL3303 w moim lokalnym sklepie elektronicznym. Ważne aby napięcie progowe bramek było max. 3,3 V, dzięki czemu może być napędzany przez piny RPi; zwykle oznaczany przez „L” (poziom logiczny) w nazwie.
Krok 2: Konfiguracja Raspberry Pi
System operacyjny
Zwykle używam najnowszej wersji Raspbian. Pobierz obraz i zapisz go na karcie SD. Jeśli używasz komputera z systemem Windows, możesz użyć programu Win32 Disk Imager, aby zapisać obraz na karcie SD.
Node.js
Zainstaluj najnowszą wersję Node.js. W momencie pisania używam 8.9.1
curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
sudo apt-get install nodejs
Zainstaluj Gita
sudo apt-get zainstaluj git
Krok 3: Pi-blaster
pi-blaster włącza PWM na pinach GPIO, o które prosisz Raspberry Pi. Zastosowana technika jest niezwykle wydajna: nie wykorzystuje procesora i daje bardzo stabilne impulsy.
Ta modulacja szerokości impulsu pozwala Raspberry Pi kontrolować jasność każdego z kanałów czerwonego, zielonego i niebieskiego dla paska LED.
Najpierw sklonuj repozytorium
cd /opcja/
sudo git clone https://github.com/sarfata/pi-blaster.git sudo chown -R pi:pi pi-blaster
Następnie zbuduj i zainstaluj
cd /opt/pi-blaster./autogen.sh &&./configure && make && sudo make install
Na koniec skonfiguruj piny, których chcesz użyć
Pod kontem root lub używając sudo utwórz i edytuj plik
/etc/default/pi-blaster
Dodaj następujące linie
DAEMON_OPTS=--gpio 23, 24, 25
Te piny gpio muszą pasować do pinów, które podłączasz do paska LED.
UWAGA: Istnieje różnica między GPIO a numerem pinu. W tym przykładzie użyto następujących
LED - Niebieski, GPIO-23, Pin - 16
LED - Czerwony, GPIO-24, Pin - 18 LED - Zielony, GPIO-25, Pin - 22
Dodatkowe poprawki
Uruchom pi-blaster
sudo service pi-blaster start
Uruchom ponownie pi-blaster
restart usługi sudo pi-blaster
Zatrzymaj pi-blaster
sudo usługa pi-blaster zatrzymaj
Uruchom pi-blaster automatycznie w czasie rozruchu
sudo systemctl włącz pi-blaster
Ostrzeżenia i inne zastrzeżenia
Piny używane przez pi-blaster zostaną skonfigurowane jako wyjścia. Nie podłączaj niczego do wejścia, bo możesz to zniszczyć! Ten demon używa sprzętowego generatora PWM raspberry pi, aby uzyskać precyzyjne taktowanie. Może to zakłócać działanie karty dźwiękowej.
Krok 4: Konfiguracja przykładowego kodu
Sklonuj przykładowy kod
1. Skonfiguruj folder podstawowy, w którym chcesz zainstalować
cd /opcja
sudo mkdir com.jonhaydock sudo chown pi:pi com.jonhaydockcd com.jonhaydock
2. Sklonuj przykładowe repozytorium git
klon git
lub
klon git [email protected]:haydockjp/kolor-pi.git
3. Zainstaluj zależności
cd kolor-pi
instalacja npm
Może to potrwać 2-3 minuty
4. Ten projekt musi komunikować się przez HTTPS i WSS. Obecnie cylon-api-socketio nie obsługuje połączeń SSL. Istnieje otwarte żądanie ściągnięcia, aby dodać tę obsługę, ale dopóki nie zostanie scalone, w tym repozytorium znajduje się plik poprawki. Uruchom następujące polecenie po zainstalowaniu npm
git checkout node_modules/cylon-api-socketio/lib/api.js
Krok 5: Utwórz samopodpisany certyfikat SSL
1. Utwórz plik klucza prywatnego
cd /opt/com.jonhaydock/colour-pi/certs
openssl genrsa -out color-pi-key.pem 2048
2. Utwórz CSR (Żądanie Podpisania Certyfikatu)
openssl req -new -key kolor-pi-key.pem -out kolor-pi-csr.pem
W tym momencie zostaniesz poproszony o podanie pewnych informacji dla żądania certyfikatu. Ponieważ jest to certyfikat z podpisem własnym, to od Ciebie zależy, jak dokładnie wypełnisz dane. Oto przykład
Nazwa kraju (kod 2-literowy) [AU]:CA
Nazwa stanu lub prowincji (pełna nazwa) [Some-State]:Kolumbia Brytyjska Nazwa miejscowości (np. miasto) :Vancouver Nazwa organizacji (np. firma) [Internet Widgits Pty Ltd]:Kolor Pi Nazwa jednostki organizacyjnej (np. sekcja) : Nazwa zwyczajowa (np. FQDN serwera lub TWOJA nazwa) :colour-pi Adres e-mail :[email protected]
Hasło wyzwanie :
Opcjonalna nazwa firmy :
W tym przykładzie wystarczy nacisnąć klawisz powrotu, aby pozostawić puste hasło wyzwania
3. Wygeneruj certyfikat
openssl x509 -req -dni 1095 -w kolorze-pi-csr.pem -signkey color-pi-key.pem -out color-pi-cert.pem
4. Dla dodatkowego bezpieczeństwa utworzymy również plik Diffie Hellman Parameters
openssl dhparam -out dh_2048.pem 2048
Może to zająć 15-20 minut
Krok 6: Okablowanie obwodu
Zasilanie taśmy LED
Pasek LED zasilany jest napięciem 12 woltów. Raspberry Pi jest w stanie wyprowadzić tylko 3,3 V lub 5 V i nie jest w stanie wyprowadzić w pobliżu amperów potrzebnych do napędzania tak wielu diod LED.
Ważne jest, aby nie podłączać zasilacza 12 V do Raspberry Pi. Tranzystory N-kanałowe MOSFET służą do separacji napięcia 3,3 V na pinach RPi i 12 V zasilacza LED.
MOSFET ma trzy piny Gate, Drain i Source. Jeśli nie jesteś pewien, w którym google znajduje się karta danych tranzystora, którego używasz, np. IRL3303
Podłączymy Raspberry Pi Pin do Bramy, przewód LED do Drain i wspólną masę do Source. Kiedy Pin osiągnie wysoki poziom, napięcie między Drenem a Źródłem aktywuje Bramę i połączy bramę ze Źródłem.
Zamierzamy również umieścić rezystory 10 kΩ na bramce i źródle, aby gdy pin RPi jest wysoki, możemy chronić pin poprzez zmniejszenie przepływającego przez niego prądu.
Kolejne kroki wykonuj na własne ryzyko. Nie biorę odpowiedzialności za wszystko, co może pójść nie tak
Powyżej znajduje się obraz fryzujący i zdjęcie rzeczywistego obwodu.
Polecam zrobić to przy wyłączonym zasilaniu dla RPi i taśmy LED
Skonfiguruj obwody tranzystorowe, po jednym na kanał koloru
- Włóż jeden z tranzystorów do płytki stykowej, jak pokazano na schemacie
- Włóż jeden z rezystorów 10kΩ na styki drenu i źródła tranzystora. To jest pierwsza i ostatnia przypinka
- Użyj trochę drutu, aby podłączyć pin źródłowy (ostatni pin) do ziemi na płytce stykowej
- Powtórz kroki 1 - 3 jeszcze dwa razy, aby mieć trzy zestawy - po jednym na kolor (czerwony, zielony i niebieski)
Podłącz szpilki RPi do płytki
- Podłącz pin 16 do pinu bramki (pierwszy pin) pierwszego tranzystora - będzie to kanał niebieskiej diody LED
- Podłącz pin 18 do pinu bramki (pierwszy pin) pierwszego tranzystora - będzie to kanał czerwonej diody LED
- Podłącz pin 20 do jednej z linii uziemienia z boku płytki stykowej
- Podłącz pin 22 do pinu bramki (pierwszy pin) pierwszego tranzystora - będzie to kanał zielonej diody LED
Użyłem dopasowanych kolorów przewodów do diod LED: Niebieskiego, Czerwonego i Zielonego. Użyłem czerni do ziemi
Podłącz gniazdo lufy
- Podłącz biały przewód do + końca gniazda lufy
- Podłącz czarny przewód do - końca gniazda lufy
- Podłącz czarny przewód do tej samej linii uziemienia na płytce stykowej, do której podłączono pin 20 RPi
- Podłącz biały przewód do linii + na płytce stykowej
Podłączanie taśmy LED
Moja taśma LED była dostarczana ze złączem o wystarczająco dobrym rozmiarze, aby można go było tymczasowo podłączyć do płytki stykowej. Wcisnąłem złącze w płytkę stykową i podłączyłem je do testu obwodu.
- Pierwszy tranzystor podłączony do styku 16. Poprowadziłem niebieski przewód od styku spustowego (środkowy styk) do niebieskiego przewodu na złączu taśmy LED
-
Drugi tranzystor podłączony do Pina 18. Poprowadziłem czerwony przewód od
Drenaż
pin (środkowy pin) do czerwonego przewodu na złączu taśmy LED
-
Trzeci tranzystor podłączony do Pinu 22. Poprowadziłem zielony przewód od
Drenaż
pin (środkowy pin) do zielonego przewodu na złączu taśmy LED
- Na koniec poprowadziłem biały przewód od linii + na płytce stykowej, która była podłączona do gniazda lufy, do białego przewodu na złączu taśmy LED.
Moc
Po sprawdzeniu obwodu powinieneś być gotowy do włączenia Raspberry Pi i podłączenia zasilania 12V do gniazda lufy.
Krok 7: Kod po stronie serwera
Uruchamianie kodu po stronie serwera
cd /opt/com.jonhaydock/color-pi
początek sudo npm
Spowoduje to uruchomienie serwera WWW i rozpoczęcie nasłuchiwania żądań HTTPS i WSS.
UWAGA: Pamiętaj, aby najpierw uruchomić pi-blaster
Zmienne środowiska
Domyślny port witryny to 443, ale możesz to zmienić, ustawiając zmienną środowiskową przed uruchomieniem kodu. Na przykład
eksportuj KOLOR_PI_PORT=2443
Domyślny port gniazda internetowego to 1443, ale można to zmienić, ustawiając zmienną środowiskową przed uruchomieniem kodu. Na przykład
eksportuj KOLOR_PI_WSS_PORT=3443
Uwaga: Ponieważ gniazdo sieciowe jest obsługiwane przez cylon.js, a nie przez główną witrynę, muszą one znajdować się na różnych portach
Styki, które są używane dla niebieskiego (styk 16), zielonego (styk 18) i czerwonego (styk 22) mogą również zostać nadpisane. Na przykład
eksportuj COLOUR_PI_PIN_BLUE=36
eksportuj KOLOR_PI_PIN_RED=38 eksportuj KOLOR_PI_PIN_GREEN=40
Uwaga: muszą one pasować do użytych fizycznych pinów. Jeśli je zmienisz, będziesz musiał również zaktualizować GPIO zdefiniowane w pliku /etc/default/pi-blaster. Na przykład
DAEMON_OPTS=--gpio 16, 20, 21
Główny kod serwera można znaleźć w pliku app.js. Ten plik uruchamia serwer WWW HTTPS, a także, za pośrednictwem struktury Cylon.js, używa socket.io do nasłuchiwania żądań gniazda internetowego na osobnym porcie.
Aby wejść na stronę, należy otworzyć przeglądarkę internetową na głównym komputerze (testowałem to tylko w Chrome) i użyć adresu IP Raspberry Pi, np.
10.0.1.2/
Możesz znaleźć swój adres IP z wiersza poleceń Raspberry Pi.
ifconfig
Serwer sieciowy będzie udostępniał dowolną zawartość w folderze publicznym. Domyślnie wyświetla stronę index.html.
Cylon.js tworzy punkt końcowy, do którego można podłączyć Socket.io.
10.0.1.2:1443/api/robots/kolor-pi
Możesz wysłać wiadomość set_colour do gniazda, aby ustawić wartości czerwonego, zielonego i niebieskiego
device.emit('set_color', r, g, b)
Który wywołuje polecenie set_colour, które wywołuje funkcję setColour w app.js. Ta funkcja ustawia poziomy jasności dla każdej z wartości R, G i B w zakresie od 0 do 255. Gdzie 0 jest wyłączone, a 255 całkowicie włączone.
np.
Czerwony r=255, g=0, b=0
Zielony r=0, g=255, b=0 Niebieski r=0, g=0, b=255 Biały r=255, g=255, b=255 Czarny / Wył. r=0, g=0, b=0
Krok 8: Kod strony internetowej
Ogólny
Serwis wykorzystuje rozpoznawanie głosu, aby wybrać kolory z predefiniowanej listy. Aby dodać kolor do listy, edytuj plik na serwerze: public/data/colours.json
np.
"czerwony":"#FF0000", Gdy kolor zostanie znaleziony lub wybrany z listy rozwijanej, pole Output zostanie ustawione na ten kolor, a wiadomość zostanie wysłana przez socket.io do Raspnerry Pi, który ustawi diody LED na ten sam kolor.
UWAGA: w zależności od tego, jak dobre są twoje diody LED, możesz zobaczyć podobny kolor lub nie. Niektóre są łatwiejsze do powielenia niż inne
Kiedy po raz pierwszy ładujesz witrynę, ponieważ używasz certyfikatu SSL z podpisem własnym, musisz to potwierdzić w przeglądarce. Powinieneś zobaczyć alert bezpieczeństwa dotyczący certyfikatu.
Rozpoznawanie głosu
To pudełko ma ikonę mikrofonu. Jeśli klikniesz ikonę, gdy jest zielona, zacznie nasłuchiwać kolorów. Podczas słuchania zmieni kolor na czerwony. Będzie nasłuchiwał przez krótki czas, a potem się zatrzyma. Kliknięcie ikony mikrofonu, gdy jest czerwona, również uniemożliwi jej słuchanie.
Ponieważ ta witryna musi uzyskać dostęp do mikrofonu, po wyświetleniu monitu musisz udzielić jej pozwolenia
UWAGA: Do tej części potrzebny jest mikrofon. Używam tego w mojej kamerze internetowej.
Transkrypcja śródokresowa
To pole śledzi domysły słów, które wypowiadasz, tak jak je wypowiadasz.
Ostateczna transkrypcja
To pole śledzi ostateczne przypuszczenie, to co powiedziałeś.
Znane kolory
To jest lista wszystkich kolorów, o których wie strona. Jest tworzony z pliku colors.json. Jeśli wybierzesz jeden z tych kolorów, strona odczyta kolor i ustawi kolor wyjściowy.
UWAGA: Do usłyszenia mowy potrzebne są głośniki lub słuchawki
Znalezione kolory
Ta strona internetowa obsługuje obecnie tylko dopasowywanie kolorów. Jeśli słowo lub słowa wypowiedziane do mikrofonu pasują do nazwy znanego koloru lub jeśli wybierzesz kolor z listy Znany kolor, zostanie on dodany tutaj jako dziennik.
Wyjście
Tutaj zostanie wyświetlony ostatnio znaleziony kolor. Wartość Hex kolorów (np. #7cb9e8) i wartość RGB (np. 124, 185, 232) będą wyświetlane jako tekst, a tło środkowego pola zostanie ustawione na rzeczywisty kolor.
Ten kolor jest również wysyłany do Raspberry Pi i powinieneś zobaczyć zmianę koloru paska LED.
UWAGA: jeśli nie widzisz zmiany koloru LED, spróbuj ponownie uruchomić pi-blaster i/lub aplikację node.js
restart usługi sudo pi-blaster
początek sudo npm
Znane głosy
To pole wyświetla listę „Znanych głosów” z obsługiwanej syntezy mowy. Wybranie jednego z tych głosów zmieni głos i język, który będziesz słyszeć, a także wymówi nazwę głosu.
Zmieni również język funkcji SpeechRecognition na taki sam, jak wybrany z listy.
Krok 9: Wreszcie
Oto przykład tego, co powinieneś zobaczyć.
Daj mi znać, jeśli masz jakiś problem, a w razie potrzeby mogę zaktualizować.
Zalecana:
Hot Seat: Zbuduj podgrzewaną poduszkę zmieniającą kolor: 7 kroków (ze zdjęciami)
Hot Seat: Zbuduj podgrzewaną poduszkę zmieniającą kolor: Chcesz się upiec w mroźne zimowe dni? Hot Seat to projekt, który wykorzystuje dwie najbardziej ekscytujące możliwości e-tekstyliów - zmianę koloru i ciepło! Będziemy budować poduszkę do siedzenia, która się nagrzewa, a kiedy będzie gotowa do jazdy, odsłoni t
Łatwa bezprzewodowa lampa z kostką Rubika zmieniająca kolor w oparciu o pochylenie: 10 kroków (ze zdjęciami)
Bezprzewodowa lampa kostka Rubika z łatwą zmianą kolorów w oparciu o pochylenie: Dzisiaj zbudujemy tę niesamowitą lampę w kształcie kostki Rubika, która zmienia kolor w zależności od tego, która strona jest uniesiona. Kostka działa na małej baterii LiPo, ładowanej standardowym kablem micro-usb, a w moich testach ma żywotność baterii kilka dni. Ten
Losowy kolor pierścienia LED M5StickC ESP32 i NeoPixels: 7 kroków
Losowy kolor pierścienia LED M5StickC ESP32 i NeoPixels: W tym projekcie dowiemy się, jak wyświetlać losowy kolor na pierścieniu LED NeoPixels za pomocą płytki M5StickC ESP32. Obejrzyj wideo
Oh!! Kolor: 7 kroków
Oh!! Kolor: Och!! Kolor to prosta gra, aby odgadnąć kolor. Gra poda Ci najbardziej podstawowe trzy podstawowe kolory. Jeśli chcesz połączyć dwa kolory, po prostu naciśnij oba przyciski. Po naciśnięciu przycisku gra będzie poprawna. Na koniec proszę
Świecąca gitara zmieniająca kolor: 49 kroków (ze zdjęciami)
Świecąca gitara zmieniająca kolor: W królestwie rock and rolla ważne jest, aby się wyróżniać. Z milionami ludzi na tym świecie, którzy potrafią grać na gitarze, po prostu dobrze gra nie wystarczy. Potrzebujesz czegoś ekstra, aby stać się bogiem rocka. Rozważ ten gu