Innehållsförteckning:

RPi-Zero IoT-händelseindikator / färglampa: 6 steg (med bilder)
RPi-Zero IoT-händelseindikator / färglampa: 6 steg (med bilder)

Video: RPi-Zero IoT-händelseindikator / färglampa: 6 steg (med bilder)

Video: RPi-Zero IoT-händelseindikator / färglampa: 6 steg (med bilder)
Video: Kamera-LAMPA med spårning och identifiering av en person. 2024, Juli
Anonim
RPi-Zero IoT-händelseindikator / färglampa
RPi-Zero IoT-händelseindikator / färglampa
RPi-Zero IoT-händelseindikator / färglampa
RPi-Zero IoT-händelseindikator / färglampa
RPi-Zero IoT-händelseindikator / färglampa
RPi-Zero IoT-händelseindikator / färglampa

Ingen extra mikrokontroller och ingen HAT-tilläggsmodul krävs. RPi-Zero gör allt. Ännu bättre, använd en RPi-Zero W!

Exempel på användning: Web Service Status Indicator (t.ex. Se videon i steg 6.

Raspberry-Pi har bara en maskinvara som stöds av PWM. Detta projekt behöver 3 PWM-linjer, så jag använde ett programvaredrivet PWM 'c' -bibliotek (https://wiringpi.com/reference/software-pwm-library/), som redan bör installeras.

Jag delade upp behandlingen i 2 processer. En, avbruten driven, byter styrledningar till LED efter behov, får sina marschorder från sin "stdin" ström. Den andra är en händelsedriven nodeJS -server som använder socket IO. Detta för att förhindra saker som att ljuset flimrar samtidigt som det säkerställer lyhördhet. Kombinationen använder vanligtvis mindre än 5% av CPU: n. Under tider med kontinuerliga färguppdateringar (via reglage och/eller många klienter) kan den enkelt använda över 50% (särskilt när du också använder webbläsaren i Pi-Zero GUI). Observera att när en ändring kommer in går uppdateringsmeddelanden ut till alla öppna socket -klienter.

Steg 1: Vad du behöver

Vad du behöver
Vad du behöver
Vad du behöver
Vad du behöver
  • Pi-Zero mikro-SD-kort, 8 GB rekommenderas. Med Raspbian-Linux eller NOOBS
  • RGB Led (jag använde den här:
  • 3 motstånd (värde baserat på önskad ström och/eller önskad ljusstyrka, 1/8 watt)
  • en WiFi, USB-dongel (t.ex. https://www.ebay.com/itm/252018085448) eller ännu bättre använda en Raspberry Pi Z-W (med inbyggd WiFi)
  • ett fodral (t.ex. litet: https://www.ebay.com/itm/131583579374 med mer utrymme:
  • en diffusor (se exempel på bilden)
  • Kablar och adaptrar efter behov.

Alternativt, beroende på hur du vill ansluta komponenterna

  • rubrik (https://www.ebay.com/itm/14186077616)
  • hoppare (https://www.ebay.com/itm/262235387520)
  • högervinklad mikro-USB-adapter (blå USB 2.0 OTG R)
  • mini USB -hubb, används endast under installationsfasen

Steg 2: Pi-Zero-installation och förberedelse för utveckling

Följ den här första installationen för din PiZero för att göra den redo för utveckling …

När du väl har ett microSD -kort med NOOBS -inställning:

Anslut microSD -kortet. Ansluten en USB -hubb med låg effekt och en wifi -dongel, tangentbord och mus (du kan använda en trådlös mus och/eller tangentbord, hur som helst kan det, men inte troligtvis, kräva extern ström till hubben). Jag använde adaptrar och ett nav som jag redan hade.

Anslut nu en bildskärm och en microUSB -strömadapter så startar den. Fortsätt och avsluta anvisningarna om hur du konfigurerar Raspbian, Debian Linux, enligt länken noobs-setup ovan.

Dessutom hade jag för låg upplösning. Så jag lade till dessa rader till /boot/config.txt

disable_overscan = 1

hdmi_group = 2 hdmi_mode = 58

Hdmi_mode = 58 fungerar för min bildskärm, din kan behöva något annat.

refer: make-hallon-pi-use-full-resolution-monitor och

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

Efter uppstart går Pi-Zero in i GUI-gränssnittet.

För att utnyttja hela storleken på mitt microSD-kort använde jag valet raspi-config #1 'Expand Filesystem'. Från kommandoraden, i ett terminalfönster, skriv 'sudo raspi-config' Se: dokumentation/konfiguration/raspi -konfig.md

Jag ändrade också dessa inställningar under #5 "Internationaliseringsalternativ"

  • Plats: en_US. UTF-8 UTF-8
  • Tidszon: Amerika… Los_Angeles
  • Tangentbordslayout: Generisk 105-tangents (Intl) PC … engelska (USA)

För mig gjorde Storbritanniens tangentbordstandard (som Raspbian kommer förinställd för) mycket av mina redigeringar till ett riktigt jobb.

Ändra dessa inställningar efter behov, lämpligt för dig. Observera att du måste använda piltangenterna och tabbtangenten för att navigera i 'raspi-config'; och efter ett urval kan det vara väldigt långsamt att svara.

Jag tyckte att det inte var något problem att ansluta till internet med en WiFi-USB-dongel (jag använde 2 olika). Jag var helt enkelt tvungen att ange mitt lösenord för WiFi-åtkomstnyckel med en rullgardinsmeny längst upp till höger i GUI. När jag gjorde detta skulle den automatiskt ansluta efter omstart/uppstart.

Nu var jag redo för allmän utveckling.

För att komma till denna punkt kan du ta många vägar. Hittills har jag inte gett några detaljerade detaljer här men det finns många metoder och konfigurationer som beskrivs mer detaljerat på webben. Inklusive en för en huvudlös inställning där du skulle använda ett fjärranslutet ssh -terminalfönster på din dator för att göra utvecklingsstegen som ges i denna instruktion.

Steg 3: Utvecklingsmiljö och verktyg

Utvecklingsmiljö och verktyg
Utvecklingsmiljö och verktyg
Utvecklingsmiljö och verktyg
Utvecklingsmiljö och verktyg

För systemkonfiguration och programvara som jag utvecklade för projektet gjorde jag FoU på en Raspberry Pi-2; för den har en fyrkärnig CPU som gör surfning och kodutveckling, med flera fönster, mycket snabbare. Du kan naturligtvis använda vilken modell Raspberry-Pi som helst för att förverkliga detta projekt.

För att konfigurera Node.js (händelsedrivet I/O-server-JavaScript-stöd) gjorde jag följande …

sudo apt-get uppdatering

sudo apt-get install nodejs npm

Lägga till dessa nodeJS -paket (npm är Nodejs Package Manager)

npm installera express

npm installera socket.io

Referenser:

www.npmjs.com/package/express Snabb, minimalistisk webbram

www.npmjs.com/package/socket.io Socket. IO möjliggör dubbelriktad händelsebaserad kommunikation i realtid

Steg 4: Hårdvaran

Hårdvaran
Hårdvaran
Hårdvaran
Hårdvaran
Hårdvaran
Hårdvaran
Hårdvaran
Hårdvaran

De motståndsvärden som används är alla olika, eftersom spänningsfallet och effektiviteten skiljer sig åt för alla tre LED -färgsegment. GPIO Höga utgångsnivåer var alla cirka 3,2 volt. Varje LED -segment testades för att säkerställa att det förbrukar mindre än 20ma max och cirka 40ma tillsammans (<50ma max tillåtet totalt), vilket PiZero enkelt kan hantera. Jag fick så mycket utgångsljusstyrka som jag kunde, direkt drivande LED: n; vilket är tillräckligt för mina behov. För att driva högre strömmar, för en mycket ljusare effekt, kan mellanliggande transistorer användas med en gemensam anod -LED med sin anod ansluten till 5v -linjen. PS: Eftersom mina olika vita nivåer kommer ut lite blåaktiga, 27 istället för 24 Ohm hade varit ett bättre val för mig.

Lägg märke till att jag använde en rubrik med hanstiften och ansluten till LED-benen med F-F-hoppare. Detta höll den totala höjden nere. Jag lödde motståndarna i mitten av hopparna. Att använda inget kretskort eller lödfritt kort, tillsammans med användningen av en rätvinklad mikro-USB till USB-adapter för WiFi-dongeln, gjorde den slutliga monteringen ganska kompakt.

För en diffusor rekommenderar jag en pingisboll (det är lätt att borra ett hål som är tillräckligt stort för att sätta in din 5-8-10 mm LED i). Eller klipp av toppen av en LED -lampa (en som använder en plastdiffusor). För detta markerar du en linje, med en fin spets, där du vill klippa, och använd ett Dremel-liknande verktyg med en tunn avskärning. Om du vill kan en fin liten glasburk eller ett dricksglas användas. När du har lagt dig på en diffusor klistrar du fast den på höljet.

För demonstrationer gillar jag att använda en liten Li-powerbank placerad inuti fodralet. Denna enhet verkar mer imponerande helt trådlös. Naturligtvis kommer den att ha en begränsad driftstid i den konfigurationen. För normal drift använder jag helt enkelt en mikro-USB-väggadapter.

Steg 5: Projektprogramvara

Projektprogramvara
Projektprogramvara

Jag använde två program, en Node.js -process som pratade med en barnprocess via dess stdin -dataström. Detta är så att de kan göra vad de gör bäst och fungera som oberoende processer i sin egen takt.

Här är vad jag gjorde: Men du behöver inte, eftersom jag har tillhandahållit en tar-gzip-fil som innehåller det resulterande filträdet.

NodeJS inställning på serversidan:

cd ~

mkdir node_rgb cd node_rgb mkdir public

lägg 'index.html' och 'style.css' i katalogen '~/node_rgb/public' katalog 'rgbDriver.c' och 'rgb_main.js' i katalogen '~/node_rgb'

Kompilera/bygg c -processen 'rgbDriver':

cd ~/nod_rgb

cc -o rgbDriver rgbDriver.c -lwiringPi -lpthread

Ladda ner och utöka ekvivalensen

För att ladda ner node_rgb.tgz (nedan) till din Pi-Zero i din hemkatalog (~ pi) kan du göra något av de tre följande:

  1. Ladda ner från webbläsaren i din Pi-Zero GUI Flytta filen till ~ pi/
  2. I ett terminalfönster anslutet till dig Pi-Zero: cd ~ piwget

    mv FZBF9BDIL6VBHKF.tgz rgb_node.tgz

  3. Ladda ner från en webbläsare på din stationära dator. Använd WinSCP för att kopiera den till ~ pi-katalogen på Pi-Zero

Efter att ha utfört #1 2 eller 3 ovan …

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 resulterande körbara (ovanifrån) 'rgbDriver' kan användas oberoende av Node.js -gränssnittsprocessen.

För att verifiera att drivrutinen och maskinvaran fungerar, mata uppsättningar med tre värden (0-255), separerade med ett mellanslag, till drivrutinen. Gilla 'echo 255 0 0 |./rgbDriver 'för rött eller' eko 0 255 0 |./rgbDriver 'för grönt. Observera att “./” säger till operativsystemet att hitta vårt program”rgbDriver” i den aktuella katalogen. När du utfärdar en ^c (cntl-c) för att stoppa föraren kan lysdioden lysa eller inte. Alternativt kan du interaktivt mata dess värden. Försök att skriva, från kommandoraden, dessa rader efter varandra och titta på lysdioden.

./rgbDriver

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

Se till att du inte har två av dessa processer som körs parallellt.

För att starta hela programvarupaketet, inklusive Node.js -servern, använd det här kommandot:

sudo -nod rgb_main.js

Använd sedan cntl-c när du vill stoppa Node.js-servern. Starta den med

sudo -nod rgb_main.js &

för att få det att köras på baksidan, men då måste du använda ett kommando 'sudo kill -9 pid' för att stoppa det. Om det här kommandot ser främmande ut för dig, granska resultatet av dessa kommandon: 'man kill' & 'man sudo'.

Använd en webbläsare på skrivbordet, surfplattan eller telefonen som är ansluten till ditt lokala nätverk. Gå till https:// raspberrypi: 8080/eller om det inte fungerar, använd enhetens ip-adress (hämtad från cmd 'ifconfig') något liknande 192.168.1.15 plus portspecifikationen: 8080 eller om du använder Pi-Zero's GUI: localhost: 8080 fungerar.

Använd RGB-reglagen på sidan som kommer upp och se hur RGB-LED-lampan följer med.

Andra användbara kommandon Observera att om du hamnar med mer än en 'rgbDriver' igång samtidigt kommer du sannolikt att få oförutsägbart beteende. Om du försöker köra en andra kopia av rgb_main.js blir det fel.

Detta kommando kommer att lista alla relaterade processer:

ps aux | grep rgb

Detta kommando kommer att döda alla nodeJS -processer, tillsammans med 'rgbDriver' underordnade processer:

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

Fristående drift

För att få Pi-Zero att starta Node.js-serverappen när den startar … med din favoritredigerare (t.ex. nano ~/.bash_profile), skriv in följande rader och spara till ~/.bash_profile

cd node_rgb

sudo -nod rgb_main.js &

För att undvika att få obehagliga felmeddelanden när du öppnar ett terminalfönster använder du villkorad kodning som skalskriptet i filen 'start_rgb'

När Pi-Zero körs inbäddad, utan tangentbord, mus eller bildskärm; det grafiska användargränssnittet tar minimal CPU -tid, eftersom det inte kommer att finnas någon användarinteraktion. Jag inaktiverar inte automatisk GUI-start, eftersom Pi-Zero har mer resurser än vad som behövs, i det här fallet; och jag gillar att kunna ansluta några kablar och använda det, när som helst i framtiden. Detta är dock inte nödvändigt eftersom du kan använda en fjärrstyrd SSH -terminal (t.ex. PUTTY) för att utföra allt underhåll som behövs.

Använd den som en evenemangsmonitor

Jag skapade en webbsida för att övervaka den dagliga förändringen i Dow Jones Index. Dess källa kan användas som en riktlinje för din egen sida som använder vissa webbdata och driver din Pi-Zero-indikator i enlighet därmed. Denna sida hämtar sin (json) -data från en Googles webbtjänst. Det finns många former av webbtjänster, så du måste undersöka den som du vill använda för att bestämma JavaScript -koden för att komma åt den.

Om du vill använda din enhet, precis som jag, som en dedikerad, fristående Dow Index-ändringsindikator lägger jag till dessa rader i slutet av filen ~/.bash_profile, eller efter önskad SSH och utfärdar den andra kommandoraden. Om du senare vill använda fjärrkontrollen 'kill -9' resulterar den epiphany -webbläsarprocessen.

sova 20

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

Indikatorn lyser ljusgrått med ett värde på 0. Det blir mer och mer grönt med högre värden. Den är klarast grön på cirka 250. Högre men ändå värden orsakar först en grund blixt, upp till en djupaste blixt på cirka 500. För negativt värde (dagliga droppar i Dow) gör den liknande, men i rött.

UPPDATERING maj 2018

Jag har skapat en ny webbsida (SolarStorm_devCon.html, bifogad som en.txt -fil, på grund av att.html -fil inte laddas upp) som samlar information om GeoMagnetic storm (som kan förutsäga en förödande CME, EMP) och använder den för att presentera en färg skala som återspeglar ett slags Geo-Storm 'DevCon' Index. indikerar potentialen för en katastrof på grund av en elektromagnetisk puls (EMP) till följd av rymdväder, förmodligen soluppblåsningar eller en Coronal massutkastning (CME). Använd det som om du skulle ha använt "Dow_Jones_Index.html".

Steg 6: Fjärrkontroll av webbsidor

Image
Image

Vid denna tidpunkt kan du styra din IOT -färglampa var som helst i ditt lokala nätverk. Hur du gör den synlig på det offentliga internet är inte en del av denna instruerbara. Om du konfigurerar en offentlig IP för din enhet måste du använd den IP -adressen i kommandot open socket i JavaScript på dina sidor (t.ex. ~/node_rgb/public/index.html)

Jag planerar att använda min Pi-Zero IOT-enhet som en färgindikator i realtid för dagens förändring av Dow Jones Index. Jag skapade en sida som gör det, som hämtar json -data från google.com/finance. Jag skapade ytterligare några webbsidor för att demonstrera det stora utbudet av användningsområden för denna lilla IOT -enhet. var värd för sidorna på min befintliga offentliga webbserver (för närvarande @ 71.84.135.81 aka: https://raspi.ddns01.com/ när min kostnadsfria Dynamic Domain Name Server är igång), som körs på en originalversion B Raspberry-Pi.

I koden på mina fjärrsidor öppnade jag socketanslutningar till 192.168.1.41:8080 Jag hade fixat min Pi-Zeros IP till 192.168.1.41. För att göra på samma sätt följer du anvisningarna för att konfigurera-hallon-pi-med-wifi-och-en-statisk-ip under rubriken: Statisk IP-adress. Så om du konfigurerar din PiZero till att vara på 192.168.1.41 på ditt lokala nätverk, dessa sidor, öppnade från min webbplats, kommer att kommunicera med din enhet, eftersom anslutningen sker från klientsidan.

Här är de sidor som jag använde för att testa och använda min Pi-Zero IOT-belysningsenhet. Om du tar upp dessa sidor (https://71.84.135.81/iot/rgbLamp/ aka https://raspi.ddns01.com/iot/rgbLamp/ eller någon av sidorna inramade på den sidan) kommer JavaScript på klientsidan att kör din skapade IOT -lampa (eftersom den körs på denna webbadress "192.168.1.41:8080") Om du vill kan du kopiera källan till någon av dessa sidor och ändra efter eget tycke.

Med den första sidan kan du ställa in enheten på valfri färg. LED -lampan och färgen du ser på webbsidan kommer att spåra ganska bra. De motståndsvärden som används kan justeras (liksom monitorn) för att få dem mer riktigt matchade. Jag spenderade lite eller ingen tid på att se till att de matchade. Denna sida kommer att uppdatera sin färg när någon annan ändrar färg och servern skickar ut det uppdaterade informationsmeddelandet.

En sida är ett enkelt knappstyrt trafikljus.

Det finns en sida som är utformad för att spåra en sporttävling (t.ex. fotboll, basket, baseball), ett val eller till och med anpassat för en insamling eller DEFCON -varningsnivåindikator. Poängen (eller begåva valröster) kunde automatiskt erhållas från en webbtjänst eller skrapas bort från någon annan webbsida. Jag har inte ett automatiskt flöde som driver min Contest_demo -sida. Någon med rätt know-how kan lägga till en drivrutin för att köra LED-strålkastare med hög effekt och bada ett rum (eller sportbar) med ett lags färg när de är framme. Tyvärr är jag för sen med detta instruerbara för årets super-bowl-fester, men i tid för valet 2016.

Sedan finns det sidan som liknar den jag ska använda för att göra min enhet till en Dow Jones -spårningsindikator. Reglaget och knapparna finns bara på DJI -demosidan för demonstrationsändamål. I källan till denna sida finns kod som jag utvecklat för att färga om en grönskärmsinspirerad bild; med tillräckligt många kommentarer så att du också kan tycka att det är användbart.

Endast den första av dessa fyra sidor (tillsammans med Pi-Zero-baserade index.html-sidan) lyssnar efter serveruppdateringsmeddelanden och uppdateras därefter. Resten skickas bara till servern.

Rekommenderad: