INHOUDSOPGAWE:

RPi-Zero IoT-gebeurtenisaanwyser / kleurlamp: 6 stappe (met foto's)
RPi-Zero IoT-gebeurtenisaanwyser / kleurlamp: 6 stappe (met foto's)

Video: RPi-Zero IoT-gebeurtenisaanwyser / kleurlamp: 6 stappe (met foto's)

Video: RPi-Zero IoT-gebeurtenisaanwyser / kleurlamp: 6 stappe (met foto's)
Video: What's new in Home Assistant June 2023.6? Network Storage, Integrations UI and more! 2024, November
Anonim
RPi-Zero IoT-gebeurtenisaanwyser / kleurlamp
RPi-Zero IoT-gebeurtenisaanwyser / kleurlamp
RPi-Zero IoT-gebeurtenisaanwyser / kleurlamp
RPi-Zero IoT-gebeurtenisaanwyser / kleurlamp
RPi-Zero IoT-gebeurtenisaanwyser / kleurlamp
RPi-Zero IoT-gebeurtenisaanwyser / kleurlamp

Geen ekstra mikrobeheerder, en geen HAT-byvoegingsmodule nodig nie. Die RPi-Zero doen alles. Beter nog, gebruik 'n RPi-Zero W!

Voorbeeldgebruik: aanwyser vir webdiensstatus (bv. DowJonesIndex -opsporing), statusaanwyser vir politieke of sportgebeurtenisse, bui -lig, spoor 'n sensor op, noem maar op. Kyk na die video in stap 6.

Die Raspberry-Pi het slegs een hardeware-ondersteunde PWM-lyn. Hierdie projek benodig 3 PWM-lyne, so ek het 'n sagteware-aangedrewe PWM 'c' biblioteek gebruik (https://wiringpi.com/reference/software-pwm-library/), wat reeds geïnstalleer moet word.

Ek het die verwerking in 2 prosesse verdeel. Een, onderbrekingsgedrewe, skakel die bedieningslyne na behoefte na die LED, en kry sy marsopdragte uit sy 'stdin' stroom. Die ander is 'n gebeurtenisgedrewe nodeJS -bediener wat socket IO gebruik. Dit is om te verhoed dat dinge soos lig flikker terwyl dit reageer. Die kombinasie gebruik gewoonlik minder as 5% van die SVE. Tydens deurlopende kleuropdaterings (via skuifbalkies en/of baie kliënte) kan dit maklik meer as 50% gebruik (veral as u ook die blaaier in die Pi-Zero GUI gebruik). Let daarop dat wanneer 'n verandering plaasvind, opdateringskennisgewings uitgaan na al die open socket -kliënte.

Stap 1: wat u benodig

Wat jy nodig het
Wat jy nodig het
Wat jy nodig het
Wat jy nodig het
  • Pi-Zero mikro-SD-kaart, 8 GB aanbeveel. Met Raspbian-Linux of NOOBS
  • RGB Led (ek het hierdie een gebruik:
  • 3 weerstande (waarde gebaseer op gewenste stroom en/of gewenste helderheid, 1/8 watt)
  • 'n WiFi, USB-dongle (bv. https://www.ebay.com/itm/252018085448) of selfs beter, gebruik 'n Raspberry Pi Z-W (met ingeboude WiFi)
  • 'n kas (byvoorbeeld klein: https://www.ebay.com/itm/131583579374 met meer ruimte:
  • 'n verspreider (sien voorbeelde in die prent)
  • Kabels en adapters soos benodig.

Opsioneel, afhangende van hoe u die komponente wil verbind

  • kop (https://www.ebay.com/itm/14186077616)
  • springers (https://www.ebay.com/itm/262235387520)
  • reghoekige mikro-USB-adapter (blou USB 2.0 OTG R)
  • mini USB -hub, slegs gebruik tydens die opstelfase

Stap 2: Pi-Zero-opstelling en voorbereiding vir ontwikkeling

Volg hierdie aanvanklike opstelling van u PiZero om dit gereed te maak vir ontwikkeling …

As u eers 'n microSD -kaart met NOOBS -opstelling het:

Steek die microSD -kaart in. 'N Lae -krag -USB -hub met 'n wifi -dongle, sleutelbord en muis (u kan 'n draadlose muis en/of sleutelbord gebruik, maar dit is moontlik, maar waarskynlik nie, eksterne krag aan die hub nodig nie). Ek het adapters en 'n hub gebruik wat ek reeds gehad het.

Koppel nou 'n monitor en 'n microUSB -kragadapter aan, en dit sal begin. Gaan voort en voltooi die aanwysings vir die opstel van Raspbian, Debian Linux, soos gesien in die skakel noobs-setup hierbo.

Boonop het ek 'n te lae resolusie. Ek het hierdie reëls dus by /boot/config.txt gevoeg

disable_overscan = 1

hdmi_group = 2 hdmi_mode = 58

Die hdmi_mode = 58 werk vir my monitor, u het moontlik iets anders nodig.

verwys: maak-framboos-pi-gebruik-volle-resolusie-monitor en

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

Na die opstart gaan die Pi-Zero na die GUI-koppelvlak.

Om die volle grootte van my microSD-kaart te gebruik, het ek die raspi-config #1 'Expand Filesystem'-seleksie gebruik. Voer vanaf die opdraglyn in 'n terminale venster' sudo raspi-config 'in. Verwys na: documentation/configuration/raspi -konfig.md

Ek het hierdie instellings ook verander onder #5 'Internasionaliseringsopsies'

  • Land: en_US. UTF-8 UTF-8
  • Tydsone: Amerika … Los_Angeles
  • Sleutelborduitleg: Generiese 105-sleutel (Intl) rekenaar … Engels (VS)

Vir my was die sleutelbordstandaard van Groot-Brittanje (waarvoor Raspbian vooraf ingestel is) baie van my wysigings 'n ware taak.

Verander hierdie instellings na gelang van u behoeftes. Let daarop dat u die pyltjie-sleutels en die tab-sleutel moet gebruik om in 'raspi-config' te kan navigeer; en na 'n keuse kan dit baie stadig reageer.

Ek het geen probleem gevind om aan te sluit op die internet met 'n WiFi-USB-dongle nie (ek het 2 verskillende gebruik). Ek moes eenvoudig my wagwoord vir WiFi-toegangsleutel invoer deur 'n aftreklys regs bo in die GUI in te voer. Sodra ek dit gedoen het, sou dit outomaties aansluit na enige herlaai/aanskakel.

Nou was ek gereed vir algemene ontwikkeling.

Om op hierdie punt te kom, kan u baie paaie loop. Tot op hierdie stadium het ek nie hier groot besonderhede gegee nie, maar daar is baie metodes en konfigurasies wat in meer detail op die internet beskryf word. Insluitend een vir 'n koplose opstelling, waar u 'n afgeleë ssh -eindvenster op u persoonlike rekenaar sou gebruik om die ontwikkelingsstappe in hierdie instruksie te volg.

Stap 3: Ontwikkelingsomgewing en gereedskap

Ontwikkelingsomgewing en gereedskap
Ontwikkelingsomgewing en gereedskap
Ontwikkelingsomgewing en gereedskap
Ontwikkelingsomgewing en gereedskap

Vir die opstelling van die stelselkonfigurasie en sagteware wat ek vir die projek ontwikkel het, het ek die R&D gedoen op 'n Raspberry Pi-2; want dit het 'n vierkern-SVE wat sy blaai en kode-ontwikkeling, met verskeie vensters, baie vinniger maak. U kan natuurlik enige model Raspberry-Pi gebruik om hierdie projek te realiseer.

Om Node.js op te stel (gebeurtenisgedrewe I/O-bediener se kantlyn-ondersteuning), het ek die volgende gedoen …

sudo apt-get update

sudo apt-get install nodejs npm

Voeg hierdie nodeJS -pakkette by (npm is Nodejs Package Manager)

npm installeer express

npm installeer socket.io

Verwysings:

www.npmjs.com/package/express Vinnige, minimalistiese webraamwerk

www.npmjs.com/package/socket.io Socket. IO maak real-time bidirektionale gebeurtenisgebaseerde kommunikasie moontlik

Stap 4: Die hardeware

Die hardeware
Die hardeware
Die hardeware
Die hardeware
Die hardeware
Die hardeware
Die hardeware
Die hardeware

Die weerstandswaardes wat gebruik word, is almal anders, aangesien die spanningsval en doeltreffendheid vir al drie LED -kleursegmente verskil. Die GPIO Hoë uitsetvlakke was almal ongeveer 3,2 volt. Elke LED -segment is getoets om te verseker dat dit minder as 20ma maksimum verbruik en ongeveer 40ma saam (<50ma maksimum toegelate totaal), wat die PiZero maklik kan hanteer. Ek het soveel moontlik helderheid van die uitvoer gekry, en ek het die LED direk bestuur; wat genoeg is vir my behoeftes. Om hoër strome aan te dryf, vir 'n baie helderder uitset, kan tussen -transistor -transistors gebruik word met 'n gemeenskaplike anode -LED met sy anode wat aan die 5v -lyn gekoppel is. PS: Aangesien my verskillende wit vlakke effens blouerig uitkom, 27 in plaas van 24 Ohm sou vir my 'n beter keuse gewees het.

Let op dat ek 'n kopstuk met manlike penne gebruik het, en met die F-F springers aan die LED-bene gekoppel was. Dit het die totale hoogte gehou. Ek het die weerstande in die middel van die springers gesoldeer. Deur die gebruik van geen printplaat of soldeerlose bord, tesame met die gebruik van 'n reghoekige mikro-USB na USB-adapter vir die WiFi-dongle, het die finale vergadering redelik kompak geword.

Vir 'n diffuser beveel ek 'n tafeltennisbal aan (dit is maklik om 'n gat te boor wat net groot genoeg is om u 5-8-10 mm LED in te steek). Of sny die bokant van 'n LED -gloeilamp af (een wat 'n plastiekverspreider gebruik). Merk hiervoor 'n lyn met 'n fyn punt skerp, waar u wil sny, en gebruik 'n Dremel-agtige werktuig met 'n dun afsnyhegstuk. As u wil, kan u 'n klein glasbottel of 'n drinkglas gebruik. As u op een diffuser gevestig is, plak u dit aan die bokant van die omhulsel vas.

Vir demonstrasies gebruik ek graag 'n klein Li-bank wat in die kas geplaas is. Hierdie eenheid lyk indrukwekkender en heeltemal draadloos. Dit sal natuurlik 'n beperkte werktyd in die konfigurasie hê. Vir normale werking gebruik ek eenvoudig 'n mikro-USB-muuradapter.

Stap 5: Projekprogrammatuur

Projek sagteware
Projek sagteware

Ek het twee programme gebruik, 'n Node.js -proses wat met 'n kinderproses gesels het via sy stdin -datastroom, sodat hulle elkeen kan doen wat hulle die beste doen en as onafhanklike prosesse in hul eie tempo kan funksioneer.

Hier is wat ek gedoen het: maar u hoef dit nie te doen nie, want ek het 'n tar-gzip-lêer verskaf wat die gevolglike lêerboom bevat.

NodeJS-opstelling aan die bedienerkant:

cd ~

mkdir node_rgb cd node_rgb mkdir public

plaas 'index.html' en 'style.css' in die '~/node_rgb/public' directoryput 'rgbDriver.c' en 'rgb_main.js' in die '~/node_rgb' gids

Stel die c -proses 'rgbDriver' saam/op:

cd ~/node_rgb

cc -o rgbDriver rgbDriver.c -lwiringPi -lpthread

Laai die ekwivalensie af en brei dit uit

Om node_rgb.tgz (hieronder) na u Pi-Zero in u tuisgids (~ pi) af te laai, kan u een van die drie volgende doen:

  1. Laai van die blaaier af in u Pi-Zero se GUI Skuif die lêer na ~ pi/
  2. In 'n terminale venster wat aan u gekoppel is Pi-Zero: cd ~ piwget

    mv FZBF9BDIL6VBHKF.tgz rgb_node.tgz

  3. Laai dit af vanaf 'n blaaier op u tafelrekenaar. Gebruik WinSCP om dit na die ~ pi-gids op die Pi-Zero te kopieer

Nadat u #1 2 of 3 hierbo uitgevoer het …

cd ~

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

Die gevolglike uitvoerbare 'rgbDriver' (van bo) kan onafhanklik van die Node.js -koppelvlakproses gebruik word.

Om te verifieer dat hierdie bestuurder en die hardeware werk, voer stelle van drie waardes (van 0-255), geskei deur 'n spasie, aan die bestuurder. Soos 'eggo 255 0 0 |./rgbDriver 'vir rooi of' eggo 0 255 0 |./rgbDriver 'vir groen. Let daarop dat die “./” die bedryfstelsel vertel om ons program 'rgbDriver' in die huidige gids te vind. As u 'n ^c (cntl-c) uitreik om die bestuurder te stop, kan die LED al dan nie aan bly nie. Alternatiewelik kan u die waardes daarvan interaktief voed. Probeer hierdie reëls een na die ander op die opdragreël tik en kyk na die LED.

./rgbDriver

0 255 0 100 0 100 255 255 0… ens… ^c

Maak seker dat u nie twee van hierdie prosesse parallel loop nie.

Gebruik hierdie opdrag om die volledige sagtewaretoepassingsuite, insluitend die Node.js -bediener, te begin:

sudo node rgb_main.js

Gebruik dan cntl-c as u die Node.js-bediener wil stop. Begin daarmee

sudo node rgb_main.js &

om dit op die agtergrond te laat loop, maar dan moet u 'n 'sudo kill -9 pid' opdrag gebruik om dit te stop. As hierdie opdrag vir u vreemd lyk, kyk dan na die uitvoer van hierdie opdragte: 'man kill' en 'man sudo'.

Gebruik 'n blaaier op u lessenaar, tablet of telefoon wat aan u plaaslike netwerk gekoppel is. Gaan na https:// raspberrypi: 8080/of as dit nie werk nie, gebruik die ip-adres van die toestel (verkry uit die cmd 'ifconfig'), soos 192.168.1.15 plus die poortspesifikasie: 8080 of as u die Pi-Zero's gebruik GUI: localhost: 8080 sal werk.

Gebruik die RGB-skuifbalkies op die bladsy wat verskyn, en kyk hoe die RGB-LED-lamp volg.

Ander nuttige opdragte Let daarop dat as u meer as een 'rgbDriver' op 'n slag laat loop, u waarskynlik onvoorspelbare gedrag sal kry. As u probeer om 'n tweede kopie van rgb_main.js uit te voer, sal dit fouteer.

Hierdie opdrag bevat 'n lys van alle verwante prosesse:

ps aux | grep rgb

Hierdie opdrag sal alle nodeJS -prosesse doodmaak, tesame met 'rgbDriver' kinderprosesse:

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

Onafhanklike operasie

Om die Pi-Zero te laat begin met die Node.js-bediener-app wanneer dit opstart … met u gunsteling redakteur (bv. Nano ~/.bash_profile), tik die volgende reëls in en stoor dit in ~/.bash_profile

cd node_rgb

sudo node rgb_main.js &

Gebruik voorwaardelike kodering, soos die skulpskrif in die 'start_rgb' -lêer, om geen foutboodskappe te kry wanneer u 'n terminale venster oopmaak nie

As die Pi-Zero ingebed werk, sonder 'n sleutelbord, muis of monitor; die grafiese gebruikerskoppelvlak sal minimale SVE -tyd neem, aangesien daar geen gebruikersinteraksie sal wees nie. Ek skakel die outomatiese opstart van die GUI nie uit nie, aangesien die Pi-Zero in hierdie geval meer hulpbronne het as wat nodig is; en ek hou daarvan om enige tyd in die toekoms 'n paar kabels aan te sluit en te gebruik. Dit is egter nie nodig nie, aangesien u 'n afgeleë SSH -terminaal (byvoorbeeld PuTTY) kan gebruik om die nodige onderhoud te doen.

Gebruik dit as 'n gebeurtenismonitor

Ek het 'n webblad geskep om die daaglikse verandering in die Dow Jones -indeks te monitor. Die bron kan gebruik word as 'n riglyn vir u eie bladsy, wat 'n paar webdata gebruik en u Pi-Zero-aanwyser dienooreenkomstig dryf. Hierdie bladsy kry sy (json) data van 'n Google -webdiens. Daar is baie vorme van webdienste, dus moet u die een ondersoek wat u wil gebruik om die JavaScript -kode te bepaal om toegang daartoe te verkry.

As u u toestel wil gebruik, net soos ek, as 'n toegewyde, losstaande Dow-indeksveranderingsindikator, voeg hierdie reëls by aan die einde van die ~/.bash_profile-lêer, of na wenslike SSH en gee die tweede opdragreël uit. As u daarna die afstandsbediening 'kill -9' wil gebruik, sal die gevolglike epifanie -blaaierproses ontstaan.

slaap 20

epifanie-blaaier-display =: 0.0 localhost: 8080/Dow_Jones_Index.html &

Die aanwyser verlig 'n liggrys gegewe die waarde van 0. Dit word meer en meer groen met hoër waardes. Dit is die helderste suiwer Groen op ongeveer 250. Hoër dog waardes veroorsaak aanvanklik 'n vlak flits, tot 'n diepste flits op ongeveer 500. Vir negatiewe waarde (daaglikse dalings in die Dow) is dit soortgelyk, maar in rooi.

OPDATERING Mei 2018

Ek het 'n nuwe webblad geskep (SolarStorm_devCon.html, aangeheg as 'n.txt -lêer, omdat.html -lêer nie opgelaai word nie) wat inligting oor GeoMagnetic storm versamel (wat 'n verwoestende CME, EMP kan voorspel) en dit gebruik om 'n kleur voor te stel skaal wat 'n soort Geo-Storm 'DevCon'-indeks weerspieël. wat die potensiaal van 'n ramp aandui as gevolg van 'n elektromagnetiese pols (EMP) as gevolg van ruimteweer, vermoedelik sonbrand of 'n koronale massa -uitwerping (CME). Gebruik dit asof u 'Dow_Jones_Index.html' sou gebruik het.

Stap 6: Afstandbeheer van webbladsye

Image
Image

Op hierdie punt kan u u IOT -kleurlamp vanaf enige plek op u plaaslike netwerk beheer. gebruik die IP in die open socket -opdrag in die JavaScript van u bladsye (bv. ~/node_rgb/public/index.html)

Ek is van plan om my Pi-Zero IOT-toestel te gebruik as 'n intydse kleuraanwyser vir die verandering van die dag in die Dow Jones-indeks. Ek het 'n bladsy geskep wat dit doen, wat json -data van google.com/finance kry. Ek het ook 'n paar webblaaie geskep om die wye verskeidenheid gebruike vir hierdie klein IOT -toestel aan te toon. In plaas van my PiZero op die openbare internet te plaas, het die bladsye gehuisves op my bestaande openbare bediener (tans @ 71.84.135.81 aka: https://raspi.ddns01.com/ wanneer my gratis Dynamic Domain Name Server werk), wat op 'n oorspronklike weergawe B Raspberry-Pi werk.

In die kode op my afgeleë bladsye het ek socketverbindings oopgemaak na 192.168.1.41:8080 Ek het die IP van my Pi-Zero op 192.168.1.41 herstel. Volg die instruksies by die opstel van raspberry-pi-with-wifi-en-a-static-ip onder die opskrif: Statiese IP-adres. Hierdie bladsye, wat vanaf my webwerf oopgemaak is, sal met u toestel kommunikeer, aangesien die verbinding vanaf die kliënt se kant is.

Hier is die bladsye wat ek gebruik het om my Pi-Zero IOT-beligtingstoestel te toets en te gebruik. As u hierdie bladsye (https://71.84.135.81/iot/rgbLamp/ aka https://raspi.ddns01.com/iot/rgbLamp/ of een van die bladsye wat op daardie bladsy omraam word) oplaai, sal die JavaScript aan die kant van die kliënt ry u geskepte IOT -lig (aangesien dit op hierdie URL "192.168.1.41:8080" werk) As u wil, kan u die bron van enige van die bladsye kopieer en na u smaak aanpas.

Met die eerste bladsy kan u u toestel in enige kleur stel. Die LED -lamp en die kleur wat u op die webwerf sien, sal redelik goed volg. Die weerstandswaardes wat gebruik word, kan aangepas word (sowel as die monitor) om dit meer ooreenstem. Ek het min of geen tyd daaraan bestee om te verseker dat dit ooreenstem. Hierdie bladsy sal sy kleur opdateer wanneer iemand anders die kleur verander en die bediener die opgedateerde inligtingsboodskap stuur.

Een bladsy is 'n eenvoudige knoppie -beheerde verkeerslig.

Daar is 'n bladsy wat ontwerp is om 'n sportwedstryd op te spoor (bv. Voetbal, basketbal, bofbal), 'n verkiesing, of selfs aangepas vir 'n fondsinsameling of 'n DEFCON -waarskuwingstyl -aanwyser. Die tellings (of toegewyde kiesstemme) kan outomaties van 'n webdiens verkry word of van 'n ander webblad verwyder word. Ek het nie 'n outomatiese voer wat my Contest_demo -bladsy bestuur nie. Iemand met die regte kennis kan 'n motorbestuurder byvoeg om LED-vloedligte met hoë krag te laat loop en 'n kamer (of sportbalk) met 'n span se kleur te bad as hulle voorlê. Ongelukkig is ek te laat met hierdie instruksies vir vanjaar se superboulpartytjies, maar betyds vir die 2016-verkiesing.

Dan is daar die bladsy soortgelyk aan die een wat ek sal gebruik om van my toestel 'n Dow Jones -opsporingsaanwyser te maak. Die skuifbalk en knoppies is slegs op die DJI -demo -bladsy vir demonstrasiedoeleindes. In die bron vir hierdie bladsy is daar kode wat ek ontwikkel het om 'n groen-geïnspireerde beeld te herkleur; met genoeg kommentaar dat u dit ook nuttig kan vind.

Slegs die eerste van hierdie 4 bladsye (tesame met die op Pi-Zero gebaseerde index.html-bladsy) luister na bedieneropdateringsboodskappe en word dienooreenkomstig verfris. Die res word slegs na die bediener gestuur.

Aanbeveel: