Innehållsförteckning:
- Steg 1: Utrustning
- Steg 2: Konfigurera Raspberry Pi
- Steg 3: Pi-blaster
- Steg 4: Konfigurera exempelkoden
- Steg 5: Skapa ett självsignerat SSL -certifikat
- Steg 6: Anslutning av kretsen
- Steg 7: Kod på serversidan
- Steg 8: Webbplatskod
- Steg 9: Slutligen
Video: Color-pi: 9 steg
2024 Författare: John Day | [email protected]. Senast ändrad: 2024-01-30 12:46
Denna instruerbara visar hur du använder en Raspberry Pi för att röststyra en RGB LED -remsa, via en webbplats, med hjälp av Web Speech API -gränssnitt för SpeechRecognition och SpeechSynthesis.
Detta exempel visar hur
- Skapa en grundläggande webbplats med Node.js via
- Använd Web Speech API -gränssnitt för SpeechRecognition och SpeechSynthesis.
- Använd ramverket Cylon.js för att styra en RGB LED -remsa på en Raspberry Pi
- Kommunicera över WSS (Secure Web sockets) från webbsidan till Cylon.js för att styra färgen på lysdioden
Notera
- Du behöver högtalare eller hörlurar för att höra talsyntesen
- Du måste ge åtkomst till din mikrofon för att röstigenkänningen ska fungera
- Eftersom denna åtkomst till din mikrofon måste webbplatsen köras under
- Biblioteket cylon-api-socketio stöder inte just nu https. Jag har en dragbegäran som väntar på att slås samman, men tills dess måste du ersätta /node_modules/cylon-api-socketio/lib/api.js med filen i det här förvaret
- pi-blaster behövs för att detta ska fungera.
Steg 1: Utrustning
- Raspberry Pi - Jag använde en Raspberry Pi 2B som jag hade lagt, men du kan få ett Raspberry Pi 3 Starter Kit för cirka 100 CAD
- RGB LED Strip Light - Jag lekte med Minger LED Strip Light 32.8ft/10M 600leds RGB SMD 5050. Detta levereras med en styrenhet och en strömförsörjning för cirka CAD 40
- Barrel Jack Connector - Jag köpte en från min lokala elektronikbutik, något liknande. Se bara till om det passar din strömförsörjning
- Bygelkontakter / tråd - Jag hade några kvinnliga till manliga anslutningskablar och några 22 Gauge Solid hook up wire liggande
- Brödbräda Lödfri prototyp PCB -kretskort - något liknande
- 3 x 10kΩ motstånd
- 3 x N -kanal MOSFET för styrning av lysdioderna - jag köpte några IRL3303 från min lokala elektroniska butik. Det är viktigt att grindarnas tröskelspänning är max. 3.3V så att den kan drivas av RPi -stiften; brukar betecknas med ett 'L' (logisk nivå) i namnet.
Steg 2: Konfigurera Raspberry Pi
Operativ system
Jag använder normalt den senaste Raspbian -versionen. Ladda ner bilden och skriv den till SD -kortet. Om du använder en Windows -dator kan du använda Win32 Disk Imager för att skriva bilden till SD -kortet.
Node.js
Installera den senaste versionen av Node.js. I skrivande stund använder jag 8.9.1
curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
sudo apt-get install nodejs
Installera Git
sudo apt-get install git
Steg 3: Pi-blaster
pi-blaster möjliggör PWM på GPIO-stiften du begär av en Raspberry Pi. Tekniken som används är extremt effektiv: använder inte CPU: n och ger mycket stabila pulser.
Denna pulsbreddsmodulering gör att Raspberry Pi kan styra hur ljusa var och en av de röda, gröna och blå kanalerna är för LED -remsan.
Klona först förvaret
cd /opt /
sudo git klon https://github.com/sarfata/pi-blaster.git sudo chown -R pi: pi pi-blaster
Bygg och installera sedan
cd/opt/pi-blaster./autogen.sh &&./configure && make && sudo make install
Slutligen konfigurerar du vilka stift du vill använda
Under rotkontot eller med sudo, skapa och redigera filen
/etc/default/pi-blaster
Lägg till följande rader
DAEMON_OPTS =-gpio 23, 24, 25
Dessa gpio -stift måste matcha stiften som du ansluter till din LED -remsa.
OBS: Det finns en skillnad mellan GPIO och pin -nummer. I det här exemplet används följande
LED - Blå, GPIO -23, Pin - 16
LED - Röd, GPIO -24, Pin - 18 LED - Grön, GPIO -25, Pin - 22
Extra tweaks
Starta pi-blaster
sudo service pi-blaster start
Starta om pi-blaster
sudo service pi-blaster starta om
Stoppa pi-blaster
sudo service pi-blaster stopp
Starta pi-blaster automatiskt vid uppstart
sudo systemctl aktivera pi-blaster
Varningar och andra varningar
Stift som används av pi-blaster kommer att konfigureras som utgångar. Anslut inte något på en ingång eller du kan förstöra det! Denna demon använder maskinvaran PWM -generator på hallonpi för att få exakta tidpunkter. Detta kan störa ljudkortets utmatning.
Steg 4: Konfigurera exempelkoden
Klona exempelkoden
1. Skapa en basmapp att installera i
cd /opt
sudo mkdir com.jonhaydock sudo chown pi: pi com.jonhaydockcd com.jonhaydock
2. Klona exempel på git -förvaret
git-klon
eller
git klon [email protected]: haydockjp/color-pi.git
3. Installera beroende
cd färg-pi
npm installera
Detta kan ta 2-3 minuter
4. Detta projekt måste kommunicera över HTTPS och WSS. För närvarande stöder cylon-api-socketio inte SSL-anslutningar. Det finns en öppen pull -begäran om att lägga till det här stödet, men tills det har slagits ihop finns det en patchfil i det här förvaret. Kör följande kommando efter npm -installationen
git checkout node_modules/cylon-api-socketio/lib/api.js
Steg 5: Skapa ett självsignerat SSL -certifikat
1. Skapa en privat nyckelfil
cd /opt/com.jonhaydock/colour-pi/certs
openssl genrsa -out color-pi-key.pem 2048
2. Skapa en CSR (begäran om certifikatsignering)
openssl req -ny -key color-pi-key.pem -out color-pi-csr.pem
Vid denna tidpunkt kommer du att bli ombedd att ange information om certifikatförfrågan. Eftersom detta är ett självsignerat certifikat är det upp till dig hur exakt du fyller i detaljerna. Här är ett exempel
Landnamn (kod med två bokstäver) [AU]: CA
Stat eller provinsnamn (fullständigt namn) [Någon delstat]: British Columbia ortnamn (t.ex. stad) : Vancouver organisationsnamn (t.ex. företag) [Internet Widgits Pty Ltd]: Color Pi organisatoriska enhetsnamn (t.ex. avsnitt) : Vanligt namn (t.ex. server FQDN eller DITT namn) : color-pi E-postadress : [email protected]
Ett utmaningslösenord :
Ett valfritt företagsnamn :
I det här exemplet trycker du bara på retur för att lämna utmaningslösenordet tomt
3. Skapa certifikatet
openssl x509 -req -days 1095 -in color-pi-csr.pem -signkey color-pi-key.pem -out color-pi-cert.pem
4. För extra säkerhet skapar vi också en Diffie Hellman Parameters -fil
openssl dhparam -out dh_2048.pem 2048
Detta kan ta 15-20 minuter
Steg 6: Anslutning av kretsen
Drar LED -remsan
LED -remsan drivs av 12 volt. Raspberry Pi kan bara mata ut 3.3v eller 5v och kan inte mata ut någonstans nära de förstärkare som behövs för att driva så många lysdioder.
Det är viktigt att inte ansluta 12 volt strömförsörjning till Raspberry Pi. N-kanal MOSFET-transistorer används för att separera 3.3v på RPi-stiften och 12v på LED-strömförsörjningen.
MOSFET har tre stift Gate, Drain och Source. Om du inte är säker på vilken som är vilken google för databladet för transistorn du använder, t.ex. IRL3303
Vi ska ansluta Raspberry Pi -stiftet till porten, LED -kabeln till avloppet och en gemensam jord till källan. När stiftet går högt, aktiverar spänningen mellan avloppet och källan porten och ansluter porten till källan.
Vi kommer också att sätta 10kΩ -resistorer över porten och källan, så att när vi RPi -stiftet är högt kan vi skydda stiftet genom att minska strömmen som går igenom det.
Utför nästa steg på egen risk. Jag tar inget ansvar för något som kan gå fel
Det finns en fritzande bild och ett foto av den faktiska kretsen ovan.
Jag skulle rekommendera att göra detta medan strömmen är avstängd för RPi och LED -remsan
Ställ in transistorkretsarna, en per färgkanal
- Sätt in en av transistorerna i brödbrädan som visas i diagrammet
- Sätt in en av 10kΩ -resistorerna över avloppet och källstiften på transistorn. Detta är den första och sista nålen
- Använd lite tråd för att ansluta källstiftet (sista stiftet) till marken på brödbrädet
- Upprepa steg 1 - 3 två gånger till så att du har tre uppsättningar - en per färg (röd, grön och blå)
Anslut RPi -stiften till kortet
- Anslut stift 16 till grindstiftet (första stiftet) på den första transistorn - Detta blir den blå LED -kanalen
- Anslut stift 18 till grindstiftet (första stiftet) på den första transistorn - Detta blir den röda LED -kanalen
- Anslut stift 20 till en av marklinjerna på sidan av brödbrädan
- Anslut Pin 22 till Gate Pin (första pin) på den första transistorn - Detta kommer att vara den gröna LED -kanalen
Jag har använt matchande trådfärger till lysdioderna: blå, röd och grön. Jag har använt svart till marken
Anslut Barrel Jack
- Anslut en vit tråd till + -änden på fatuttaget
- Anslut en svart kabel till - änden på fatuttaget
- Anslut den svarta ledningen till samma jordlinje på brödbrädan som RPi Pin 20 var ansluten till
- Anslut den vita tråden till + -raden på brödbrädan
Anslutning av LED -remsan
Min LED -remsa kom med en kontakt som var tillräckligt bra för att den tillfälligt skulle kunna anslutas till brödbräda. Jag tryckte på kontakten i brödbrädan och kopplade den till kretsens test.
- Den första transistorn ansluten till stift 16. Jag körde en blå ledning från dräneringsstiftet (mittstiftet) till den blå ledningen på LED -bandkontakten
-
Den andra transistorn ansluten till stift 18. Jag körde en röd tråd från
Dränera
stift (mittstift) till den röda ledningen på LED -stripkontakten
-
Den tredje transistorn ansluten till Pin 22. Jag körde en grön tråd från
Dränera
stift (mittstift) till den gröna ledningen på LED -stripkontakten
- Slutligen körde jag en vit tråd från + -linjen på brödbrädan som var ansluten till fatuttaget, till den vita ledningen på LED -stripkontakten.
Kraft
Efter att ha kontrollerat kretsen bör du vara bra att slå på Raspberry Pi och ansluta 12V -matningen till fatuttaget.
Steg 7: Kod på serversidan
Kör koden på serversidan
cd /opt/com.jonhaydock/colour-pi
sudo npm start
Detta kommer att starta webbservern och börja lyssna på HTTPS- och WSS -förfrågningar.
OBS: Kom ihåg att ha pi-blaster igång först
Miljövariabler
Standardwebbplatsporten är 443, men du kan åsidosätta detta genom att ställa in en miljövariabel innan du startar koden. Till exempel
exportera COLOUR_PI_PORT = 2443
Standardwebbporten är 1443, men du kan åsidosätta detta genom att ställa in en miljövariabel innan du startar koden. Till exempel
exportera COLOUR_PI_WSS_PORT = 3443
Obs! Eftersom webbuttaget hanteras av cylon.js och inte huvudwebbplatsen måste dessa finnas på olika portar
Stiften som används för blå (stift 16), grön (stift 18) och röd (stift 22) kan också åsidosättas. Till exempel
exportera COLOUR_PI_PIN_BLUE = 36
exportera COLOUR_PI_PIN_RED = 38 exportera COLOUR_PI_PIN_GREEN = 40
Obs! Dessa måste matcha de fysiska stiften du använde. Om du ändrar dessa måste du också uppdatera GPIO: erna som definieras i filen/etc/default/pi-blaster. Till exempel
DAEMON_OPTS =-gpio 16, 20, 21
Huvudserverkoden finns i filen app.js. Den här filen startar HTTPS -webbservern och använder även socket.io för att lyssna efter förfrågningar om webbuttag via en separat port genom Cylon.js -ramverket.
För att komma åt webbplatsen bör du öppna en webbläsare på din huvuddator (jag har bara testat detta i Chrome) och använda IP -adressen till Raspberry Pi, t.ex.
10.0.1.2/
Du kan ta reda på din IP -adress från kommandoraden Raspberry Pi.
ifconfig
Webbservern serverar allt innehåll under den offentliga mappen. Som standard visas index.html -sidan.
Cylon.js skapar en slutpunkt som du kan ansluta Socket.io.
10.0.1.2:1443/api/robots/colour-pi
Du kan skicka ett set_colour -meddelande till via uttaget för att ställa in röda, gröna och blåa värden
device.emit ('set_colour', r, g, b)
Som kallar kommandot set_colour, som kallar setColour -funktionen i app.js. Denna funktion ställer in ljusstyrkenivåerna för vart och ett av R-, G- och B -värdena mellan 0 och 255. Där 0 är av och 255 är helt på.
t.ex.
Rött r = 255, g = 0, b = 0
Grön r = 0, g = 255, b = 0 Blå r = 0, g = 0, b = 255 Vit r = 255, g = 255, b = 255 Svart / Av r = 0, g = 0, b = 0
Steg 8: Webbplatskod
Allmän
Webbplatsen använder röstigenkänning för att välja färger från en fördefinierad lista. För att lägga till en färg i listan, redigera filen på servern: public/data/colours.json
t.ex.
"röd": "#FF0000",
När en färg hittas eller väljs från rullgardinsmenyn, kommer Output -rutan att ställas in på den färgen och ett meddelande skickas via socket.io till Raspnerry Pi, som kommer att ställa in lysdioderna i samma färg.
OBS: beroende på hur bra dina lysdioder är kanske du kanske inte ser en liknande färg. Vissa är lättare att kopiera än andra
När du laddar webbplatsen första gången, eftersom du använder ett självsignerat SSL-certifikat måste du bekräfta detta i webbläsaren. Du bör se en säkerhetsvarning om certifikatet.
Röstigenkänning
Den här rutan har en mikrofonikon. Om du klickar på ikonen när den är grön börjar den lyssna efter färger. Medan den lyssnar blir den röd. Den kommer att lyssna en kort stund och sedan sluta. Om du klickar på mikrofonikonen när den är röd stoppas den också från att lyssna.
Eftersom denna webbplats behöver åtkomst till din mikrofon måste du ge den tillstånd när du uppmanas
OBS: Du behöver en mikrofon för denna del. Jag använder den på min webbkamera.
Interimavskrift
Denna ruta spårar gissningarna på orden du säger, som du säger dem.
Slutavskrift
Den här rutan spårar den sista gissningen är vad du sa.
Kända färger
Detta är en lista över alla färger som sidan känner till. Den skapas från filen colours.json. Om du väljer en av dessa färger kommer sidan att tala färgen och ställa in utgångsfärgen.
OBS: Du behöver högtalare eller hörlurar för att höra talet
Hittade färger
Denna webbsida stöder för närvarande endast matchning av färgen. Om ordet eller orden du talade in i mikrofonen matchar namnet på en känd färg, eller om du väljer en färg från listan Känd färg, läggs den till här som en logg.
Produktion
Den senast hittade färgen visas här. Färg Hex -värdet (t.ex. #7cb9e8) och RGB -värdet (t.ex. 124, 185, 232) visas som text och bakgrunden för rutan i mitten kommer att ställas in till den faktiska färgen.
Denna färg skickas också till Raspberry Pi och du bör se färgen på LED -remsan ändras.
OBS: om du inte ser förändringen av LED-färgen, försök starta om pi-blaster och/eller node.js-appen
sudo service pi-blaster starta om
sudo npm start
Kända röster
Den här rutan visar en lista över "Kända röster" från den stödda speechSynthesis. Om du väljer en av dessa röster ändras rösten och språket du kommer att höra, och det kommer att tala röstens namn.
Det kommer också att ändra språket för SpeechRecognition till samma som det som valts i listan.
Steg 9: Slutligen
Här är ett exempel på vad du bör se.
Meddela mig om du har några problem så kan jag uppdatera efter behov.
Rekommenderad:
Hur man använder Detect Color TCS3200 med SkiiiD: 9 steg
Hur man använder Detect Color TCS3200 med SkiiiD: En handledning för att utveckla Detect Color TCS3200 med skiiiD
DIY Arduino LED Color Organ 2.0: 5 steg
DIY Arduino LED Color Organ 2.0: I det här projektet kommer jag att visa dig hur du bygger ett Arduino LED Color Organ som reagerar på olika frekvensband i din musik med ljusshow. I mitt fall representerar det röda ljuset bas, grönt ljus mellanfrekvenser och blå är den höga tonen
Macintosh Classic II Color Hackintosh: 7 steg (med bilder)
Macintosh Classic II Color Hackintosh: Mac Classic II (M4150 byggd 1992), Historien om en Classic II Hackintosh. Jag kom i besittning av en vintage Mac Classic II från 1992 och trodde att det skulle göra en bra omvandling. Efter en lång tid med att leta efter rätt LCD -panel för att repla
Trafikljus / Feu Tri-Color!: 11 steg
Traffic Light / Feu Tri-Color!: Aujourd'hui nous allons construire un Feu de circulation programmer en Arduino! Pour ce faire nous aurons besoin de: -Plaques de bois de 3 mm d'épaisseur-Papiers Calques épais-Colle-Perceuse- Arduino-Fiche Male -Câble électrique-Kit soudure-Un ordina
Arduino RGB Color Picker - Välj färger från verkliga objekt: 7 steg (med bilder)
Arduino RGB -färgväljare - Välj färger från verkliga objekt: Välj enkelt färger från fysiska objekt med denna Arduino -baserade RGB -färgväljare, så att du kan återskapa färgerna du ser i verkliga objekt på din dator eller mobiltelefon. Tryck bara på en knapp för att skanna objektets färg med en billig TCS347