Innholdsfortegnelse:

RPi-Zero IoT hendelsesindikator / fargelampe: 6 trinn (med bilder)
RPi-Zero IoT hendelsesindikator / fargelampe: 6 trinn (med bilder)

Video: RPi-Zero IoT hendelsesindikator / fargelampe: 6 trinn (med bilder)

Video: RPi-Zero IoT hendelsesindikator / fargelampe: 6 trinn (med bilder)
Video: Raspberry Pi 1/2/3/Zero Speed Comparison 2024, November
Anonim
RPi-Zero IoT hendelsesindikator / fargelampe
RPi-Zero IoT hendelsesindikator / fargelampe
RPi-Zero IoT hendelsesindikator / fargelampe
RPi-Zero IoT hendelsesindikator / fargelampe
RPi-Zero IoT hendelsesindikator / fargelampe
RPi-Zero IoT hendelsesindikator / fargelampe

Ingen ekstra mikrokontroller og ingen HAT-tilleggsmodul er nødvendig. RPi-Zero gjør alt. Enda bedre, bruk en RPi-Zero W!

Eksempel på bruk: Indikator for webtjenestestatus (f.eks. DowJonesIndex -sporing), statusindikator for politisk eller sportsbegivenhet, stemningslys, spor en sensor, navngi den. Se videoen i trinn 6.

Raspberry-Pi har bare én maskinvarestøttet PWM-linje. Dette prosjektet trenger 3 PWM-linjer, så jeg brukte et programvaredrevet PWM 'c' -bibliotek (https://wiringpi.com/reference/software-pwm-library/), som allerede burde vært installert.

Jeg delte opp behandlingen i 2 prosesser. En, avbruddsdrevet, bytter kontrollinjer til LED etter behov, får sine marsjordre fra sin 'stdin' strøm. Den andre er en hendelsesdrevet nodeJS -server som bruker socket IO. Dette er for å forhindre at ting som lys flimrer samtidig som du sikrer respons. Kombinasjonen bruker vanligvis mindre enn 5% av CPU -en. I tider med kontinuerlige fargeoppdateringer (via glidebrytere og/eller mange klienter) kan den enkelt bruke over 50% (spesielt når du også bruker nettleseren i Pi-Zero GUI). Vær oppmerksom på at når en endring kommer inn, går oppdateringsvarsler ut til alle klientene med åpen sokkel.

Trinn 1: Hva du trenger

Hva du trenger
Hva du trenger
Hva du trenger
Hva du trenger
  • Pi-Zero mikro-SD-kort, 8 GB anbefalt. Med Raspbian-Linux eller NOOBS
  • RGB LED (jeg brukte denne:
  • 3 motstandere (verdi basert på ønsket strøm og/eller ønsket lysstyrke, 1/8 watt)
  • en WiFi, USB-dongle (f.eks. https://www.ebay.com/itm/252018085448) eller enda bedre bruk en Raspberry Pi Z-W (med innebygd WiFi)
  • en sak (f.eks. en liten: https://www.ebay.com/itm/131583579374 med mer plass:
  • en diffusor (se eksempler på bildet)
  • Kabler og adaptere etter behov.

Alternativt, avhengig av hvordan du vil koble komponentene

  • topptekst (https://www.ebay.com/itm/14186077616)
  • gensere (https://www.ebay.com/itm/262235387520)
  • høyre vinkel mikro-USB-adapter (blå USB 2.0 OTG R)
  • mini USB -hub, bare brukt under installasjonsfasen

Trinn 2: Pi-Zero-oppsett og forberedelse for utvikling

Følg dette første oppsettet for PiZero, for å gjøre det klart for utvikling …

Når du har et microSD -kort med NOOBS -oppsett, gjør du følgende:

Koble til microSD -kortet. Tilkoblet en lavstrøm USB -hub med Wifi -dongle, tastatur og mus (Du kan bruke en trådløs mus og/eller tastatur, uansett om det kan, men ikke sannsynlig, kreve ekstern strøm til huben). Jeg brukte adaptere og et nav jeg allerede hadde.

Fest nå en skjerm og en microUSB -strømadapter, så starter den opp. Fortsett og fullfør instruksjonene for konfigurering av Raspbian, Debian Linux, som vist i koblingen noobs-setup ovenfor.

I tillegg hadde jeg en for lav oppløsning. Så jeg la til disse linjene i /boot/config.txt

disable_overscan = 1

hdmi_group = 2 hdmi_mode = 58

Hdmi_mode = 58 fungerer for min skjerm, din kan trenge noe annet.

refer: make-bringebær-pi-bruk-full oppløsning-monitor og

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

Etter oppstart går Pi-Zero inn i GUI-grensesnittet.

For å bruke hele størrelsen på mitt microSD-kort brukte jeg raspi-config #1 'Expand Filesystem' -valget. Fra kommandolinjen, i et terminalvindu, skriver du 'sudo raspi-config' Se: dokumentasjon/konfigurasjon/raspi -konfig.md

Jeg endret også disse innstillingene under #5 'Internasjonaliseringsalternativer'

  • Sted: en_US. UTF-8 UTF-8
  • Tidssone: America… Los_Angeles
  • Tastaturoppsett: Generisk 105-tasters (Intl) PC … Engelsk (USA)

For meg gjorde tastaturstandarden i Storbritannia (som Raspbian er forhåndsinnstilt for) mye av redigeringene mine til en skikkelig jobb.

Endre disse innstillingene etter behov, passende for deg. Vær oppmerksom på at du må bruke piltastene og tabulatortasten for å navigere i 'raspi-config'; og etter et valg kan det være veldig tregt å svare.

Jeg fant det ikke noe problem å koble til internett med en WiFi-USB-dongle (jeg brukte 2 forskjellige). Jeg måtte bare skrive inn passordet for WiFi-nøkkelen min ved hjelp av en nedtrekkslinje øverst til høyre i GUI. Når jeg gjorde dette, ville det automatisk koble til etter omstart/oppstart.

Nå var jeg klar for generell utvikling.

For å komme til dette punktet kan du ta mange veier. Hittil har jeg ikke gitt noen detaljer her, men det er mange metoder og konfigurasjoner beskrevet mer detaljert på nettet. Inkludert en for et hodeløst oppsett hvor du vil bruke et eksternt ssh -terminalvindu på din personlige datamaskin for å gjøre utviklingstrinnene som skal gis i denne instruksjonen.

Trinn 3: Utviklingsmiljø og verktøy

Utviklingsmiljø og verktøy
Utviklingsmiljø og verktøy
Utviklingsmiljø og verktøy
Utviklingsmiljø og verktøy

For systemkonfigurasjon og programvare jeg utviklet for prosjektet, gjorde jeg FoU på en Raspberry Pi-2; for den har en firekjernet CPU som gjør surfing og kodeutvikling, med flere vinduer, mye raskere. Du kan selvfølgelig bruke hvilken som helst modell Raspberry-Pi for å realisere dette prosjektet.

For å sette opp Node.js (hendelsesdrevet I/O-server-JavaScript-støtte) gjorde jeg følgende …

sudo apt-get oppdatering

sudo apt-get install nodejs npm

Legge til disse nodeJS -pakkene (npm er Nodejs Package Manager)

npm installer ekspress

npm installer socket.io

Referanser:

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

www.npmjs.com/package/socket.io Socket. IO muliggjør toveis hendelsesbasert kommunikasjon i sanntid

Trinn 4: Maskinvaren

Maskinvaren
Maskinvaren
Maskinvaren
Maskinvaren
Maskinvaren
Maskinvaren
Maskinvaren
Maskinvaren

Motstandsverdiene som brukes er alle forskjellige, ettersom spenningsfallet og effektiviteten er forskjellig for alle tre LED -fargesegmentene. GPIO Høye utgangsnivåer var alle omtrent 3,2 volt. Hvert LED -segment ble testet for å sikre at det bruker mindre enn 20ma maksimum og ca 40ma sammen (<50ma maks tillatt totalt), som PiZero enkelt kan håndtere. Jeg fikk så mye lysstyrke som mulig, direkte ved å kjøre LED -en; som er nok for mine behov. For å drive høyere strømmer, for en mye lysere utgang, kan mellomliggende drivtransistorer brukes med en felles anode -LED med sin anode koblet til 5v -linjen. PS: Siden mine forskjellige hvite nivåer kommer ut litt blåaktige, 27 i stedet for 24 Ohm hadde vært et bedre valg for meg.

Legg merke til at jeg brukte en topp med mannlige pins, og koblet til LED-bena med F-F-hoppere. Dette holdt nede totalhøyden. Jeg loddet motstanderne inn i midten av hopperne. Uten bruk av kretskort eller loddfritt kort, sammen med bruk av en rettvinklet mikro-USB til USB-adapter for WiFi-dongelen, gjorde den siste samlingen ganske kompakt.

For en diffuser anbefaler jeg en ping-pongkule (det er enkelt å bore et hull som er stort nok til å sette inn din 5-8-10 mm LED i). Eller kutt av toppen av en LED -lyspære (en som bruker en plastdiffusor). For dette, merk en linje, med en fin spiss skarphet, der du vil kutte, og bruk et Dremel-lignende verktøy med et tynt avskjæringsfeste. Hvis du vil, kan du bruke en fin liten kuttet glassburk eller et glass. Når du har satt deg på den ene diffusoren, lim den fast på toppen av saken.

For demonstrasjoner liker jeg å bruke en liten Li-bank som er plassert inne i saken. Denne enheten virker mer imponerende helt trådløs. Selvfølgelig vil den ha en begrenset driftstid i den konfigurasjonen. For normal drift bruker jeg bare en mikro-USB-veggadapter.

Trinn 5: Prosjektprogramvare

Prosjektprogramvare
Prosjektprogramvare

Jeg brukte to programmer, en Node.js -prosess som snakket med en barneprosess via sin stdin -datastrøm. Dette er slik at de hver kan gjøre det de gjør best og fungere som uavhengige prosesser i sitt eget tempo.

Her er hva jeg gjorde: Men du trenger ikke, siden jeg har levert en tar-gzip-fil som inneholder det resulterende filtreet.

NodeJS oppsett på serversiden:

cd ~

mkdir node_rgb cd node_rgb mkdir public

sette 'index.html' og 'style.css' i katalogen '~/node_rgb/public' katalog 'rgbDriver.c' og 'rgb_main.js' i katalogen '~/node_rgb'

Kompiler/bygg c -prosessen 'rgbDriver':

cd ~/node_rgb

cc -o rgbDriver rgbDriver.c -lwiringPi -lpthread

Nedlasting og utvidelse av ekvivalensen

For å laste ned node_rgb.tgz (nedenfor) til Pi-Zero i hjemmekatalogen (~ pi) kan du gjøre ett av de tre følgende:

  1. Last ned fra nettleseren i Pi-Zero GUI Flytt filen til ~ pi/
  2. I et terminalvindu som er koblet til deg Pi-Zero: cd ~ piwget

    mv FZBF9BDIL6VBHKF.tgz rgb_node.tgz

  3. Last ned fra en nettleser på din stasjonære datamaskin. Bruk WinSCP for å kopiere den til ~ pi-katalogen på Pi-Zero

Etter å ha utført nr. 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 kjørbare (ovenfra) 'rgbDriver' kan brukes uavhengig av Node.js -grensesnittprosessen.

For å kontrollere at denne driveren og maskinvaren fungerer, må du mate sett med tre verdier (på 0-255), atskilt med et mellomrom, til driveren. Liker 'ekko 255 0 0 |./rgbDriver 'for rødt eller' echo 0 255 0 |./rgbDriver 'for grønt. Vær oppmerksom på at "./" forteller operativsystemet å finne programmet "rgbDriver" i den nåværende katalogen. Når du sender ut en ^c (cntl-c) for å stoppe driveren, kan det hende at lysdioden forblir på. Alternativt kan du interaktivt mate verdiene. Prøv å skrive disse linjene etter kommandolinjen etter hverandre og se på LED -lampen.

./rgbDriver

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

Pass på at du ikke har to av disse prosessene som kjører parallelt.

For å starte hele programvarepakken, inkludert Node.js -serveren, bruk denne kommandoen:

sudo node rgb_main.js

Bruk deretter cntl-c når du vil stoppe Node.js-serveren. Start den med

sudo node rgb_main.js &

for å få det kjørt i bakken, men da må du bruke en 'sudo kill -9 pid' kommando for å stoppe det. Hvis denne kommandoen ser fremmed ut for deg, kan du gå gjennom utdataene fra disse kommandoene: 'man kill' & 'man sudo'.

Bruk en nettleser på skrivebordet, nettbrettet eller telefonen som er koblet til ditt lokale nettverk. Gå til https:// raspberrypi: 8080/eller hvis det ikke fungerer, bruk ip-adressen til enheten (hentet fra cmd 'ifconfig') noe som 192.168.1.15 pluss portspesifikasjonen: 8080 eller hvis du bruker Pi-Zero's GUI: localhost: 8080 vil fungere.

Bruk RGB-glidebryterne på siden som kommer opp, og se hvordan RGB-LED-lampen følger med.

Andre nyttige kommandoer Vær oppmerksom på at hvis du ender med at mer enn en 'rgbDriver' kjører om gangen, er det sannsynlig at du får uforutsigbar oppførsel. Hvis du prøver å kjøre en andre kopi av rgb_main.js, blir det feil.

Denne kommandoen viser alle relaterte prosesser:

ps aux | grep rgb

Denne kommandoen vil drepe alle nodeJS -prosessene, sammen med 'rgbDriver' underordnede prosesser:

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

Frittstående drift

For å få Pi-Zero til å starte Node.js-serverappen når den starter opp … ved å bruke favorittredigereren din (f.eks. Nano ~/.bash_profile), skriver du inn følgende linjer og lagrer i ~/.bash_profile

cd node_rgb

sudo node rgb_main.js &

For å unngå å få plagefeilmeldinger når du åpner et terminalvindu, bruk betinget koding som skallskriptet i 'start_rgb' -filen

Når Pi-Zero kjører innebygd, uten tastatur, mus eller skjerm; det grafiske brukergrensesnittet vil ta minimal CPU -tid, siden det ikke vil være noen brukerinteraksjon. Jeg deaktiverer ikke automatisk GUI-oppstart, ettersom Pi-Zero har flere ressurser enn nødvendig, i dette tilfellet; og jeg liker å kunne koble til noen kabler og bruke den, når som helst i fremtiden. Dette er imidlertid ikke nødvendig, ettersom du kan bruke en ekstern SSH -terminal (f.eks. PuTTY) til å utføre nødvendig vedlikehold.

Bruker den som en hendelsesmonitor

Jeg opprettet en webside for å overvåke den daglige endringen i Dow Jones Index. Kilden kan brukes som en retningslinje for din egen side som bruker noen webdata og driver Pi-Zero-indikatoren tilsvarende. Denne siden får sine (json) data fra en Googles webtjeneste. Det er mange former for webtjenester, så du må undersøke den du vil bruke for å bestemme JavaScript -koden for å få tilgang til den.

Hvis du vil bruke enheten din, gjør jeg det, som en dedikert, frittstående Dow Index-endringsindikator, som legger disse linjene til slutten av ~/.bash_profile-filen, eller som ønsket SSH i og utsteder den andre kommandolinjen. Hvis du senere vil bruke fjernkontrollen 'kill -9', resulterer den resulterende epiphany -nettleserprosessen.

sove 20

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

Indikatoren vil lyse en lys grå gitt verdien 0. Den blir mer og mer grønn med høyere verdier. Den er klarest grønn på omtrent 250. Høyere men likevel verdier forårsaker først en grunne blink, opptil en dypeste blits på omtrent 500. For negativ verdi (daglige fall i Dow) gjør den lignende, men i rødt.

OPPDATERING mai 2018

Jeg har opprettet en ny webside (SolarStorm_devCon.html, vedlagt som en.txt -fil, på grunn av at.html -filen ikke lastes opp) som samler informasjon om geomagnetisk storm (som kan forutsi en ødeleggende CME, EMP) og bruker den til å presentere en farge skala som gjenspeiler en slags Geo-Storm 'DevCon' indeks. som indikerer potensialet for en katastrofe på grunn av en elektromagnetisk puls (EMP) som følge av romvær, antagelig solfakkel eller Coronal masseutkast (CME). Bruk den som du ville ha brukt "Dow_Jones_Index.html".

Trinn 6: Ekstern websidekontroll

Image
Image

På dette tidspunktet kan du kontrollere IOT -fargelampen din hvor som helst på ditt lokale nettverk. Hvordan du gjør den synlig på det offentlige internett er ikke en del av denne instruksen. Hvis du konfigurerer en offentlig IP for enheten din, må du bruk den IP -en i kommandoen open socket i JavaScript på sidene dine (f.eks. ~/node_rgb/public/index.html)

Jeg planlegger å bruke Pi-Zero IOT-enheten som en fargeindikator i sanntid for dagens endring i Dow Jones-indeksen. Jeg opprettet en side som gjør det, som får json -data fra google.com/finance. Jeg opprettet videre noen få websider for å demonstrere det store bruksområdet for denne lille IOT -enheten. I stedet for å sette min PiZero på det offentlige Internett, jeg var vert for sidene på min eksisterende offentlige vendte webserver (for tiden @ 71.84.135.81 aka: https://raspi.ddns01.com/ når min gratis Dynamic Domain Name Server er i drift), som kjører på en originalversjon B Raspberry-Pi.

I koden på de eksterne sidene åpnet jeg socket-tilkoblinger til 192.168.1.41:8080. Jeg hadde fikset min Pi-Zeros IP til 192.168.1.41. Følg instruksjonene for å sette opp-bringebær-pi-med-wifi-og-en-statisk-ip under overskriften: Statisk IP-adresse. Så hvis du konfigurerer PiZero til å være på 192.168.1.41 på ditt lokale nettverk, disse sidene, åpnet fra nettstedet mitt, vil kommunisere med enheten din, ettersom tilkoblingen er utført fra klientsiden.

Her er sidene jeg brukte til å teste og betjene Pi-Zero IOT-belysningsenheten min. Hvis du tar opp disse sidene (https://71.84.135.81/iot/rgbLamp/ aka https://raspi.ddns01.com/iot/rgbLamp/ eller noen av sidene innrammet på den siden) vil JavaScript på klientsiden kjør det opprettede IOT -lyset ditt (gitt at det kjører på denne nettadressen “192.168.1.41:8080”) Hvis du vil kan du kopiere kilden til noen av disse sidene og endre det du liker.

Med den første siden kan du sette enheten til hvilken som helst farge. LED -lampen og fargen du ser på nettstedet vil spore ganske bra. Motstandsverdiene som brukes kan justeres (så vel som skjermen) for å få dem mer ekte. Jeg brukte liten eller ingen tid på å sikre at de passet. Denne siden oppdaterer fargen når noen andre endrer fargen og serveren sender ut den oppdaterte infomeldingen.

Den ene siden er et enkelt knappestyrt trafikklys.

Det er en side designet for å spore en sportskonkurranse (f.eks. Fotball, basketball, baseball), et valg eller til og med tilpasset en innsamlingsaksjon eller DEFCON -varslingsnivåindikator. Poengene (eller forpliktende valgstemmer) kan automatisk hentes fra en webtjeneste eller skrapes av en annen webside. Jeg har ikke en automatisk feed som driver min Contest_demo -side. Noen med riktig kunnskap kan legge til en driver for å kjøre LED-flomlys med høy effekt og bade et rom (eller sportsbar) med lagets farge når de er foran. Dessverre er jeg for sent med dette instruerbare for årets super-bowl-fester, men i tide til valget i 2016.

Så er det siden som ligner på den jeg skal bruke for å gjøre enheten min til en Dow Jones sporingsindikator. Glidebryteren og knappene er bare på DJI -demosiden for demonstrasjonsformål. I kilden til denne siden er det kode jeg utviklet for å farge et grønnskjerminspirert bilde på nytt; med nok kommentarer til at du også synes det er nyttig.

Bare den første av disse 4 sidene (sammen med Pi-Zero-baserte index.html-siden) lytter etter oppdateringer om serveroppdateringer, og oppdaterer deretter. Resten sendes bare til serveren.

Anbefalt: