Taula de continguts:

Indicador d'esdeveniments IoT RPi-Zero / llum de color: 6 passos (amb imatges)
Indicador d'esdeveniments IoT RPi-Zero / llum de color: 6 passos (amb imatges)

Vídeo: Indicador d'esdeveniments IoT RPi-Zero / llum de color: 6 passos (amb imatges)

Vídeo: Indicador d'esdeveniments IoT RPi-Zero / llum de color: 6 passos (amb imatges)
Vídeo: 8 инструментов в Excel, которыми каждый должен уметь пользоваться 2024, Juliol
Anonim
Indicador d'esdeveniments / làmpada de color RPi-Zero IoT
Indicador d'esdeveniments / làmpada de color RPi-Zero IoT
Indicador d'esdeveniments / làmpada de color RPi-Zero IoT
Indicador d'esdeveniments / làmpada de color RPi-Zero IoT
Indicador d'esdeveniments / làmpada de color RPi-Zero IoT
Indicador d'esdeveniments / làmpada de color RPi-Zero IoT

No es necessita cap microcontrolador addicional ni es necessita cap mòdul de complement HAT. El RPi-Zero ho fa tot. Millor encara que utilitzeu un RPi-Zero W!

Ús de la mostra: indicador d'estat del servei web (p. Ex., Seguiment de DowJonesIndex), indicador d'estat d'esdeveniments polítics o esportius, llum d'ànim, seguiment d'un sensor, el nom. Vegeu el vídeo al pas 6.

El Raspberry-Pi només té una línia PWM compatible amb el maquinari. Aquest projecte necessita 3 línies PWM, de manera que he utilitzat una biblioteca PWM 'c' impulsada pel programari (https://wiringpi.com/reference/software-pwm-library/), que ja hauria d'estar instal·lada.

Vaig dividir el processament en 2 processos. Un, impulsat per interrupcions, canviant les línies de control al LED segons calgui, obtenint les seves ordres de marxa des del flux "stdin". L’altre és un servidor nodeJS basat en esdeveniments que utilitza socket IO. Es tracta d’evitar que les coses com el parpelleig de la llum alhora que garanteixen la capacitat de resposta. La combinació sol utilitzar menys del 5% de la CPU. Durant les actualitzacions de color contínues (mitjançant control lliscant i / o molts clients), es pot utilitzar fàcilment més del 50% (especialment quan també s'utilitza el navegador a la interfície gràfica d'usuari Pi-Zero). Tingueu en compte que quan entra un canvi, les notificacions d'actualitzacions es publiquen a tots els clients de socket oberts.

Pas 1: què necessiteu

El que necessiteu
El que necessiteu
El que necessiteu
El que necessiteu
  • Es recomana targeta micro-SD Pi-Zero, 8 GB. Amb Raspbian-Linux o NOOBS
  • Led RGB (he utilitzat aquest:
  • 3 resistències (valor basat en el corrent desitjat i / o la brillantor desitjada, 1/8 watt)
  • un WiFi, un dongle USB (per exemple, https://www.ebay.com/itm/252018085448) o fins i tot millor utilitzar un Raspberry Pi Z-W (amb WiFi integrat)
  • un cas (per exemple, petit: https://www.ebay.com/itm/131583579374 amb més espai:
  • un difusor (veure exemples a la imatge)
  • Cables i adaptadors segons les necessitats.

Opcionalment, segons com vulgueu connectar els components

  • capçalera (https://www.ebay.com/itm/14186077616)
  • ponts (https://www.ebay.com/itm/262235387520)
  • adaptador micro-USB d’angle dret (Blue USB 2.0 OTG R)
  • concentrador mini USB, només s'utilitza durant la fase de configuració

Pas 2: configuració de Pi-Zero i preparació per al desenvolupament

Seguiu aquesta configuració inicial per al vostre PiZero per preparar-lo per al desenvolupament …

Un cop tingueu una targeta microSD amb la configuració NOOBS, feu el següent:

Connecteu la targeta microSD. S'ha connectat un concentrador USB de baix consum amb un dongle, teclat i ratolí Wifi (podeu utilitzar un ratolí i / o un teclat sense fils, de qualsevol manera, però és probable que requereixi d'alimentació externa al concentrador). Vaig utilitzar adaptadors i un concentrador que ja tenia.

Ara connecteu un monitor i un adaptador d’alimentació microUSB i s’iniciarà. Continueu i completeu les instruccions per configurar Raspbian, Debian Linux, tal com es veu a l'enllaç noobs-setup de més amunt.

A més, tenia una resolució massa baixa. Així que he afegit aquestes línies a /boot/config.txt

disable_overscan = 1

hdmi_group = 2 hdmi_mode = 58

El hdmi_mode = 58 funciona per al meu monitor, és possible que el vostre necessiti una altra cosa.

consulteu: make-raspberry-pi-use-full-resolution-monitor i

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

Després de l'arrencada, el Pi-Zero entra a la interfície GUI.

Per fer ús de la mida completa de la meva targeta microSD he utilitzat la selecció "Expand Filesystem" de raspi-config # 1. Des de la línia d'ordres, en una finestra de terminal, introduïu "sudo raspi-config" Consulteu: documentation / configuration / raspi -config.md

També he canviat aquesta configuració al número 5 "Opcions d'internacionalització".

  • Configuració regional: ca_US. UTF-8 UTF-8
  • Fus horari: Amèrica … Los_Angeles
  • Disseny del teclat: PC genèric de 105 tecles (Intl) … Anglès (EUA)

Per a mi, l'estàndard del teclat de Gran Bretanya (que Raspbian preestableix) estava convertint una gran tasca en moltes de les meves edicions.

Canvieu aquesta configuració segons sigui necessari, adequadament per a vosaltres. Tingueu en compte que heu d'utilitzar les tecles de fletxa i la tecla de tabulació per navegar a 'raspi-config'; i després d'una selecció pot ser molt lent de respondre.

No em va semblar cap problema connectar-me a Internet amb un dongle WiFi-USB (n’he utilitzat 2 de diferents). Simplement havia d’introduir la contrasenya de la clau d’accés WiFi mitjançant un desplegable situat a la part superior dreta de la interfície gràfica d’usuari. Un cop fet això, es connectaria automàticament després de qualsevol reinici / engegada.

Ara estava preparat per al desenvolupament general.

Per arribar a aquest punt podeu agafar molts camins. Fins ara, no he donat grans detalls aquí, però hi ha molts mètodes i configuracions descrits amb més detall al web. Incloent-ne una per a una configuració sense cap, en què utilitzeu una finestra de terminal ssh remota a l'ordinador personal per fer els passos de desenvolupament que es donaran en aquesta instrucció.

Pas 3: entorn i eines de desenvolupament

Entorn i eines de desenvolupament
Entorn i eines de desenvolupament
Entorn i eines de desenvolupament
Entorn i eines de desenvolupament

Per a la configuració del sistema i el programari que vaig desenvolupar per al projecte, vaig fer R + D en un Raspberry Pi-2; ja que té una CPU de quatre nuclis que fa que la navegació i el desenvolupament de codi, amb diverses finestres, siguin molt més ràpids. Per descomptat, podeu utilitzar qualsevol model de Raspberry-Pi per realitzar aquest projecte.

Per configurar Node.js (compatibilitat amb JavaScript al costat del servidor d'E / S basat en esdeveniments) he fet el següent …

sudo apt-get update

sudo apt-get install nodejs npm

Afegir aquests paquets nodeJS (npm és el gestor de paquets Nodejs)

npm install express

npm instal·la socket.io

Referències:

www.npmjs.com/package/express Marc web ràpid i minimalista

www.npmjs.com/package/socket.io Socket. IO permet la comunicació basada en esdeveniments bidireccionals en temps real

Pas 4: el maquinari

El maquinari
El maquinari
El maquinari
El maquinari
El maquinari
El maquinari
El maquinari
El maquinari

Els valors de resistència utilitzats són diferents, ja que la caiguda de tensió i l’eficiència difereixen en els tres segments de colors LED. Els nivells de sortida GPIO elevats eren aproximadament de 3,2 volts. Cada segment de LED es va provar per assegurar-se que consumeix menys de 20ma màxim i uns 40ma tots junts (<50ma màxim màxim permès), que el PiZero pot gestionar fàcilment. Vaig obtenir la màxima brillantor de sortida possible, conduint directament el LED; que és suficient per a les meves necessitats. Per conduir corrents més elevats, per obtenir una sortida molt més brillant, es podrien utilitzar transistors de transmissió intermedis amb un ànode LED comú amb el seu ànode connectat a la línia de 5 V. PS: Com que els meus diversos nivells de blanc surten una mica blavosos, 27 en lloc de 24 Ohm hauria estat una millor opció per a mi.

Fixeu-vos que he utilitzat una capçalera amb pins masculins i que he connectat a les potes LED amb ponts F-F. Això va mantenir l’alçada total baixada. Vaig soldar els resistents al mig dels ponts. El fet de no utilitzar cap placa de circuit ni cap placa de soldadura, juntament amb l’ús d’un adaptador d’angle recte micro USB a USB per al dongle WiFi, va fer que el conjunt final fos força compacte.

Per a un difusor, recomano una bola de ping-pong (és fàcil perforar un forat prou gran per inserir-hi el LED de 5-8-10 mm). O talleu la part superior d’una bombeta LED (que utilitza un difusor de plàstic). Per a això, marqueu una línia, amb un punxegut punt fi, on vulgueu tallar, i utilitzeu una eina semblant a Dremel amb un fi de tall. Si voleu, es pot utilitzar un pot de vidre tallat petit o un got potable. Quan hàgiu establert un difusor, enganxeu-lo a la part superior de la caixa.

Per a demostracions, m'agrada fer servir un petit banc de potència Li situat dins de la caixa. Aquesta unitat sembla més impressionant totalment sense fil. Per descomptat, tindrà un temps de funcionament limitat en aquesta configuració. Per al funcionament normal, simplement utilitzo un adaptador de paret micro-USB.

Pas 5: programari del projecte

Programari del projecte
Programari del projecte

He utilitzat dos programes, un procés de Node.js que parla amb un procés secundari mitjançant el flux de dades stdin, perquè cadascun pugui fer el que millor faci i funcionar com a processos independents al seu ritme.

Això és el que vaig fer: però no cal, ja que he proporcionat un fitxer tar-gzip que conté l'arbre de fitxers resultant.

Configuració del servidor NodeJS:

cd ~

mkdir node_rgb cd node_rgb mkdir públic

poseu 'index.html' i 'style.css' al directori '~ / node_rgb / public' 'rgbDriver.c' i 'rgb_main.js' al directori '~ / node_rgb'

Compileu / creeu el procés c 'rgbDriver':

cd ~ / node_rgb

cc -o rgbDriver rgbDriver.c -lwiringPi -lpthread

Descarregant i ampliant l'equivalència

Per descarregar node_rgb.tgz (a continuació) al vostre Pi-Zero al directori inicial (~ pi), podeu fer un dels 3 següents:

  1. Baixeu-lo des del navegador al GUI del vostre Pi-Zero Mou el fitxer a ~ pi /
  2. En una finestra de terminal connectada a tu Pi-Zero: cd ~ piwget

    mv FZBF9BDIL6VBHKF.tgz rgb_node.tgz

  3. Baixeu-lo des d’un navegador de l’ordinador d’escriptori. Utilitzeu WinSCP per copiar-lo al directori ~ pi del Pi-Zero

Després d'haver realitzat el número 1 2 o 3 anterior …

cd ~

tar -xzvf arbre node_rgb.tgz node_rgb … node_rgb ├── públic │ ├── Dow_Jones_Index.html │ ├── index.html │ └── style.css ├── rgbDriver ├── rgbDriver.c ├── js ├── start_rgb ├── kill_rgb └── track_dji

L'executable resultant (des de dalt) 'rgbDriver' es pot utilitzar independentment del procés d'interfície Node.js.

Per verificar que aquest controlador i el maquinari funcionen, introduïu conjunts de tres valors (de 0-255), separats per un espai, al controlador. Com 'eco 255 0 0 |./rgbDriver 'per a vermell o' echo 0 255 0 |./rgbDriver 'per a verd. Tingueu en compte que “./” indica al SO que trobi el nostre programa 'rgbDriver' al directori actual. Quan emeteu un ^ c (cntl-c) per aturar el controlador, el led pot romandre encès o no. Alternativament, podeu alimentar-ne els valors de manera interactiva. Proveu d'escriure, des de la línia d'ordres, aquestes línies una darrere l'altra i observeu el LED.

./rgbDriver

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

Assegureu-vos que no teniu 2 d'aquests processos en paral·lel.

Per iniciar el conjunt d'aplicacions de programari complet, inclòs el servidor Node.js, utilitzeu aquesta ordre:

sudo node rgb_main.js

A continuació, utilitzeu cntl-c quan vulgueu aturar el servidor Node.js. Inicieu-lo amb

sudo node rgb_main.js &

per fer-lo córrer al fons, però després haureu d'utilitzar una ordre 'sudo kill -9 pid' per aturar-lo. Si aquesta ordre us sembla estranya, reviseu la sortida d'aquestes ordres: 'man kill' & 'man sudo'.

Utilitzeu un navegador a l’escriptori, la tauleta o el telèfon que estigui connectat a la vostra xarxa local. Aneu a https:// raspberrypi: 8080 / o si això no funciona, utilitzeu l'adreça IP del dispositiu (obtinguda del cmd 'ifconfig'), com ara 192.168.1.15 més l'especificació del port: 8080 o si utilitzeu el Pi-Zero GUI: localhost: 8080 funcionarà.

Feu servir els control lliscants RGB de la pàgina que apareix i observeu el seguiment del llum RGB-LED.

Altres ordres útils Tingueu en compte que si acabeu executant més d'un "rgbDriver" alhora, és probable que tingueu un comportament imprevisible. Si proveu d'executar una segona còpia de rgb_main.js, s'errorarà.

Aquesta ordre enumerarà tots els processos relacionats:

ps aux | grep rgb

Aquesta ordre eliminarà tots els processos nodeJS, juntament amb els processos secundaris 'rgbDriver':

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

Funcionament autònom

Per fer que Pi-Zero iniciï l'aplicació del servidor Node.js quan arrenci … mitjançant el vostre editor preferit (per exemple, nano ~ /.bash_profile), escriviu les línies següents i deseu-lo a ~ /.bash_profile

cd node_rgb

sudo node rgb_main.js &

Per evitar que rebi missatges d'error molestos en obrir una finestra de terminal, utilitzeu codificació condicional com l'script de l'intèrpret d'ordres al fitxer 'start_rgb'

Quan el Pi-Zero s’executa incrustat, sense teclat, ratolí ni monitor; la interfície gràfica d'usuari trigarà un temps mínim de la CPU, ja que no hi haurà interacció amb l'usuari. No desactivo l'inici de la GUI automàtica, ja que el Pi-Zero té més recursos dels necessaris, en aquest cas; i m’agrada poder connectar uns quants cables i utilitzar-los en qualsevol moment del futur. Tot i això, no és necessari, ja que podeu utilitzar un terminal SSH remot (per exemple, PuTTY) per fer el manteniment necessari.

Utilitzar-lo com a monitor d'esdeveniments

Vaig crear una pàgina web per controlar el canvi diari a l’índex Dow Jones. La seva font es pot utilitzar com a pauta per a la vostra pròpia pàgina que utilitza algunes dades web i condueix el vostre indicador Pi-Zero en conseqüència. Aquesta pàgina obté les seves dades (json) d'un servei web de Google. Hi ha moltes formes de serveis web, de manera que haureu d’investigar el que vulgueu utilitzar per determinar el codi JavaScript per accedir-hi.

Si voleu fer servir el vostre dispositiu, igual que jo, com a indicador de canvi d’índex Dow dedicat i autònom, afegiu aquestes línies al final del fitxer ~ /.bash_profile, o bé segons SSH desitjat i publiqueu la segona línia d’ordres. Si posteriorment voleu utilitzar el control remot "kill -9", el procés de navegació epifania resultant.

dorm 20

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

L'indicador il·luminarà un gris clar donat un valor de 0. Cada cop es torna més verd amb valors més alts. És de color verd pur més brillant a uns 250. Els valors més alts i alts provoquen al principi un flaix poc profund, fins a un flaix més profund a uns 500. Per al valor negatiu (caigudes diàries al Dow) ho fa de forma similar, però al vermell.

ACTUALITZACIÓ maig 2018

He creat una pàgina web nova (SolarStorm_devCon.html, adjunta com a fitxer.txt, a causa de la descàrrega del fitxer.html) que recopila informació de tempesta GeoMagnètica (que podria predir un CME devastador, EMP) i que l’utilitza per presentar un color escala que reflecteix una mena d'índex 'DevCon' de Geo-Storm. indicant el potencial d’un desastre a causa d’un pols electromagnètic (EMP) resultant del clima espacial, presumiblement de bengales solars o d’una expulsió de massa coronària (CME). Feu-lo servir com hauríeu utilitzat "Dow_Jones_Index.html".

Pas 6: control de pàgina web remota

Image
Image

En aquest punt, podeu controlar la vostra làmpada de color IOT des de qualsevol lloc de la vostra xarxa local. Com fer-la visible a través d’Internet públic no forma part d’aquesta instrucció. Si configureu una IP pública per al vostre dispositiu, haureu de utilitzeu aquesta IP a l'ordre open socket al JavaScript de les vostres pàgines (per exemple, ~ / node_rgb / public / index.html)

Tinc previst utilitzar el meu dispositiu Pi-Zero IOT com a indicador de color en temps real per al canvi del dia a l’índex Dow Jones. Vaig crear una pàgina que ho fa, que obté dades json de google.com/finance. Vaig crear algunes pàgines web per demostrar l’àmplia gamma d’usos d’aquest petit dispositiu IOT. En lloc de posar el meu PiZero a Internet públic, he allotjat les pàgines del meu servidor web existent (actualment @ 71.84.135.81 també conegut com: https://raspi.ddns01.com/ quan el meu servidor de noms de domini dinàmic gratuït funciona), que s’executa en una versió original B Raspberry-Pi.

Al codi de les meves pàgines remotes vaig obrir connexions de sòcol a 192.168.1.41:8080 Havia fixat la IP del meu Pi-Zero a 192.168.1.41. Per fer-ho, seguiu les instruccions de configuració-raspberry-pi-amb-wifi-i-a-static-ip a l’encapçalament: Adreça IP estàtica. Per tant, si configureu el PiZero a 192.168.1.41 a la vostra xarxa local, aquestes pàgines, obertes des del meu lloc web, es comunicaran amb el vostre dispositiu, ja que la connexió es realitza des del costat del client.

Aquí teniu aquelles pàgines que he utilitzat per provar i utilitzar el dispositiu d’il·luminació IOT Pi-Zero. Si publiqueu aquestes pàgines (https://71.84.135.81/iot/rgbLamp/ aka https://raspi.ddns01.com/iot/rgbLamp/ o qualsevol de les pàgines emmarcades en aquesta pàgina), el JavaScript del costat del client conduïu la llum IOT creada (ja que s’executa en aquesta URL “192.168.1.41:8080”). Si voleu, podeu copiar la font d’alguna d’aquestes pàgines i modificar-la al vostre gust.

Amb la primera pàgina podeu configurar el dispositiu a qualsevol color. El llum LED i el color que veieu a la pàgina web tindran un bon seguiment. Es poden ajustar els valors de resistència utilitzats (així com el monitor) per aconseguir-los més concordants. Vaig passar poc o cap temps assegurant-me que coincidissin. Aquesta pàgina actualitzarà el seu color sempre que algú canviï el color i el servidor enviï el missatge d'informació actualitzat.

Una pàgina és un semàfor controlat amb un simple botó.

Hi ha una pàgina dissenyada per fer un seguiment d'un concurs esportiu (per exemple, futbol, bàsquet, beisbol), unes eleccions, o fins i tot adaptat per a una recaptació de fons o un indicador d'estil de nivell d'alerta DEFCON. Les puntuacions (o vots electorals compromesos) es podrien obtenir automàticament d'un servei web o esborrar-ne alguna altra pàgina web. No tinc cap feed automàtic que condueixi la meva pàgina Contest_demo. Algú amb el coneixement adequat podria afegir un controlador de potència per encendre llums d'inundació LED d'alta potència i banyar una habitació (o un bar esportiu) amb el color d'un equip quan estigui al davant. Malauradament, arribo massa tard amb aquest instructiu per a les festes del Super Bowl d'enguany, però a temps per a les eleccions del 2016.

A continuació, hi ha la pàgina similar a la que faré servir per convertir el meu dispositiu en un indicador de seguiment de Dow Jones. El botó lliscant i els botons només es mostren a la pàgina de demostració DJI. A la font d'aquesta pàgina hi ha el codi que he desenvolupat per tornar a pintar una imatge inspirada en pantalla verda; amb prou comentaris que també us pot semblar útil.

Només la primera d’aquestes 4 pàgines (juntament amb la pàgina index.html basada en Pi-Zero) escolta els missatges d’actualització del servidor i s’actualitza en conseqüència. La resta només s’envien al servidor.

Recomanat: