Inhaltsverzeichnis:

Bauen Sie einen besseren Raspberry Pi Power Button - Gunook
Bauen Sie einen besseren Raspberry Pi Power Button - Gunook

Video: Bauen Sie einen besseren Raspberry Pi Power Button - Gunook

Video: Bauen Sie einen besseren Raspberry Pi Power Button - Gunook
Video: #385 Supervise your Home Server with a Watchdog and Heartbeats (Raspberry Pi, ESP8266, Docker) 2024, November
Anonim
Image
Image

Es ist sehr einfach, einen Raspberry Power-Off- oder Shutdown-Button zu erstellen. Es gibt viele solcher Projekte im Web und einige hier auf Instructables, aber keines davon (das ich sehen kann) sagt Ihnen, wann Ihr Pi tatsächlich heruntergefahren ist und daher ist es sicher, die Stromversorgung zu ziehen. Tatsächlich erkennen sie nicht einmal an, dass der Knopfdruck gesehen wurde.

Es gibt auch Projekte, um einen heruntergefahrenen Pi neu zu starten, aber diese geben Ihnen auch kein visuelles Feedback.

Aber wer braucht so einen Knopf? Wenn Sie ein bisschen ein Nerd wie ich oder sogar nur ein aufstrebender Nerd sind, können Sie sich jederzeit lokal oder über das Netzwerk bei Ihrem Pi anmelden und sudo shutdown -h now eingeben. Aber wenn Sie ein Projekt für technisch nicht versierte Benutzer erstellen, reicht das einfach nicht. Es stimmt, Sie können fast immer damit davonkommen, einfach nur am Netzkabel zu ziehen, aber beachten Sie, ich sagte fast immer! Jedermanns Glück geht früher oder später zu Ende. Ich hatte erst letzte Woche eine SD-Karte bei mir, obwohl ich nie wissen werde, ob es wirklich an einem plötzlichen Stromausfall lag oder nicht.

In meinem Fall musste ich einem Pi, den wir als Midi-Sequenzer zum Aufnehmen und Abspielen von Kirchenliedern und Liedern verwenden, einen Netzschalter hinzufügen, wenn wir keinen Live-Pianisten zur Verfügung haben. Ich kann den Befehl zum Herunterfahren immer eingeben, aber ich muss ihn dequalifizieren, wenn ich nicht da bin.

Meine Absicht hier ist nicht, Ihnen ein fertiges Produkt zu geben, komplett mit wunderschöner 3D-gedruckter Hülle, wie so viele andere Instructables. Jeder wird eine andere Verwendung dafür haben oder in sein eigenes Projekt integrieren wollen. Vielmehr rüste ich Sie mit der Technologie aus, die Sie zu Ihrem Projekt hinzufügen können, sei es ein Media Center, ein IoT-Gerät oder etwas anderes.

(Im Video demonstriere ich es mit einem Pi Zero v1.2 und einem Monitor, den ich aus einem umfunktionierten Laptop-Bildschirm und einem Controller aus Fernost gemacht habe.)

Schritt 1: Das Design

Wie es funktioniert
Wie es funktioniert

Dies ist, was mein Power-Button für Sie tun wird:

  • Wenn der Pi läuft, leuchtet eine LED dauerhaft. Wenn es manuell heruntergefahren wird, erlischt die LED nur, wenn es sicher ist, den Strom zu trennen.
  • Wenn Sie während des Betriebs die Taste mindestens eine Sekunde lang drücken, wird ein Shutdown eingeleitet und die LED blinkt jede Sekunde für eine Viertelsekunde, bis der Strom gefahrlos gezogen werden kann.
  • Aus einem Shutdown-Zustand (wenn die Stromversorgung nicht entfernt wurde) startet das Drücken der Taste den Bootvorgang und die LED blinkt jede Sekunde für eine Viertelsekunde, bis er hochgefahren ist. (Es kann etwas länger dauern, bis alle Dienste wie ssh und vnc laufen.)

Die Komponenten sind sehr günstig. Alles was Sie brauchen ist:

  • ATTiny85 (Arduino-kompatibler Chip)
  • 3 Widerstände: 2 x 330Ω und 1 x 10kΩ
  • 1 LED - ich schlage grün oder blau vor, aber Sie haben die Wahl
  • Steckbrett und Überbrückungsdrähte oder Stripboard, oder wie auch immer Sie es bauen möchten.

Schritt 2: Wie es funktioniert

Wie bei allen Pi-Power-Tasten zieht dieser einen GPIO-Pin in einen niedrigen Zustand, um einem auf dem Pi laufenden Hilfsprogramm eine Anforderung zum Herunterfahren zu signalisieren. Ich habe GPIO4 (Pin 7) verwendet, aber Sie können jeden anderen Pin verwenden.

Die einzige Möglichkeit, zu erkennen, dass ein Pi das Herunterfahren abgeschlossen hat, besteht darin, den TxD-Pin 8 zu beobachten, der dann auf Low geht. Dies hängt davon ab, ob die serielle Konsole aktiviert ist, was standardmäßig der Fall ist. Tatsächlich wird TxD regelmäßig auf und ab gehen, während es als serielle Konsole verwendet wird, aber es wird nie für mehr als etwa 30 ms gleichzeitig auf Low gehen, selbst bei der langsamsten üblichen Baudrate. Es kann immer noch für eine serielle Konsole verwendet werden, da wir es nur passiv beobachten.

Zum Neustart müssen wir SCL1 (Pin 5) kurz auf Low ziehen. Dieser Pin wird von allen I2C-Geräten (einschließlich meiner Midi-Schnittstelle) verwendet, aber nach dem Starten des Bootens lassen wir ihn in Ruhe.

Die meiste Komplexität steckt in der Arduino-Skizze, die wir in den ATTiny85 laden. Dies implementiert eine "Zustandsmaschine" - eine sehr nützliche und leistungsstarke Methode zur Codierung jedes Problems, das durch eine Reihe von "Zuständen" dargestellt werden kann. Eine Waschmaschine funktioniert genauso. Die Zustände stellen die Phasen des Waschzyklus dar und jeder definiert, was die Maschine zu diesem Zeitpunkt tun soll (Motoren oder Pumpen laufen, Ventile öffnen oder schließen) und welche Sensoreingänge (Temperatur, Wasserstand, Timer) bestimmen Sie, wann Sie in den nächsten Zustand wechseln und welchen nächsten Zustand Sie wählen möchten.

Die Handskizze ist mein erster Entwurf eines Zustandsdiagramms, das alle Zustandsübergänge zeigt. Dies ist nur, um Ihnen zu zeigen, wie Sie Ihre Zustände und Zustandsübergänge anfänglich planen können - es ist möglicherweise nicht ganz genau so, wie es war, bevor ich mit dem Debuggen begann.

In unserem Fall haben wir 6 Zustände, die ich OFF, BOOT REQUEST, BOOTING, RUNNING, SHUTDOWN REQUEST und SHUTTING DOWN genannt habe. (Nach SHUTTING DOWN geht es wieder auf OFF.) Diese werden durch Kommentare in der Skizze identifiziert, und für jeden geben weitere Kommentare an, was es tun soll und welche Ereignisse es in einen anderen Zustand versetzen.

Das auf dem Pi laufende Hilfsprogramm ist nur etwas komplizierter als bei den meisten Shutdown-Buttons. Er reagiert auf einen langen Low-Puls am GPIO-Pin, indem er ein Herunterfahren einleitet, aber er reagiert auch auf einen kurzen Puls, indem er selbst den GPIO-Pin kurz auf Low zieht. So erkennt der ATTiny85, dass er läuft und kann so vom BOOTING- in den RUNNING-Zustand wechseln.

Schritt 3: Erstellen eines Demo-Prototyps

Erstellen eines Demo-Prototyps
Erstellen eines Demo-Prototyps
Erstellen eines Demo-Prototyps
Erstellen eines Demo-Prototyps
Erstellen eines Demo-Prototyps
Erstellen eines Demo-Prototyps

Zu Demonstrationszwecken können Sie es wie gezeigt auf einem lötfreien Steckbrett prototypisieren, aber ich habe Ihnen auch den Schaltplan gegeben, damit Sie Ihr eigenes Layout mit einem Stripboard oder einer benutzerdefinierten Leiterplatte ausarbeiten können, möglicherweise Teil eines umfassenderen Projekts.

Schritt 4: Programmierung des ATTiny85

Die Arduino-Skizze und das Hilfsprogramm sind diesem Schritt beigefügt. Erstellen Sie in Ihrem Arduino-Skizzenordner einen Ordner namens PiPwr und kopieren Sie die Datei PiPwr.ino hinein. Wenn Sie die Arduino IDE starten, finden Sie sie jetzt in Ihrem Skizzenbuch.

Es gibt mehrere Möglichkeiten, einen ATTiny85 zu programmieren. Wenn Ihr Bootloader installiert ist, können Sie ein ATTiny85-Entwicklungsboard verwenden, das nur wenige Pfund kostet. Dieser wird über einen USB-Port mit Ihrem PC verbunden. Ich habe einen Hidiot verwendet, der im Wesentlichen gleich ist, aber mit einem Prototyping-Bereich.

Fügen Sie in der Arduino IDE unter File - Preferences hinzu

digistump.com/package_digistump_index.json

zu den URLs des Managers für zusätzliche Boards.

Unter Tools - Board sollten Sie nun eine Reihe von Digispark-Optionen sehen. Wählen Sie Digispark (Standard - 16,5 MHz).

Wenn Ihr ATTiny85 keinen Bootloader hat (oder Sie es nicht wissen), können Sie für ein paar Pfund einen AVR ISP-Programmierer bekommen. Oder Sie können einen Arduino Uno oder einen günstigeren Pro Mini oder Nano als Programmierer verwenden. Google für "arduino as isp attiny85" (ohne die Anführungszeichen) für Anweisungen.

Wenn Sie die Skizze ändern möchten, finden Sie sie vollständig kommentiert und hoffentlich leicht verständlich. Zum Debuggen ist es viel einfacher, einen Arduino Pro Mini oder Nano zu verwenden. Entkommentieren Sie serial.begin() im Setup und die print-Anweisungen in loop(), um die Schritte zu sehen, die es mit dem seriellen Monitor durchläuft. Es gibt alternative Pin-Definitionen in der Quelle, auskommentiert, für einen Uno, Pro Mini oder Nano.

Kopieren Sie auf Ihrem Raspberry Pi die Datei shutdown_helper.py in den Ordner /etc/local/bin und legen Sie diese mit dem Befehl als ausführbar fest

sudo chmod +x /usr/local/bin/shutdown_helper.py

Bearbeiten Sie nun die Datei /etc/rc.local mit Ihrem bevorzugten Editor. (Sie müssen dies als root tun.) Fügen Sie vor der letzten Zeile (Ausgang 0) die Zeile ein

nohup /usr/local/bin/shutdown_helper.py &

Starten Sie neu und das Hilfsprogramm wird automatisch gestartet.

Empfohlen: