Inhoudsopgave:

Bouw een betere Raspberry Pi-aan / uit-knop - Ajarnpa
Bouw een betere Raspberry Pi-aan / uit-knop - Ajarnpa

Video: Bouw een betere Raspberry Pi-aan / uit-knop - Ajarnpa

Video: Bouw een betere Raspberry Pi-aan / uit-knop - Ajarnpa
Video: Hoe hebben wij de Raspberry PI ontvangen van SOS Solutions? #1 2024, November
Anonim
Image
Image

Het is heel eenvoudig om een Raspberry power-off of shutdown-knop te maken. Er zijn veel van dergelijke projecten op internet en een paar hier op Instructables, maar geen van hen (die ik kan zien) vertelt je wanneer je Pi daadwerkelijk is uitgeschakeld en daarom is het veilig om de stroom eruit te halen. In feite erkennen ze niet eens dat de druk op de knop is gezien.

Er zijn ook projecten om een Pi die is afgesloten opnieuw op te starten, maar deze geven je ook geen visuele feedback.

Maar wie heeft zo'n knop nodig? Als je een beetje een nerd bent zoals ik, of zelfs maar een aspirant-nerd, kun je altijd lokaal of via het netwerk inloggen op je Pi en sudo shutdown -h nu typen. Maar als u een project bouwt voor niet-technische gebruikers, is dat niet voldoende. Toegegeven, je kunt bijna altijd wegkomen door gewoon aan het netsnoer te trekken, maar let op, ik zei bijna altijd! Ieders geluk raakt vroeg of laat op. Ik had vorige week pas een SD-kaart bij me, hoewel ik nooit zal weten of het echt te wijten was aan een abrupt stroomverlies.

In mijn geval moest ik een aan / uit-knop toevoegen aan een Pi die we gebruiken als midi-sequencer voor het opnemen en afspelen van hymnes en liedjes in de kerk, voor als we geen live pianist beschikbaar hebben. Ik kan altijd het shutdown-commando typen, maar ik moet het de-skillen voor als ik er niet ben.

Het is niet mijn bedoeling om je een afgewerkt product te geven, compleet met een prachtig 3D-geprint hoesje, zoals zoveel andere Instructables. Iedereen zal er een ander gebruik voor hebben of in zijn eigen project willen opnemen. In plaats daarvan zal ik u voorzien van de technologie die u aan uw project kunt toevoegen, of het nu een mediacentrum, een IoT-apparaat of iets anders is.

(In de video demonstreer ik het met een Pi Zero v1.2 en een monitor die ik heb gemaakt van een hergebruikt laptopscherm en een controller uit het Verre Oosten.)

Stap 1: Het ontwerp

Hoe het werkt
Hoe het werkt

Dit is wat mijn aan / uit-knop voor je zal doen:

  • Als de Pi draait, brandt er continu een LED. Als het handmatig wordt uitgeschakeld, gaat de LED alleen uit als het veilig is om de stekker uit het stopcontact te halen.
  • Als u tijdens het hardlopen de knop minimaal een seconde ingedrukt houdt, wordt het apparaat uitgeschakeld en knippert de LED elke seconde een kwart seconde totdat het veilig is om de stekker uit het stopcontact te halen.
  • Vanuit een afgesloten toestand (als de stroom niet is verwijderd), begint het opstarten door op de knop te drukken en de LED knippert elke seconde een kwart seconde totdat het is opgestart. (Het kan iets langer duren voordat alle services zoals ssh en vnc actief zijn.)

De componenten zijn erg goedkoop. Alles wat je nodig hebt is:

  • ATTiny85 (Arduino-compatibele chip)
  • 3 weerstanden: 2 x 330Ω en 1 x 10kΩ
  • 1 LED - ik raad groen of blauw aan, maar het is jouw keuze
  • breadboard en jumperdraden, of stripboard, of hoe je het ook wilt bouwen.

Stap 2: Hoe het werkt

Zoals met alle Pi-aan / uit-knoppen, trekt deze een GPIO-pin naar een lage status om een uitschakelverzoek te signaleren aan een hulpprogramma dat op de Pi wordt uitgevoerd. Ik heb GPIO4 (pin 7) gebruikt, maar je kunt elke andere pin gebruiken.

De enige manier om te zien of een Pi volledig is afgesloten, is door naar TxD-pin 8 te kijken, die dan laag wordt. Dit hangt af van de seriële console die is ingeschakeld, wat het standaard is. In feite zal TxD regelmatig op en neer gaan terwijl het wordt gebruikt als een seriële console, maar het zal nooit meer dan ongeveer 30 mS per keer laag worden, zelfs niet bij de langzaamste gewone baudrate. Het kan nog steeds worden gebruikt voor een seriële console, omdat we er passief naar kijken.

Om opnieuw op te starten, moeten we SCL1 (pin 5) kort naar beneden trekken. Deze pin wordt gebruikt door alle I2C-apparaten (inclusief mijn midi-interface), maar na het starten van het opstarten laten we het met rust.

Het grootste deel van de complexiteit zit in de Arduino-schets die we in de ATTiny85 laden. Dit implementeert een "state machine" - een zeer nuttige en krachtige manier om elk probleem te coderen dat kan worden weergegeven door een aantal "states". Een wasmachine werkt op precies dezelfde manier. De statussen vertegenwoordigen de fasen in de wascyclus en elk definieert wat de machine op dat moment zou moeten doen (motoren of pompen die moeten draaien, kleppen die moeten worden geopend of gesloten) en welke sensoringangen (temperatuur, waterniveau, timers) bepalen wanneer u naar de volgende staat moet gaan en welke volgende staat u moet kiezen.

De handschets is mijn eerste ontwerp van een toestandsdiagram, dat alle toestandsovergangen laat zien. Dit is alleen om je te laten zien hoe je in eerste instantie je toestanden en toestandsovergangen kunt plannen - het is misschien niet helemaal nauwkeurig zoals dat was voordat ik begon met debuggen.

In ons geval hebben we 6 toestanden die ik UIT, BOOT REQUEST, BOOTING, RUNNING, SHUTDOWN REQUEST en SHUTTING DOWN heb genoemd. (Na UITSLUITEN gaat het terug naar UIT.) Deze worden geïdentificeerd door opmerkingen in de schets, en voor elk geven verdere opmerkingen aan wat het zou moeten doen en welke gebeurtenissen het naar een andere staat zullen verplaatsen.

Het hulpprogramma dat op de Pi draait, is net iets ingewikkelder dan voor de meeste afsluitknoppen. Het reageert op een lange lage puls op de GPIO-pin door een shutdown te initiëren, maar het reageert ook op een korte puls door zelf de GPIO-pin even laag te trekken. Dit is hoe de ATtiny85 kan zien dat hij draait en dus van de BOOTING-status naar de RUNNING-status kan gaan.

Stap 3: Een demo-prototype bouwen

Een demo-prototype bouwen
Een demo-prototype bouwen
Een demo-prototype bouwen
Een demo-prototype bouwen
Een demo-prototype bouwen
Een demo-prototype bouwen

Voor demonstratiedoeleinden kun je een prototype maken op een soldeerloze breadboard zoals afgebeeld, maar ik heb je ook het schema gegeven, zodat je je eigen lay-out kunt uitwerken met stripboard of een aangepaste PCB, misschien onderdeel van een breder project.

Stap 4: Programmeren van de ATtiny85

De Arduino-schets en het hulpprogramma zijn aan deze stap gekoppeld. Maak in je Arduino-schetsmap een map met de naam PiPwr en kopieer het bestand PiPwr.ino erin. Als u de Arduino IDE start, vindt u deze nu in uw schetsboek.

Er zijn verschillende manieren om een ATtiny85 te programmeren. Als die van jou een bootloader heeft geïnstalleerd, kun je een ATTiny85-ontwikkelbord gebruiken dat slechts een paar pond kost. Deze wordt via een USB-poort op uw pc aangesloten. Ik gebruikte een Hidiot die in wezen hetzelfde is, maar met een prototyping-gebied.

Voeg in de Arduino IDE onder Bestand - Voorkeuren

digistump.com/package_digistump_index.json

naar de URL's van de extra bordenbeheerder.

Onder Tools - Board ziet u nu een aantal Digispark-opties. Selecteer Digispark (standaard - 16,5 MHz).

Als je ATTiny85 geen bootloader heeft (of je weet het niet), dan kun je voor een paar euro een AVR ISP-programmeur krijgen. Of je kunt een Arduino Uno of goedkopere Pro Mini of Nano gebruiken als programmeur. Google voor "arduino as isp attiny85" (zonder de aanhalingstekens) voor instructies.

Als u de schets wilt wijzigen, vindt u deze volledig becommentarieerd en hopelijk gemakkelijk te volgen. Voor het debuggen is het veel gemakkelijker om een Arduino Pro Mini of Nano te gebruiken. Verwijder de opmerkingen bij serial.begin() in Setup en de printinstructies in loop() om de stappen te zien die het doorloopt met behulp van de seriële monitor. Er zijn alternatieve pin-definities in de bron, becommentarieerd, voor een Uno, Pro Mini of Nano.

Kopieer op je Raspberry Pi het bestand shutdown_helper.py naar de map /etc/local/bin en stel het in als uitvoerbaar met de opdracht

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

Bewerk nu het bestand /etc/rc.local met je favoriete editor. (Je moet dit doen als root.) Voor de laatste regel (exit 0) voeg je de regel in

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

Start opnieuw op en het hulpprogramma start automatisch.

Aanbevolen: