Inhaltsverzeichnis:

RPi-Zero IoT-Ereignisanzeige / Farblampe - Gunook
RPi-Zero IoT-Ereignisanzeige / Farblampe - Gunook

Video: RPi-Zero IoT-Ereignisanzeige / Farblampe - Gunook

Video: RPi-Zero IoT-Ereignisanzeige / Farblampe - Gunook
Video: Windows Event and Logging Demystified: IT Admin Edition 2024, Juli
Anonim
RPi-Zero IoT-Ereignisanzeige / Farblampe
RPi-Zero IoT-Ereignisanzeige / Farblampe
RPi-Zero IoT-Ereignisanzeige / Farblampe
RPi-Zero IoT-Ereignisanzeige / Farblampe
RPi-Zero IoT-Ereignisanzeige / Farblampe
RPi-Zero IoT-Ereignisanzeige / Farblampe

Kein zusätzlicher Mikrocontroller und kein HAT-Zusatzmodul erforderlich. Der RPi-Zero macht alles. Besser noch einen RPi-Zero W verwenden!

Verwendungsbeispiel: Webservice-Statusanzeige (z. B. DowJonesIndex-Tracking), Statusanzeige für politische oder Sportereignisse, Stimmungslicht, einen Sensor verfolgen, was auch immer. Sehen Sie sich das Video in Schritt 6 an.

Der Raspberry-Pi hat nur eine hardwareunterstützte PWM-Leitung. Dieses Projekt benötigt 3 PWM-Leitungen, daher habe ich eine softwaregesteuerte PWM-C-Bibliothek (https://wiringpi.com/reference/software-pwm-library/) verwendet, die bereits installiert sein sollte.

Ich habe die Verarbeitung in 2 Prozesse aufgeteilt. Einer, Interrupt-gesteuert, schaltet die Steuerleitungen nach Bedarf auf die LED und erhält seine Marschbefehle von seinem 'stdin'-Stream. Der andere ist ein ereignisgesteuerter nodeJS-Server, der Socket-IO verwendet. Dies dient dazu, Dinge wie Lichtflimmern zu verhindern und gleichzeitig die Reaktionsfähigkeit sicherzustellen. Die Kombination verwendet normalerweise weniger als 5 % der CPU. In Zeiten ständiger Farbaktualisierungen (über Slider &/oder viele Clients) kann es leicht über 50% auslasten (insbesondere wenn auch der Browser in der Pi-Zero GUI verwendet wird). Beachten Sie, dass Aktualisierungsbenachrichtigungen an alle offenen Socket-Clients gesendet werden, wenn eine Änderung eingeht.

Schritt 1: Was Sie brauchen

Was du brauchen wirst
Was du brauchen wirst
Was du brauchen wirst
Was du brauchen wirst
  • Pi-Zero micro-SD-Karte, 8 GB empfohlen. Mit Raspbian-Linux oder NOOBS
  • RGB-LED (ich habe diese verwendet:
  • 3 Widerstände (Wert basierend auf gewünschtem Strom &/oder gewünschter Helligkeit, 1/8 Watt)
  • ein WLAN, USB-Dongle (z. B. https://www.ebay.com/itm/252018085448) oder noch besser einen Raspberry Pi Z-W (mit eingebautem WLAN)
  • ein Gehäuse (z. B. kleines: https://www.ebay.com/itm/131583579374 mit mehr Platz:
  • ein Diffusor (siehe Beispiele im Bild)
  • Kabel und Adapter nach Bedarf.

Optional, je nachdem, wie Sie die Komponenten anschließen möchten

  • Kopfzeile (https://www.ebay.com/itm/1418607616)
  • Jumper (https://www.ebay.com/itm/262235387520)
  • rechtwinkliger Micro-USB-Adapter (Blue USB 2.0 OTG R)
  • Mini-USB-Hub, nur während der Einrichtungsphase verwendet

Schritt 2: Pi-Zero-Setup und Vorbereitung für die Entwicklung

Folgen Sie dieser Ersteinrichtung für Ihren PiZero, um ihn für die Entwicklung vorzubereiten…https://www.raspberrypi.org/help/noobs-setup/

Sobald Sie eine microSD-Karte mit NOOBS-Setup haben, dann:

Stecken Sie die microSD-Karte ein. Schließen Sie einen USB-Hub mit geringem Stromverbrauch mit einem Wifi-Dongle, einer Tastatur und einer Maus an (Sie können eine drahtlose Maus und/oder Tastatur verwenden. Ich habe Adapter und einen Hub verwendet, den ich bereits hatte.

Schließen Sie nun einen Monitor und ein microUSB-Netzteil an und es wird hochgefahren. Fahren Sie fort und beenden Sie die Anweisungen zum Einrichten von Raspbian, Debian Linux, wie im obigen Noobs-Setup-Link zu sehen.

Außerdem hatte ich eine zu niedrige Auflösung. Also habe ich diese Zeilen zu /boot/config.txt hinzugefügt

disable_overscan=1

hdmi_group=2 hdmi_mode=58

Der hdmi_mode=58 funktioniert für meinen Monitor, Ihr braucht möglicherweise etwas anderes.

siehe: make-raspberry-pi-use-full-resolution-monitor and

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

Nach dem Hochfahren geht der Pi-Zero in die GUI-Oberfläche.

Um die volle Größe meiner microSD-Karte zu nutzen, habe ich die raspi-config #1 'Expand Filesystem'-Auswahl verwendet. Geben Sie in einem Terminalfenster in der Befehlszeile 'sudo raspi-config' ein. Siehe: documentation/configuration/raspi -config.md

Außerdem habe ich diese Einstellungen unter #5 'Internationalisierungsoptionen' geändert.

  • Gebietsschema: de_US. UTF-8 UTF-8
  • Zeitzone: Amerika … Los_Angeles
  • Tastaturlayout: Allgemeiner 105-Tasten (Intl) PC … Englisch (US)

Für mich machte der britische Tastaturstandard (für den Raspbian voreingestellt ist) viele meiner Bearbeitungen zu einer echten lästigen Pflicht.

Ändern Sie diese Einstellungen nach Bedarf entsprechend für Sie. Beachten Sie, dass Sie die Pfeiltasten und die Tabulatortaste verwenden müssen, um in 'raspi-config' zu navigieren; und nach einer Auswahl kann es sehr langsam sein, zu reagieren.

Ich fand es kein Problem, mich mit einem WiFi-USB-Dongle (ich habe 2 verschiedene verwendet) mit dem Internet zu verbinden. Ich musste einfach mein WLAN-Zugangsschlüssel-Passwort über ein Pulldown-Menü oben rechts in der GUI eingeben. Sobald ich dies getan habe, würde es sich nach jedem Neustart / Einschalten automatisch verbinden.

Jetzt war ich bereit für die allgemeine Entwicklung.

Um an diesen Punkt zu gelangen, können Sie viele Wege nehmen. Bis jetzt habe ich hier nicht allzu viele Details gegeben, aber es gibt viele Methoden und Konfigurationen, die im Web genauer beschrieben sind. Einschließlich eines für ein Headless-Setup, bei dem Sie ein Remote-SSH-Terminalfenster auf Ihrem PC verwenden würden, um die in dieser Anleitung beschriebenen Entwicklungsschritte durchzuführen.

Schritt 3: Entwicklungsumgebung und Tools

Entwicklungsumgebung und Tools
Entwicklungsumgebung und Tools
Entwicklungsumgebung und Tools
Entwicklungsumgebung und Tools

Für das Setup der Systemkonfiguration und die Software, die ich für das Projekt entwickelt habe, habe ich die Forschung und Entwicklung auf einem Raspberry Pi-2 durchgeführt; denn es hat eine Quad-Core-CPU, die das Surfen und die Codeentwicklung mit mehreren Fenstern viel schneller macht. Sie können natürlich jedes beliebige Raspberry-Pi-Modell verwenden, um dieses Projekt zu realisieren.

Um Node.js (ereignisgesteuerte serverseitige E/A-JavaScripting-Unterstützung) einzurichten, habe ich Folgendes getan…

sudo apt-get update

sudo apt-get install nodejs npm

Hinzufügen dieser nodeJS-Pakete (npm ist Nodejs Package Manager)

npm Express installieren

npm install socket.io

Referenzen:https://nodejs.org/en/

www.npmjs.com/package/express Schnelles, minimalistisches Web-Framework

www.npmjs.com/package/socket.io Socket. IO ermöglicht bidirektionale ereignisbasierte Kommunikation in Echtzeit

Schritt 4: Die Hardware

Die Hardware
Die Hardware
Die Hardware
Die Hardware
Die Hardware
Die Hardware
Die Hardware
Die Hardware

Die verwendeten Widerstandswerte sind alle unterschiedlich, da sich Spannungsabfall und Effizienz für alle drei LED-Farbsegmente unterscheiden. Die GPIO High-Ausgangspegel betrugen alle ungefähr 3,2 Volt. Jedes LED-Segment wurde getestet, um sicherzustellen, dass es weniger als maximal 20 mA und insgesamt etwa 40 mA verbraucht (<50 mA maximal zulässig insgesamt), was der PiZero problemlos verarbeiten kann. Ich habe so viel Ausgangshelligkeit wie möglich erhalten und die LED direkt angesteuert; was für meine Bedürfnisse ausreichend ist. Um höhere Ströme zu treiben, für eine viel hellere Ausgabe, könnten Zwischentreibertransistoren mit einer gemeinsamen Anoden-LED verwendet werden, deren Anode an die 5-V-Leitung angeschlossen ist. PS: Da meine verschiedenen Weißstufen etwas bläulich erscheinen, 27 statt 24 Ohm wäre für mich die bessere wahl gewesen.

Beachten Sie, dass ich einen Header mit männlichen Pins verwendet und mit F-F-Jumpern an die LED-Beine angeschlossen habe. Dadurch wurde die Gesamthöhe niedrig gehalten. Ich lötete die Widerstände in die Mitte der Jumper. Die Verwendung keiner Platine oder lötfreien Platine zusammen mit der Verwendung eines rechtwinkligen Micro-USB-zu-USB-Adapters für den WiFi-Dongle machte die Endmontage ziemlich kompakt.

Für einen Diffusor empfehle ich einen Tischtennisball (es ist einfach, ein Loch zu bohren, das gerade groß genug ist, um Ihre 5-8-10 mm LED hineinzusetzen). Oder schneiden Sie die Oberseite einer LED-Glühbirne ab (eine, die einen Kunststoffdiffusor verwendet). Markieren Sie dazu mit einem feinen Spitzer eine Linie, wo Sie schneiden möchten, und verwenden Sie ein Dremel-ähnliches Werkzeug mit einem dünnen Abschneideaufsatz. Wenn Sie möchten, kann ein schönes kleines geschliffenes Glasgefäß oder ein Trinkglas verwendet werden. Sobald Sie sich für einen Diffusor entschieden haben, kleben Sie ihn auf die Oberseite des Gehäuses.

Für Vorführungen verwende ich gerne eine kleine Li-Powerbank im Koffer. Dieses Gerät scheint völlig kabellos zu sein. Natürlich hat es in dieser Konfiguration eine begrenzte Betriebszeit. Für den normalen Betrieb verwende ich einfach einen Micro-USB-Wandadapter.

Schritt 5: Projektsoftware

Projektsoftware
Projektsoftware

Ich habe zwei Programme verwendet, einen Node.js-Prozess, der über seinen stdin-Datenstrom mit einem untergeordneten Prozess kommuniziert. Auf diese Weise können sie jeweils das tun, was sie am besten können, und als unabhängige Prozesse in ihrem eigenen Tempo arbeiten.

Folgendes habe ich getan: Aber Sie müssen nicht, da ich eine tar-gzip-Datei bereitgestellt habe, die den resultierenden Dateibaum enthält.

Serverseitige Einrichtung von NodeJS:

cd ~

mkdir node_rgb cd node_rgb mkdir öffentlich

'index.html' und 'style.css' in das Verzeichnis '~/node_rgb/public' legen 'rgbDriver.c' und 'rgb_main.js' in das Verzeichnis '~/node_rgb' legen

Kompilieren/erstellen Sie den c-Prozess 'rgbDriver':

cd ~/node_rgb

cc -o rgbDriver rgbDriver.c -lwiringPi -lpthread

Herunterladen und Erweitern der Äquivalenz

Um node_rgb.tgz (unten) auf Ihren Pi-Zero in Ihr Home-Verzeichnis (~pi) herunterzuladen, können Sie einen der 3 folgenden Schritte ausführen:

  1. Laden Sie vom Browser in der GUI Ihres Pi-Zero herunter. Verschieben Sie die Datei nach ~pi/
  2. In einem Terminalfenster, das mit Ihnen verbunden ist Pi-Zero: cd ~ piwget

    mv FZBF9BDIL6VBHKF.tgz rgb_node.tgz

  3. Laden Sie es von einem Browser auf Ihrem Desktop-Computer herunter. Verwenden Sie WinSCP, um es in das Verzeichnis ~pi auf dem Pi-Zero. zu kopieren

Nachdem Sie Nr. 1 2 oder 3 oben ausgeführt haben …

cd ~

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

Die resultierende ausführbare Datei (von oben) ' rgbDriver ' kann unabhängig vom Node.js-Schnittstellenprozess verwendet werden.

Um zu überprüfen, ob dieser Treiber und die Hardware funktionieren, füttern Sie den Treiber mit drei Werten (von 0-255), getrennt durch ein Leerzeichen. Gefällt mir 'echo 255 0 0 |./rgbDriver' für rot oder 'echo 0 255 0 |./rgbDriver' für grün. Beachten Sie, dass das „./“das Betriebssystem anweist, unser Programm „rgbDriver“im aktuellen Verzeichnis zu finden. Wenn Sie ein ^c (cntl-c) ausgeben, um den Treiber zu stoppen, kann die LED eingeschaltet bleiben oder nicht. Alternativ können Sie seine Werte interaktiv füttern. Versuchen Sie, diese Zeilen nacheinander von der Befehlszeile aus einzugeben und beobachten Sie die LED.

./rgbTreiber

0 255 0 100 0 100 255 255 0 …usw… ^c

Stellen Sie sicher, dass nicht 2 dieser Prozesse parallel laufen.

Um die vollständige Softwareanwendungssuite einschließlich des Node.js-Servers zu starten, verwenden Sie diesen Befehl:

sudo-Knoten rgb_main.js

Verwenden Sie dann cntl-c, wenn Sie den Node.js-Server stoppen möchten. Starten Sie ihn mit

sudo-Knoten rgb_main.js&

um es im Hintergrund laufen zu lassen, aber dann müssen Sie einen 'sudo kill -9 pid'-Befehl verwenden, um es zu stoppen. Wenn Ihnen dieser Befehl fremd erscheint, überprüfen Sie die Ausgabe dieser Befehle: 'man kill' & 'man sudo'.

Verwenden Sie einen Browser auf Ihrem Desktop, Tablet oder Telefon, der mit Ihrem lokalen Netzwerk verbunden ist. Gehen Sie zu https://raspberrypi:8080/ oder wenn das nicht funktioniert, verwenden Sie die IP-Adresse des Geräts (aus dem cmd 'ifconfig' erhalten) etwa 192.168.1.15 plus die Portspezifikation: 8080 oder wenn Sie die Pi-Zero verwenden GUI: localhost:8080 wird funktionieren.

Bedienen Sie die RGB-Schieberegler auf der angezeigten Seite und beobachten Sie, wie die RGB-LED-Lampe folgt.

Andere hilfreiche Befehle Beachten Sie, dass Sie wahrscheinlich unvorhersehbares Verhalten bekommen, wenn mehr als ein 'rgbDriver' gleichzeitig ausgeführt wird. Wenn Sie versuchen, eine zweite Kopie von rgb_main.js auszuführen, wird ein Fehler ausgegeben.

Dieser Befehl listet alle zugehörigen Prozesse auf:

ps aux |grep rgb

Dieser Befehl tötet alle nodeJS-Prozesse zusammen mit den untergeordneten 'rgbDriver'-Prozessen:

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

Eigenständiger Betrieb

Damit der Pi-Zero die Node.js-Server-App beim Booten startet … mit Ihrem bevorzugten Editor (z. B. nano ~/.bash_profile), geben Sie die folgenden Zeilen ein und speichern Sie in ~/.bash_profile

cd node_rgb

sudo-Knoten rgb_main.js &

Um beim Öffnen eines Terminalfensters keine störenden Fehlermeldungen zu erhalten, verwenden Sie bedingte Codierung wie das Shell-Skript in der Datei 'start_rgb'

Wenn der Pi-Zero eingebettet läuft, ohne Tastatur, Maus oder Monitor; die grafische Benutzeroberfläche benötigt nur minimale CPU-Zeit, da keine Benutzerinteraktion stattfindet. Ich deaktiviere den automatischen GUI-Start nicht, da der Pi-Zero in diesem Fall mehr Ressourcen als benötigt hat; und ich mag es, in Zukunft jederzeit ein paar Kabel anschließen und verwenden zu können. Dies ist jedoch nicht erforderlich, da Sie ein entferntes SSH-Terminal (z. B. PuTTY) für die erforderliche Wartung verwenden können.

Als Ereignismonitor verwenden

Ich habe eine Webseite erstellt, um die tägliche Veränderung des Dow Jones Index zu überwachen. Die Quelle kann als Richtlinie für Ihre eigene Seite verwendet werden, die einige Webdaten verwendet und Ihren Pi-Zero-Indikator entsprechend steuert. Diese Seite bezieht ihre (json) Daten von einem Google-Webdienst. Es gibt viele Formen von Webdiensten, daher müssen Sie diejenige recherchieren, die Sie verwenden möchten, um den JavaScript-Code für den Zugriff darauf zu bestimmen.

Wenn Sie Ihr Gerät wie ich als dedizierten, eigenständigen Dow Index Change Indicator verwenden möchten, fügen Sie diese Zeilen am Ende der Datei ~/.bash_profile hinzu, oder wie gewünscht SSH in und geben Sie die zweite Befehlszeile aus. Wenn Sie anschließend die Fernbedienung verwenden möchten, 'kill -9 ' den resultierenden Epiphany-Browser-Prozess.

Schlaf 20

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

Bei einem Wert von 0 leuchtet die Anzeige hellgrau. Bei höheren Werten wird sie immer grüner. Es ist am hellsten reines Grün bei etwa 250. Höhere Werte verursachen zunächst einen flachen Blitz, bis zu einem tiefsten Blitz bei etwa 500. Bei negativen Werten (tägliche Abfalle im Dow) verhält es sich ähnlich, jedoch in Rot.

UPDATE Mai 2018

Ich habe eine neue Webseite erstellt (SolarStorm_devCon.html, angehängt als.txt-Datei, da die.html-Datei nicht hochgeladen wird), die geomagnetische Sturminformationen sammelt (die ein verheerendes CME, EMP vorhersagen könnten) und diese verwendet, um eine Farbe zu präsentieren Skala, die eine Art Geo-Storm-'DevCon'-Index widerspiegelt. zeigt das Potenzial einer Katastrophe aufgrund eines elektromagnetischen Impulses (EMP) an, der aus dem Weltraumwetter, vermutlich Sonneneruptionen oder einem koronalen Massenauswurf (CME) resultiert. Verwenden Sie es so, wie Sie "Dow_Jones_Index.html" verwendet hätten.

Schritt 6: Remote-Webseitensteuerung

Image
Image

An diesem Punkt können Sie Ihre IOT-Farblampe von überall in Ihrem lokalen Netzwerk steuern. Wie Sie sie im öffentlichen Internet sichtbar machen, ist nicht Teil dieser Anleitung. Wenn Sie eine öffentliche IP für Ihr Gerät einrichten, müssen Sie dies tun Verwenden Sie diese IP im Open-Socket-Befehl im JavaScript Ihrer Seiten (zB ~/node_rgb/public/index.html)

Ich plane, mein Pi-Zero IOT-Gerät als Echtzeit-Farbindikator für die Tagesveränderung des Dow Jones Index zu verwenden. Ich habe eine Seite erstellt, die dies tut, die Json-Daten von google.com/finance erhält. Ich habe außerdem ein paar Webseiten erstellt, um die vielfältigen Einsatzmöglichkeiten dieses kleinen IOT-Geräts zu demonstrieren. Anstatt meinen PiZero ins öffentliche Internet zu stellen, habe ich die Seiten auf meinem bestehenden öffentlichen Webserver gehostet (derzeit @ 71.84.135.81 aka: https://raspi.ddns01.com/ wenn mein kostenloser Dynamic Domain Name Server in Betrieb ist), der auf einem Raspberry-Pi der Originalversion B läuft.

Im Code auf meinen Remote-Seiten habe ich Socket-Verbindungen zu 192.168.1.41:8080 geöffnet. Ich hatte die IP meines Pi-Zero auf 192.168.1.41 festgelegt. Befolgen Sie dazu die Anweisungen unter setup-raspberry-pi-with-wifi-and-a-static-ip unter der Überschrift: Statische IP-Adresse. Wenn Sie also Ihren PiZero so einrichten, dass er in Ihrem lokalen Netzwerk auf 192.168.1.41 steht, diese Seiten, die von meiner Website aus geöffnet werden, kommunizieren mit Ihrem Gerät, da die Verbindung von der Client-Seite aus erfolgt.

Hier sind die Seiten, auf denen ich mein Pi-Zero IOT-Beleuchtungsgerät getestet und betrieben habe. Wenn Sie diese Seiten aufrufen (https://71.84.135.81/iot/rgbLamp/ aka https://raspi.ddns01.com/iot/rgbLamp/ oder eine der Seiten, die auf dieser Seite eingerahmt sind), wird das clientseitige JavaScript Fahren Sie Ihr erstelltes IOT-Licht (vorausgesetzt, es läuft unter dieser URL "192.168.1.41:8080") Wenn Sie möchten, können Sie die Quelle einer dieser Seiten kopieren und nach Ihren Wünschen ändern.

Auf der ersten Seite können Sie Ihr Gerät auf eine beliebige Farbe einstellen. Die LED-Lampe und die Farbe, die Sie auf der Webseite sehen, werden ziemlich gut verfolgt. Die verwendeten Widerstandswerte können (wie auch der Monitor) optimiert werden, um sie besser aufeinander abzustimmen. Ich habe wenig bis gar keine Zeit damit verbracht, sicherzustellen, dass sie zusammenpassen. Diese Seite aktualisiert ihre Farbe, wenn jemand anders die Farbe ändert und der Server die aktualisierte Infonachricht sendet.

Eine Seite ist eine einfache Schaltflächen-gesteuerte Ampel.

Es gibt eine Seite, die entwickelt wurde, um einen Sportwettbewerb (z. B. Fußball, Basketball, Baseball), eine Wahl zu verfolgen oder sogar für eine Spendenaktion oder einen DEFCON-Alarmstufen-Stilindikator angepasst zu werden. Die Ergebnisse (oder zugesagten Wählerstimmen) könnten automatisch von einem Webdienst abgerufen oder von einer anderen Webseite abgekratzt werden. Ich habe keinen automatischen Feed, der meine Contest_demo-Seite steuert. Jemand mit dem richtigen Know-how könnte einen Leistungstreiber hinzufügen, um Hochleistungs-LED-Flutlichter zu betreiben und einen Raum (oder eine Sportbar) mit der Farbe eines Teams zu baden, wenn es vorne liegt. Leider bin ich mit diesem anweisbaren für die diesjährigen Super-Bowl-Partys zu spät, aber rechtzeitig für die Wahlen 2016.

Dann gibt es die Seite ähnlich der, die ich verwenden werde, um mein Gerät in einen Dow Jones-Tracking-Indikator zu verwandeln. Der Schieberegler und die Schaltflächen befinden sich nur zu Demonstrationszwecken auf der DJI-Demoseite. Der Quellcode dieser Seite enthält Code, den ich entwickelt habe, um ein von Greenscreen inspiriertes Bild neu zu färben; mit genügend Kommentaren, dass Sie es auch nützlich finden können.

Nur die erste dieser 4 Seiten (zusammen mit der Pi-Zero-basierten index.html-Seite) lauscht auf Server-Update-Nachrichten und aktualisiert sich entsprechend. Alle anderen nur an den Server senden.

Empfohlen: