Indholdsfortegnelse:

RPi-Zero IoT-hændelsesindikator / farvelampe: 6 trin (med billeder)
RPi-Zero IoT-hændelsesindikator / farvelampe: 6 trin (med billeder)

Video: RPi-Zero IoT-hændelsesindikator / farvelampe: 6 trin (med billeder)

Video: RPi-Zero IoT-hændelsesindikator / farvelampe: 6 trin (med billeder)
Video: Hvordan reagerer børn, når man fortæller, at der ikke er råd til at holde jul? 2024, November
Anonim
RPi-Zero IoT-hændelsesindikator / farvelampe
RPi-Zero IoT-hændelsesindikator / farvelampe
RPi-Zero IoT-hændelsesindikator / farvelampe
RPi-Zero IoT-hændelsesindikator / farvelampe
RPi-Zero IoT-hændelsesindikator / farvelampe
RPi-Zero IoT-hændelsesindikator / farvelampe

Ingen ekstra mikro-controller og intet HAT-tilføjelsesmodul påkrævet. RPi-Zero gør alt. Bedre endnu, brug en RPi-Zero W!

Prøvebrug: Indikator for webtjenestestatus (f.eks. DowJonesIndex -sporing), statusindikator for politisk eller sportsbegivenhed, stemningslys, spor en sensor, navngiv den. Se videoen i trin 6.

Raspberry-Pi har kun en hardware-understøttet PWM-linje. Dette projekt har brug for 3 PWM-linjer, så jeg brugte et softwaredrevet PWM 'c' -bibliotek (https://wiringpi.com/reference/software-pwm-library/), som allerede skulle være installeret.

Jeg opdelte behandlingen i 2 processer. Den ene, afbrudt drevet, skifter kontrollinjer til LED efter behov, får sine marcherende ordrer fra sin 'stdin' strøm. Den anden er en hændelsesdrevet nodeJS -server, der bruger socket IO. Dette er for at forhindre ting som lyset at flimre og samtidig sikre lydhørhed. Kombinationen bruger typisk mindre end 5% af CPU'en. I perioder med kontinuerlige farveopdateringer (via skydere og/eller mange klienter) kan den let bruge over 50% (især når du også bruger browseren i Pi-Zero GUI). Bemærk, at når der kommer en ændring, går opdateringsmeddelelser ud til alle open socket -klienter.

Trin 1: Hvad skal du bruge

Hvad du skal bruge
Hvad du skal bruge
Hvad du skal bruge
Hvad du skal bruge
  • Pi-Zero mikro-SD-kort, 8 GB anbefales. Med Raspbian-Linux eller NOOBS
  • RGB LED (jeg brugte denne:
  • 3 modstandere (værdi baseret på ønsket strøm og/eller ønsket lysstyrke, 1/8 watt)
  • en WiFi, USB-dongle (f.eks. https://www.ebay.com/itm/252018085448) eller endnu bedre bruge en Raspberry Pi Z-W (med indbygget WiFi)
  • en sag (f.eks. en lille: https://www.ebay.com/itm/131583579374 med mere plads:
  • en diffuser (se eksempler på billedet)
  • Kabler og adaptere efter behov.

Valgfrit, afhængigt af hvordan du vil forbinde komponenterne

  • header (https://www.ebay.com/itm/14186077616)
  • jumpere (https://www.ebay.com/itm/262235387520)
  • retvinklet mikro-USB-adapter (blå USB 2.0 OTG R)
  • mini USB -hub, bruges kun i installationsfasen

Trin 2: Pi-Zero-opsætning og forberedelse til udvikling

Følg denne indledende opsætning til din PiZero, for at gøre den klar til udvikling …

Når du har et microSD -kort med NOOBS -opsætning, skal du:

Tilslut microSD -kortet. Tilsluttet en USB -hub med lavt strømforbrug med en Wifi -dongle, tastatur og mus (Du kan bruge en trådløs mus og/eller tastatur, uanset om det kan, men ikke sandsynligt, kræve ekstern strøm til hubben). Jeg brugte adaptere og en hub, jeg allerede havde.

Tilslut nu en skærm og en microUSB -strømadapter, og den starter op. Fortsæt og afslut vejledningen til opsætning af Raspbian, Debian Linux, som det ses i linket noobs-setup ovenfor.

Derudover havde jeg en for lav opløsning. Så jeg tilføjede disse linjer til /boot/config.txt

disable_overscan = 1

hdmi_group = 2 hdmi_mode = 58

Hdmi_mode = 58 fungerer til min skærm, din har muligvis brug for noget andet.

se: make-hindbær-pi-brug-fuld-opløsning-skærm og

raspberrypi.org/documentation/configuration/config-txt.md

Efter opstart går Pi-Zero ind i GUI-grænsefladen.

For at bruge hele mit microSD-kort i fuld størrelse brugte jeg valget raspi-config #1 'Udvid filsystem'. Fra kommandolinjen skal du i et terminalvindue indtaste 'sudo raspi-config' Se: dokumentation/konfiguration/raspi -konfig.md

Jeg ændrede også disse indstillinger under #5 'Internationaliseringsindstillinger'

  • Landestandard: da_US. UTF-8 UTF-8
  • Tidszone: Amerika… Los_Angeles
  • Tastaturlayout: Generisk 105-tasters (Intl) pc … Engelsk (USA)

For mig gjorde tastaturstandarden i Storbritannien (som Raspbian kommer forudindstillet til) mange af mine redigeringer til en rigtig opgave.

Skift disse indstillinger efter behov, passende for dig. Bemærk, at du skal bruge piletasterne og tabulatortasten for at navigere i 'raspi-config'; og efter et valg kan det være meget langsomt at reagere.

Jeg fandt det ikke noget problem at oprette forbindelse til internettet med en WiFi-USB-dongle (jeg brugte 2 forskellige). Jeg var simpelthen nødt til at indtaste min WiFi-adgangsnøgle-adgangskode ved hjælp af en rulleliste øverst til højre i GUI. Når jeg gjorde dette, ville det automatisk oprette forbindelse efter enhver genstart/opstart.

Nu var jeg klar til generel udvikling.

For at komme til dette punkt kan du tage mange veje. Indtil dette punkt har jeg ikke givet store detaljer her, men der er mange metoder og konfigurationer beskrevet mere detaljeret på nettet. Herunder en til en hovedløs opsætning, hvor du ville bruge et fjernt ssh -terminalvindue på din personlige computer til at udføre de udviklingstrin, der skal gives i denne instruktion.

Trin 3: Udviklingsmiljø og værktøjer

Udviklingsmiljø og værktøjer
Udviklingsmiljø og værktøjer
Udviklingsmiljø og værktøjer
Udviklingsmiljø og værktøjer

Til systemkonfiguration og software, jeg udviklede til projektet, lavede jeg R&D på en Raspberry Pi-2; for den har en quad-core CPU, der gør browsing og kodeudvikling med flere vinduer meget hurtigere. Du kan selvfølgelig bruge enhver model Raspberry-Pi til at realisere dette projekt.

For at konfigurere Node.js (hændelsesdrevet I/O-server-JavaScript-support) gjorde jeg følgende …

sudo apt-get opdatering

sudo apt-get install nodejs npm

Tilføjelse af disse nodeJS -pakker (npm er Nodejs Package Manager)

npm installer express

npm installer socket.io

Referencer:

www.npmjs.com/package/express Hurtig, minimalistisk webramme

www.npmjs.com/package/socket.io Socket. IO muliggør tovejs hændelsesbaseret kommunikation i realtid

Trin 4: Hardware

Hardwareen
Hardwareen
Hardwareen
Hardwareen
Hardwareen
Hardwareen
Hardwareen
Hardwareen

De anvendte modstandsværdier er alle forskellige, da spændingsfaldet og effektiviteten er forskellig for alle tre LED -farvesegmenter. GPIO Høje udgangsniveauer var alle cirka 3,2 volt. Hvert LED -segment blev testet for at sikre, at det forbruger mindre end 20ma maksimum og omkring 40ma alt sammen (<50ma maks. Tilladt total), som PiZero let kan håndtere. Jeg fik så meget output lysstyrke som jeg kunne, direkte drev LED; hvilket er rigeligt til mine behov. For at drive højere strømme, for et meget lysere output, kunne mellemliggende transistorer bruges med en fælles anode -LED med sin anode forbundet til 5v -linjen. PS: Da mine forskellige hvide niveauer kommer lidt blålige ud, 27 i stedet for 24 Ohm ville have været et bedre valg for mig.

Bemærk, at jeg brugte en header med hanstifter og tilsluttede LED-benene med F-F jumpere. Dette holdt den samlede højde nede. Jeg lodde modstanderne ind i midten af springerne. Uden brug af et printkort eller loddetæt kort, sammen med brugen af en retvinklet mikro-USB til USB-adapter til WiFi-donglen, gjorde den sidste samling temmelig kompakt.

Til en diffuser anbefaler jeg en bordtennisbold (det er let at bore et hul, der er lige stort nok til at indsætte din 5-8-10 mm LED i). Eller skær toppen af en LED -pære af (en der bruger en plastdiffusor). Til dette skal du markere en linje med en fin spids skarphed, hvor du vil skære, og bruge et Dremel-lignende værktøj med et tyndt afskåret tilbehør. Hvis du kan lide det, kan du bruge en fin lille skåret glasburk eller et glas. Når du har slået dig ned på en diffuser, lim den fast til toppen af kassen.

Til demonstrationer kan jeg godt lide at bruge en lille Li-powerbank placeret inde i kassen. Denne enhed virker mere imponerende totalt trådløs. Selvfølgelig vil den have en begrænset driftstid i denne konfiguration. Til normal drift bruger jeg simpelthen en mikro-USB-vægadapter.

Trin 5: Projektsoftware

Projektsoftware
Projektsoftware

Jeg brugte to programmer, en Node.js -proces, der talte til en børneproces via dens stdin -datastrøm. Dette er, så de hver især kan gøre det, de gør bedst og fungere som uafhængige processer i deres eget tempo.

Her er hvad jeg gjorde: Men du behøver ikke, da jeg har leveret en tar-gzip-fil, der indeholder det resulterende filtræ.

NodeJS-opsætning på serversiden:

cd ~

mkdir node_rgb cd node_rgb mkdir public

sæt 'index.html' og 'style.css' i mappen '~/node_rgb/public' directoryput 'rgbDriver.c' og 'rgb_main.js' i mappen '~/node_rgb'

Kompilér/opbyg c -processen 'rgbDriver':

cd ~/node_rgb

cc -o rgbDriver rgbDriver.c -lwiringPi -lpthread

Henter og udvider ækvivalensen

For at downloade node_rgb.tgz (nedenfor) til din Pi-Zero i din hjemmekatalog (~ pi) kan du gøre et af de 3 følgende:

  1. Download fra browseren i din Pi-Zero GUI Flyt filen til ~ pi/
  2. I et terminalvindue forbundet til dig Pi-Zero: cd ~ piwget

    mv FZBF9BDIL6VBHKF.tgz rgb_node.tgz

  3. Download fra en browser på din stationære computer. Brug WinSCP til at kopiere den til ~ pi-biblioteket på Pi-Zero

Efter at have udført #1 2 eller 3 ovenfor …

cd ~

tar -xzvf node_rgb.tgz tree node_rgb… node_rgb ├── public │ ├── Dow_Jones_Index.html │ ├── index.html │ └── style.css ├── rgbDriver ├── rgbDriver.c ├─ js ├── start_rgb ├── kill_rgb └── track_dji

Den resulterende eksekverbare (ovenfra) 'rgbDriver' kan bruges uafhængigt af Node.js -grænsefladeprocessen.

For at kontrollere, at denne driver og hardwaren fungerer, skal feed-sæt med tre værdier (på 0-255), adskilt af et mellemrum, til driveren. Ligesom 'echo 255 0 0 |./rgbDriver 'for rød eller' echo 0 255 0 |./rgbDriver 'for grøn. Bemærk, at “./” fortæller operativsystemet at finde vores program 'rgbDriver' i det aktuelle bibliotek. Når du udsender en ^c (cntl-c) for at stoppe driveren, kan LED'en muligvis forblive tændt. Alternativt kan du interaktivt fodre dens værdier. Prøv at skrive disse linjer fra kommandolinjen efter hinanden og se LED'en.

./rgbDriver

0 255 0 100 0 100 255 255 0… etc… ^c

Sørg for, at du ikke har 2 af disse processer, der kører parallelt.

Brug denne kommando til at starte hele softwareprogrammet, inklusive Node.js -serveren:

sudo node rgb_main.js

Brug derefter cntl-c, når du vil stoppe Node.js-serveren. Start den med

sudo node rgb_main.js &

for at få det kørt i baghaven, men så skal du bruge en 'sudo kill -9 pid' kommando for at stoppe det. Hvis denne kommando ser fremmed ud for dig, skal du gennemgå output af disse kommandoer: 'man kill' & 'man sudo'.

Brug en browser på dit skrivebord, din tablet eller telefon, som er forbundet til dit lokale netværk. Gå til https:// raspberrypi: 8080/eller hvis det ikke virker, skal du bruge enhedens ip-adresse (hentet fra cmd 'ifconfig') noget som 192.168.1.15 plus portspecifikationen: 8080 eller hvis du bruger Pi-Zero's GUI: localhost: 8080 fungerer.

Betjen RGB-skyderne på den side, der kommer op, og se RGB-LED-lampen følge med.

Andre nyttige kommandoer Bemærk, at hvis du ender med at mere end én 'rgbDriver' kører ad gangen, vil du sandsynligvis få uforudsigelig adfærd. Hvis du prøver at køre en anden kopi af rgb_main.js, kommer den fejl.

Denne kommando viser en liste over alle de relaterede processer:

ps aux | grep rgb

Denne kommando vil dræbe alle nodeJS -processerne sammen med 'rgbDriver' -underordnede processer:

sudo ps aux | grep node.*rgb | awk '{print' sudo kill -9 $ 2} '| sh

Stand alone operation

For at få Pi-Zero til at starte Node.js-serverappen, når den starter op … ved hjælp af din foretrukne editor (f.eks. Nano ~/.bash_profile), skal du indtaste følgende linjer og gemme i ~/.bash_profile

cd node_rgb

sudo node rgb_main.js &

For at undgå at få generende fejlmeddelelser, når du åbner et terminalvindue, skal du bruge betinget kodning som shell -scriptet i filen 'start_rgb'

Når Pi-Zero kører indlejret uden tastatur, mus eller skærm; den grafiske brugergrænseflade tager minimal CPU -tid, da der ikke vil være nogen brugerinteraktion. Jeg deaktiverer ikke automatisk GUI-opstart, da Pi-Zero har flere ressourcer end nødvendigt i dette tilfælde; og jeg kan godt lide at kunne tilslutte et par kabler og bruge det, når som helst i fremtiden. Dette er dog ikke nødvendigt, da du kan bruge en fjern SSH -terminal (f.eks. PuTTY) til at udføre den nødvendige vedligeholdelse.

Brug den som en begivenhedsmonitor

Jeg oprettede en webside til overvågning af den daglige ændring i Dow Jones Index. Dens kilde kan bruges som en retningslinje for din egen side, der bruger nogle webdata og driver din Pi-Zero-indikator i overensstemmelse hermed. Denne side får sine (json) data fra en Googles webtjeneste. Der er mange former for webtjenester, så du bliver nødt til at undersøge den, du vil bruge til at bestemme JavaScript -koden for at få adgang til den.

Hvis du gerne vil bruge din enhed, ligesom jeg, som en dedikeret, enkeltstående, Dow Index-ændringsindikator tilføjer disse linjer til slutningen af ~/.bash_profile-filen eller som ønsket SSH i og udsteder den anden kommandolinje. Hvis du efterfølgende vil bruge fjernbetjeningen 'kill -9', resulterer den resulterende epiphany -browser -proces.

sove 20

epiphany-browser --display =: 0.0 localhost: 8080/Dow_Jones_Index.html &

Indikatoren vil lyse en lysegrå givet en værdi på 0. Den bliver mere og mere grøn med højere værdier. Det er klarest rent grønt på omkring 250. Højere men alligevel værdier forårsager først et lavt blink, op til et dybeste blink på omkring 500. For negativ værdi (daglige fald i Dow) gør det lignende, men i rødt.

OPDATERING maj 2018

Jeg har oprettet en ny webside (SolarStorm_devCon.html, vedhæftet som en.txt -fil på grund af.html -fil, der ikke uploades), som samler oplysninger om GeoMagnetic storm (som kunne forudsige en ødelæggende CME, EMP) og bruger den til at præsentere en farve skala, der afspejler en slags Geo-Storm 'DevCon' Index. angiver potentialet for en katastrofe på grund af en elektromagnetisk puls (EMP) som følge af rumvejr, formodentlig solblusser eller en koronal masseudkastning (CME). Brug det som om du ville have brugt "Dow_Jones_Index.html".

Trin 6: Fjernstyring af websider

Image
Image

På dette tidspunkt kan du styre din IOT -farvelampe fra hvor som helst på dit lokale netværk. Sådan gør du den synlig på det offentlige internet, er ikke en del af dette instruerbare. Hvis du konfigurerer en offentlig IP til din enhed, skal du brug denne IP i kommandoen open socket i JavaScript på dine sider (f.eks. ~/node_rgb/public/index.html)

Jeg planlægger at bruge min Pi-Zero IOT-enhed som en farveindikator i realtid for dagens ændring i Dow Jones-indekset. Jeg oprettede en side, der gør det, som henter json -data fra google.com/finance. Jeg oprettede yderligere et par websider til demonstration af den brede vifte af anvendelser til denne lille IOT -enhed. I stedet for at lægge min PiZero på det offentlige internet, jeg hostede siderne på min eksisterende offentlige server, der vender offentligt (i øjeblikket @ 71.84.135.81 aka: https://raspi.ddns01.com/ når min gratis Dynamic Domain Name Server er i drift), der kører på en original version B Raspberry-Pi.

I koden på mine fjernsider åbnede jeg stikforbindelser til 192.168.1.41:8080 Jeg havde rettet min Pi-Zeros ip til 192.168.1.41. For at gøre det på samme måde skal du følge anvisningerne ved opsætning-hindbær-pi-med-wifi-og-en-statisk-ip under overskriften: Statisk IP-adresse. Så hvis du konfigurerer din PiZero til at være på 192.168.1.41 på dit lokale netværk, vil disse sider, der åbnes fra mit websted, kommunikere med din enhed, da forbindelsen sker fra klientsiden.

Her er de sider, som jeg brugte til at teste og betjene min Pi-Zero IOT-belysningsenhed. Hvis du åbner disse sider (https://71.84.135.81/iot/rgbLamp/ aka https://raspi.ddns01.com/iot/rgbLamp/ eller nogen af siderne indrammet på den side) vil JavaScript på klientsiden kør dit oprettede IOT -lys (da det kører på denne url "192.168.1.41:8080") Hvis du kan lide det, kan du kopiere kilden til en af disse sider og ændre det efter din smag.

Med den første side kan du indstille din enhed til enhver farve. LED -lampen og den farve, du ser på websiden, vil spore ret godt. De anvendte modstandsværdier kan tilpasses (såvel som skærmen) for at få dem mere ægte. Jeg brugte lidt eller ingen tid på at sikre, at de matchede. Denne side opdaterer sin farve, når nogen andre ændrer farven, og serveren sender den opdaterede infomeddelelse.

Den ene side er et enkelt knapstyret trafiklys.

Der er en side designet til at spore en sportskonkurrence (f.eks. Fodbold, basketball, baseball), et valg eller endda tilpasset til en fundraiser eller DEFCON -alarmniveauindikator. Scorerne (eller forpligtede valgstemmer) kunne automatisk hentes fra en webtjeneste eller slettes af en anden webside. Jeg har ikke et automatisk feed, der driver min Contest_demo -side. Nogen med den rigtige know-how kan tilføje en power driver til at køre LED-projektører med høj effekt og bade et værelse (eller sportsbar) med et teams farve, når de er foran. Desværre er jeg for sent med dette instruerbare til årets super-bowl-fester, men i tide til valget i 2016.

Så er der siden, der ligner den, jeg vil bruge til at gøre min enhed til en Dow Jones -sporingsindikator. Skyderen og knapperne er kun på DJI -demosiden til demonstrationsformål. I kilden til denne side er der kode, jeg udviklede til at omfarve et grønskærmsinspireret billede; med nok kommentarer til, at du også kan finde det nyttigt.

Kun den første af disse 4 sider (sammen med den Pi-Zero-baserede index.html-side) lytter efter serveropdateringsmeddelelser og opdateres i overensstemmelse hermed. Resten sendes kun til serveren.

Anbefalede: