Inhoudsopgave:
- Stap 1: Wat heb je nodig
- Stap 2: Pi-Zero Setup en voorbereiding voor ontwikkeling
- Stap 3: Ontwikkelomgeving en tools
- Stap 4: De hardware
- Stap 5: Projectsoftware
- Stap 6: Beheer van webpagina's op afstand
Video: RPi-Zero IoT-gebeurtenisindicator / kleurenlamp - Ajarnpa
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:17
Geen extra microcontroller en geen HAT-uitbreidingsmodule vereist. De RPi-Zero doet het allemaal. Gebruik nog beter een RPi-Zero W!
Voorbeeldgebruik: statusindicator webservice (bijv. DowJonesIndex-tracking), statusindicator voor politieke of sportevenementen, sfeerlicht, een sensor volgen, noem maar op. Bekijk de video in stap 6.
De Raspberry-Pi heeft slechts één hardware-ondersteunde PWM-lijn. Dit project heeft 3 PWM-lijnen nodig, dus ik gebruikte een softwaregestuurde PWM 'c'-bibliotheek (https://wiringpi.com/reference/software-pwm-library/), die al zou moeten zijn geïnstalleerd.
Ik heb de verwerking opgedeeld in 2 processen. Een, interruptgestuurd, de stuurlijnen naar de LED schakelend als dat nodig is, zijn marsorders krijgend van zijn 'stdin'-stroom. De andere is een event-driven nodeJS-server die gebruik maakt van socket IO. Dit is om te voorkomen dat dingen zoals licht flikkeren en tegelijkertijd reactievermogen te garanderen. De combinatie gebruikt doorgaans minder dan 5% van de CPU. In tijden van continue kleurupdates (via schuifregelaars en/of veel clients) kan het gemakkelijk meer dan 50% gebruiken (vooral wanneer ook de browser in de Pi-Zero GUI wordt gebruikt). Merk op dat wanneer een wijziging binnenkomt, updatemeldingen uitgaan naar alle open socket-clients.
Stap 1: Wat heb je nodig
- Pi-Zero micro-SD-kaart, 8 GB aanbevolen. Met Raspbian-Linux of NOOBS
- RGB Led (ik gebruikte deze:
- 3 weerstanden (waarde gebaseerd op gewenste stroom en/of gewenste helderheid, 1/8 watt)
- een WiFi, USB-dongle (bijv. https://www.ebay.com/itm/252018085448) of nog beter een Raspberry Pi Z-W (met ingebouwde WiFi)
- een koffer (bijvoorbeeld een kleine: https://www.ebay.com/itm/131583579374 met meer ruimte:
- een diffuser (zie voorbeelden in afbeelding)
- Kabels en adapters indien nodig.
Optioneel, afhankelijk van hoe je de componenten wilt aansluiten
- koptekst (https://www.ebay.com/itm/14186077616)
- jumpers (https://www.ebay.com/itm/262235387520)
- haakse micro-USB-adapter (blauwe USB 2.0 OTG R)
- mini-USB-hub, alleen gebruikt tijdens de installatiefase
Stap 2: Pi-Zero Setup en voorbereiding voor ontwikkeling
Volg deze initiële instelling voor uw PiZero om deze klaar te maken voor ontwikkeling…https://www.raspberrypi.org/help/noobs-setup/
Zodra u een microSD-kaart met NOOBS-configuratie heeft, doet u het volgende:
Sluit de microSD-kaart aan. Bevestig een USB-hub met laag vermogen met een wifi-dongle, toetsenbord en muis (u kunt een draadloze muis en/of toetsenbord gebruiken, hoe dan ook, het kan, maar het is niet waarschijnlijk, dat er externe voeding voor de hub nodig is). Ik gebruikte adapters en een hub die ik al had.
Sluit nu een monitor en een microUSB-voedingsadapter aan en hij zal opstarten. Ga door en voltooi de instructies voor het instellen van Raspbian, Debian Linux, zoals te zien is in de noobs-setup-link hierboven.
Bovendien had ik een te lage resolutie. Dus ik heb deze regels toegevoegd aan /boot/config.txt
disable_overscan=1
hdmi_group=2 hdmi_mode=58
De hdmi_mode=58 werkt voor mijn monitor, die van jou heeft misschien iets anders nodig.
zie: make-raspberry-pi-use-full-resolution-monitor en
raspberrypi.org/documentation/configuration/config-txt.md
Na het opstarten gaat de Pi-Zero naar de GUI-interface.
Om gebruik te maken van de volledige grootte van mijn microSD-kaart heb ik de selectie van raspi-config #1 'Expand Filesystem' gebruikt. Voer vanaf de opdrachtregel in een terminalvenster 'sudo raspi-config' in. Raadpleeg: documentatie/configuratie/raspi -config.md
Ook heb ik deze instellingen gewijzigd onder #5 'Internationaliseringsopties'
- Landinstelling: nl_US. UTF-8 UTF-8
- Tijdzone: Amerika … Los_Angeles
- Toetsenbordindeling: generieke 105-toetsen (intl) pc … Engels (VS)
Voor mij maakte de toetsenbordstandaard uit Groot-Brittannië (waarvoor Raspbian vooraf is ingesteld) veel van mijn bewerkingen tot een echt karwei.
Wijzig deze instellingen indien nodig, passend bij u. Merk op dat je de pijltjestoetsen en de tab-toets moet gebruiken om te navigeren in 'raspi-config'; en na een selectie kan het erg traag reageren.
Ik vond het geen probleem om verbinding te maken met internet met een WiFi-USB-dongle (ik gebruikte 2 verschillende). Ik moest gewoon mijn WiFi-toegangssleutelwachtwoord invoeren met behulp van een vervolgkeuzelijst in de rechterbovenhoek van de GUI. Zodra ik dit deed, zou het automatisch verbinding maken na elke herstart / power-up.
Nu was ik klaar voor algemene ontwikkeling.
Om hier te komen kun je vele paden bewandelen. Tot nu toe heb ik hier niet veel details gegeven, maar er zijn veel methoden en configuraties die op internet in meer detail worden beschreven. Waaronder een voor een headless setup waarbij u een extern ssh-terminalvenster op uw pc zou gebruiken om de ontwikkelingsstappen uit te voeren die in deze instructie worden gegeven.
Stap 3: Ontwikkelomgeving en tools
Voor de systeemconfiguratie en software die ik voor het project heb ontwikkeld, deed ik de R&D op een Raspberry Pi-2; want het heeft een quad-core CPU waardoor browsen en code-ontwikkeling, met meerdere vensters, een stuk sneller gaat. U kunt natuurlijk elk model Raspberry-Pi gebruiken om dit project te realiseren.
Om Node.js in te stellen (gebeurtenisgestuurde I/O server-side JavaScript-ondersteuning) heb ik het volgende gedaan…
sudo apt-get update
sudo apt-get install nodejs npm
Deze nodeJS-pakketten toevoegen (npm is Nodejs Package Manager)
npm install express
npm installeren socket.io
Referenties:https://nodejs.org/en/
www.npmjs.com/package/express Snel, minimalistisch webframework
www.npmjs.com/package/socket.io Socket. IO maakt realtime bidirectionele, op gebeurtenissen gebaseerde communicatie mogelijk
Stap 4: De hardware
De gebruikte weerstandswaarden zijn allemaal verschillend, aangezien de spanningsval en efficiëntie verschillen voor alle drie de LED-kleursegmenten. De GPIO High-uitgangsniveaus waren allemaal ongeveer 3,2 volt. Elk LED-segment is getest om er zeker van te zijn dat het minder dan 20 mA maximaal verbruikt en ongeveer 40 mA bij elkaar (< 50 mA max totaal toegestaan), wat de PiZero gemakkelijk aankan. Ik kreeg zo veel output helderheid als ik kon, direct aansturen van de LED; dat is genoeg voor mijn behoeften. Om hogere stromen aan te sturen, voor een veel helderdere output, kunnen tussenliggende aandrijftransistors worden gebruikt met een gemeenschappelijke anode-LED met zijn anode aangesloten op de 5v-lijn. PS: omdat mijn verschillende witniveaus een beetje blauwachtig uitkomen, 27 in plaats van 24 Ohm zou voor mij een betere keuze zijn geweest.
Merk op dat ik een header met mannelijke pinnen heb gebruikt en verbonden met de LED-poten met FF-jumpers. Dit hield de totale hoogte laag. Ik soldeerde de weerstanden in het midden van de jumpers. Het gebruik van geen printplaat of soldeerloze kaart, samen met het gebruik van een haakse micro-USB naar USB-adapter voor de WiFi-dongle, maakte de eindmontage redelijk compact.
Voor een diffuser raad ik een pingpongbal aan (het is gemakkelijk om een gat te boren dat net groot genoeg is om je 5-8-10 mm LED in te steken). Of knip de bovenkant van een LED-lamp af (een die een plastic diffuser gebruikt). Markeer hiervoor een lijn, met een fijne puntslijper, waar u wilt snijden, en gebruik een Dremel-achtig gereedschap met een dun afgesneden hulpstuk. Eventueel kan een mooi klein geslepen glazen potje of drinkglas worden gebruikt. Als je eenmaal een diffuser hebt gevonden, lijm je deze op de bovenkant van de behuizing.
Voor demonstraties gebruik ik graag een kleine Li-powerbank die in de behuizing is geplaatst. Dit apparaat lijkt meer volledig draadloos. Natuurlijk zal het een beperkte bedrijfstijd hebben in die configuratie. Voor een normale werking gebruik ik gewoon een micro-USB-wandadapter.
Stap 5: Projectsoftware
Ik heb twee programma's gebruikt, een Node.js-proces dat met een onderliggend proces praat via zijn stdin-gegevensstroom. Dit is zodat ze elk kunnen doen waar ze goed in zijn en als onafhankelijke processen in hun eigen tempo kunnen werken.
Dit is wat ik deed: Maar dat hoeft niet, want ik heb een tar-gzip-bestand geleverd dat de resulterende bestandsboom bevat.
NodeJS server-side setup:
cd ~
mkdir node_rgb cd node_rgb mkdir openbaar
zet 'index.html' en 'style.css' in de map '~/node_rgb/public'put 'rgbDriver.c' en 'rgb_main.js' in de map '~/node_rgb'
Compileer/bouw het c-proces 'rgbDriver':
cd ~/node_rgb
cc -o rgbDriver rgbDriver.c -lwiringPi -lpthread
De equivalentie downloaden en uitbreiden
Om node_rgb.tgz (hieronder) te downloaden naar uw Pi-Zero in uw homedirectory (~pi) kunt u een van de volgende drie dingen doen:
- Download vanuit de browser in de GUI van uw Pi-ZeroVerplaats het bestand naar ~pi/
-
In een terminalvenster dat met u is verbonden Pi-Zero:cd ~piwget
mv FZBF9BDIL6VBHKF.tgz rgb_node.tgz
- Download vanuit een browser op uw desktopcomputer. Gebruik WinSCP om het naar de ~pi-map op de Pi-Zero te kopiëren
Na het uitvoeren van #1 2 of 3 hierboven …
cd ~
tar -xzvf node_rgb.tgz tree node_rgb … node_rgb naar public naar Dow_Jones_Index.html naar index.html naar style.css naar rgbDriver naar rgbDriver.c naar rgb_main. js ├── start_rgb ├── kill_rgb └── track_dji
Het resulterende uitvoerbare (van bovenaf) 'rgbDriver' kan onafhankelijk van het Node.js-interfaceproces worden gebruikt.
Om te controleren of dit stuurprogramma en de hardware werken, voert u sets van drie waarden (van 0-255), gescheiden door een spatie, naar het stuurprogramma. Zoals 'echo 255 0 0 |./rgbDriver' voor rood of 'echo 0 255 0 |./rgbDriver' voor groen. Merk op dat de "./" het besturingssysteem vertelt om ons programma 'rgbDriver' in de huidige map te vinden. Wanneer u een ^c (cntl-c) geeft om de bestuurder te stoppen, kan de led wel of niet blijven branden. Als alternatief kunt u de waarden interactief invoeren. Typ, vanaf de opdrachtregel, deze regels een voor een en kijk naar de LED.
./rgbDriver
0 255 0 100 0 100 255 255 0 …etc… ^c
Zorg ervoor dat er geen 2 van deze processen parallel lopen.
Gebruik deze opdracht om de volledige softwaretoepassingssuite te starten, inclusief de Node.js-server:
sudo-knooppunt rgb_main.js
Gebruik vervolgens cntl-c als u de Node.js-server wilt stoppen. Start het met
sudo-knooppunt rgb_main.js&
om het op de achtergrond te laten draaien, maar dan moet je een 'sudo kill -9 pid'-commando gebruiken om het te stoppen. Als dit commando je vreemd lijkt, bekijk dan de uitvoer van deze commando's: 'man kill' & 'man sudo'.
Gebruik een browser, op uw desktop, tablet of telefoon, die is verbonden met uw lokale netwerk. Ga naar https://raspberrypi:8080/ of als dat niet werkt, gebruik dan het ip-adres van het apparaat (verkregen uit de cmd 'ifconfig') zoiets als 192.168.1.15 plus de poortspecificatie: 8080 of als je de Pi-Zero's gebruikt GUI: localhost:8080 zal werken.
Bedien de RGB-schuifregelaars, op de pagina die verschijnt, en kijk hoe de RGB-LED-lamp meegaat.
Andere handige commando's Houd er rekening mee dat als u meer dan één 'rgbDriver' tegelijk gebruikt, u waarschijnlijk onvoorspelbaar gedrag krijgt. Als u een tweede exemplaar van rgb_main.js probeert uit te voeren, zal er een fout optreden.
Met deze opdracht worden alle gerelateerde processen weergegeven:
ps aux |grep rgb
Deze opdracht zal alle nodeJS-processen doden, samen met de onderliggende processen van 'rgbDriver':
sudo ps aux | grep-knooppunt.*rgb | awk '{print "sudo kill -9 " $2}' | NS
Stand-alone werking
Om de Pi-Zero de Node.js-server-app te laten opstarten wanneer deze opstart … met uw favoriete editor (bijv. nano ~/.bash_profile), typt u de volgende regels en slaat u op in ~/.bash_profile
cd node_rgb
sudo-knooppunt rgb_main.js &
Om te voorkomen dat u vervelende foutmeldingen krijgt bij het openen van een terminalvenster, gebruikt u voorwaardelijke codering zoals het shellscript in het 'start_rgb'-bestand
Wanneer de Pi-Zero embedded draait, zonder toetsenbord, muis of monitor; de grafische gebruikersinterface zal minimale CPU-tijd in beslag nemen, aangezien er geen gebruikersinteractie zal zijn. Ik schakel het automatisch opstarten van de GUI niet uit, omdat de Pi-Zero in dit geval meer middelen heeft dan nodig; en ik vind het leuk om een paar kabels aan te sluiten en te gebruiken, op elk moment in de toekomst. Dit is echter niet nodig omdat u een externe SSH-terminal (bijv. PuTTY) kunt gebruiken om eventueel onderhoud uit te voeren.
Het gebruiken als een gebeurtenismonitor
Ik heb een webpagina gemaakt om de dagelijkse verandering in de Dow Jones Index te volgen. De bron kan worden gebruikt als richtlijn voor uw eigen pagina die enkele webgegevens gebruikt en dienovereenkomstig uw Pi-Zero-indicator aanstuurt. Deze pagina haalt zijn (json)gegevens van een webservice van Google. Er zijn veel vormen van webservices, dus u zult degene moeten onderzoeken die u wilt gebruiken om de JavaScript-code te bepalen om toegang te krijgen.
Als u uw apparaat wilt gebruiken, net als ik, als een speciale, stand-alone, Dow Index change Indicator, voeg deze regels dan toe aan het einde van het ~/.bash_profile-bestand, of zoals gewenst SSH in en geef de tweede opdrachtregel uit. Als u vervolgens de afstandsbediening 'kill -9' wilt gebruiken, het resulterende epiphany-browserproces.
slaap 20
epiphany-browser --display=:0.0 localhost:8080/Dow_Jones_Index.html &
De indicator zal lichtgrijs oplichten bij een waarde van 0. Bij hogere waarden wordt hij steeds groener. Het is het helderst puur groen op ongeveer 250. Hogere waarden veroorzaken eerst een oppervlakkige flits, tot een diepste flits op ongeveer 500. Voor negatieve waarde (dagelijkse dalingen in de Dow) doet het hetzelfde, maar in rood.
UPDATE mei 2018
Ik heb een nieuwe webpagina gemaakt (SolarStorm_devCon.html, bijgevoegd als een.txt-bestand, omdat het.html-bestand niet wordt geüpload) die GeoMagnetic storm-informatie verzamelt (die een verwoestende CME, EMP zou kunnen voorspellen) en die gebruikt om een kleur weer te geven schaal die een soort Geo-Storm 'DevCon' Index weerspiegelt. geeft het potentieel aan van een ramp als gevolg van een elektromagnetische puls (EMP) als gevolg van ruimteweer, vermoedelijk zonnevlammen of een coronale massa-ejectie (CME). Gebruik het zoals u "Dow_Jones_Index.html" zou hebben gebruikt.
Stap 6: Beheer van webpagina's op afstand
Op dit punt kunt u uw IOT-kleurenlamp overal op uw lokale netwerk bedienen. Hoe u deze zichtbaar maakt op het openbare internet maakt geen deel uit van deze instructie. Als u een openbaar IP-adres voor uw apparaat instelt, moet u dit doen gebruik dat IP-adres in het open socket-commando in het JavaScript van uw pagina's (bijv. ~/node_rgb/public/index.html)
Ik ben van plan mijn Pi-Zero IOT-apparaat te gebruiken als een realtime kleurindicator voor de verandering van de dag in de Dow Jones Index. Ik heb een pagina gemaakt die dat doet, die json-gegevens van google.com/finance haalt. Ik heb verder een paar webpagina's gemaakt om het brede scala aan toepassingen voor dit kleine IOT-apparaat te demonstreren. In plaats van mijn PiZero op het openbare internet te zetten, heb ik hostte de pagina's op mijn bestaande openbare webserver (momenteel @ 71.84.135.81 alias: https://raspi.ddns01.com/ wanneer mijn gratis Dynamic Domain Name Server actief is), die draait op een originele versie B Raspberry-Pi.
In de code op mijn externe pagina's opende ik socketverbindingen naar 192.168.1.41:8080. Ik had mijn Pi-Zero's ip vastgezet op 192.168.1.41. Om op dezelfde manier te doen, volgt u de aanwijzingen bij het instellen van-raspberry-pi-met-wifi-en-een-statisch-ip onder de kop: Statisch IP-adres. Dus als u uw PiZero instelt op 192.168.1.41 op uw lokale netwerk, deze pagina's, geopend vanaf mijn website, zullen communiceren met uw apparaat, aangezien de verbinding vanaf de client wordt gedaan.
Dit zijn de pagina's die ik heb gebruikt om mijn Pi-Zero IOT-verlichtingsapparaat te testen en te bedienen. Als u deze pagina's oproept (https://71.84.135.81/iot/rgbLamp/ aka https://raspi.ddns01.com/iot/rgbLamp/ of een van de pagina's die op die pagina zijn ingelijst), zal de client-side JavaScript stuur je gemaakte IOT-licht aan (aangezien het draait op deze url "192.168.1.41:8080") Als je wilt, kun je de bron van een van die pagina's kopiëren en naar wens aanpassen.
Met de eerste pagina kunt u uw apparaat op elke kleur instellen. De LED-lamp en de kleur die u op de webpagina ziet, volgen redelijk goed. De gebruikte weerstandswaarden kunnen worden aangepast (evenals de monitor) om ze meer op elkaar af te stemmen. Ik besteedde weinig tot geen tijd om ervoor te zorgen dat ze overeenkwamen. Deze pagina zal de kleur bijwerken wanneer iemand anders de kleur verandert en de server het bijgewerkte infobericht verzendt.
Eén pagina is een eenvoudig, met een knop bediend verkeerslicht.
Er is een pagina die is ontworpen om een sportwedstrijd bij te houden (bijv. voetbal, basketbal, honkbal), een verkiezing, of zelfs aangepast voor een fondsenwerver of DEFCON-waarschuwingsniveau-stijlindicator. De scores (of vastgelegde verkiezingsstemmen) kunnen automatisch worden verkregen van een webservice of van een andere webpagina worden geschraapt. Ik heb geen automatische feed die mijn Contest_demo-pagina aanstuurt. Iemand met de juiste knowhow zou een krachtige driver kunnen toevoegen om krachtige LED-schijnwerpers te laten werken en een kamer (of sportbar) te baden met de kleur van een team als ze voorop lopen. Helaas ben ik te laat met deze instructable voor de superbowl-feesten van dit jaar, maar op tijd voor de verkiezingen van 2016.
Dan is er de pagina die lijkt op de pagina die ik zal gebruiken om van mijn apparaat een Dow Jones-tracking-indicator te maken. De schuifregelaar en knoppen staan alleen op de DJI-demopagina voor demonstratiedoeleinden. In de broncode voor deze pagina staat code die ik heb ontwikkeld om een op groen scherm geïnspireerd beeld opnieuw in te kleuren; met genoeg commentaar dat u het misschien ook nuttig vindt.
Alleen de eerste van deze 4 pagina's (samen met de op Pi-Zero gebaseerde index.html-pagina) luistert naar serverupdateberichten en ververst dienovereenkomstig. De rest stuurt alleen naar de server.
Aanbevolen:
Een kluis bouwen met een Rpi: 12 stappen
Bouw een kluis met behulp van een Rpi: Wilt u leren hoe u uw Raspberry pi kunt omzetten in een volledig functionerende kluis? Volg dan deze 12 stap instructable om te leren hoe. De kluis heeft een volledig functionerend toetsenbord en een sluitsysteem, zodat je je spullen veilig kunt opbergen
Een RPi-brandalarm maken: 4 stappen
Hoe maak je een RPi-brandalarm: Hallo!! In deze instructable leer ik je hoe je een brandalarm maakt met een Raspberry Pi. Dit brandalarm detecteert en waarschuwt u als er brand is met waarschuwingsberichten en belt de politie met een druk op de knop
SanityForce (alarmsysteem- Rpi): 7 stappen
SanityForce (Alarmsysteem- Rpi): Er zijn nu veel manieren om je spullen veilig te houden, of je broers en zussen gewoon uit je kamer te houden, zoals een slot erop zetten of het buiten het bereik van andere mensen houden. Wat als ik je zou vertellen dat je al die basisdingen niet hoeft te doen, maar je kunt veranderen
RPI-beveiligingssysteem: 4 stappen
RPI-beveiligingssysteem: functie van RPI-beveiligingsalarmIn deze instructable leert u hoe u een volledig functionerend nachtalarmsysteem kunt maken. Als het systeem een indringer detecteert, zal het onmiddellijk "INTRUDER" afdrukken. op uw monitor en maakt een luide
LED kunst auto tank. FadeCandy + RPi: 3 stappen
LED kunst auto tank. FadeCandy + RPi: in deze instructable zal ik demonstreren hoe je LED's in kaart kunt brengen in niet-uniforme vormen met behulp van 3 Fade-snoepborden, Raspberry Pi3 en de eerste poging tot python. Mijn vrienden hebben me de opdracht gegeven om hun kunstauto te upgraden die de vorm heeft van een tank, dus ik neem dat idee en