Innehållsförteckning:

Bygg en bättre Raspberry Pi -strömknapp: 4 steg
Bygg en bättre Raspberry Pi -strömknapp: 4 steg

Video: Bygg en bättre Raspberry Pi -strömknapp: 4 steg

Video: Bygg en bättre Raspberry Pi -strömknapp: 4 steg
Video: Kjell-TV - Bygg en 3D-skrivarserver (Hur funkar det?) 2024, November
Anonim
Image
Image

Det är väldigt enkelt att göra en hallon-avstängnings- eller avstängningsknapp. Det finns massor av sådana projekt på webben och några här på Instructables, men ingen av dem (som jag kan se) berättar när din Pi faktiskt har stängt av och därför är det säkert att dra strömmen. Faktum är att de inte ens erkänner att knapptrycket har setts.

Det finns också projekt för att starta om en Pi som har stängts av, men inte heller ger dessa dig någon visuell feedback.

Men vem behöver en sådan knapp? Om du är lite av en nörd som jag, eller till och med bara en blivande nörd, kan du alltid logga in på din Pi lokalt eller över nätverket och skriva sudo shutdown -h nu. Men om du bygger ett projekt för icke-tekniska användare, kommer det bara inte att göra. Det är sant att du nästan alltid kan komma undan med att bara dra i nätsladden, men notera, jag sa nästan alltid! Allas tur tar slut förr eller senare. Jag fick bara ett SD -kort att dö på mig förra veckan, men jag vet aldrig om det verkligen berodde på en plötslig strömförlust.

I mitt fall behövde jag lägga till en strömknapp till en Pi som vi använder som en midi -sequencer för inspelning och uppspelning av psalmer och sånger i kyrkan, för när vi inte har en levande pianist tillgänglig. Jag kan alltid skriva avstängningskommandot men jag måste färdiga det för när jag inte är där.

Min avsikt här är inte att ge dig en färdig produkt, komplett med vackert 3D -tryckt fodral, som så många andra instruktioner. Alla kommer att ha en annan användning för det eller vill införliva i sitt eget projekt. Jag ställer dig istället med den teknik som du kan lägga till i ditt projekt, oavsett om det är ett mediecenter, en IoT -enhet eller något annat.

(I videon demonstrerar jag det med en Pi Zero v1.2 och en bildskärm jag gjorde från en återanvänd bärbar datorskärm och en styrenhet från Fjärran Östern.)

Steg 1: Designen

Hur det fungerar
Hur det fungerar

Detta är vad min strömbrytare kommer att göra för dig:

  • När Pi körs tänds en lysdiod kontinuerligt. Om den stängs av manuellt slocknar lysdioden endast när det är säkert att dra ur strömmen.
  • Under körning, om du trycker på knappen i minst en sekund påbörjas en avstängning och lysdioden blinkar i en kvart sekund varje sekund tills det är säkert att dra ur strömmen.
  • Från ett avstängningstillstånd (om strömmen inte har tagits bort) startar den genom att trycka på knappen och blinkar lysdioden i en kvarts sekund varje sekund tills den startas. (Det kan ta lite längre tid tills alla tjänster som ssh och vnc körs.)

Komponenterna är väldigt billiga. Allt du behöver är:

  • ATTiny85 (Arduino-kompatibelt chip)
  • 3 motstånd: 2 x 330Ω och 1 x 10kΩ
  • 1 LED - jag föreslår grönt eller blått, men det är ditt val
  • brödbräda och bygeltrådar, eller bandbräda, eller hur du än vill bygga den.

Steg 2: Hur det fungerar

Som med alla Pi -strömknappar drar den här en GPIO -stift till ett lågt tillstånd för att signalera en avstängningsbegäran till ett hjälpprogram som körs på Pi. Jag använde GPIO4 (pin 7) men du kan använda vilken annan pin som helst.

Det enda sättet att berätta att en Pi har avslutat avstängningen är genom att titta på TxD pin 8, som sedan blir låg. Detta beror på att seriekonsolen är aktiverad, vilket den är som standard. Faktum är att TxD regelbundet kommer att gå upp och ner medan den används som en seriekonsol, men den kommer aldrig att gå lågt i mer än cirka 30 ms åt gången, även vid den långsammaste vanliga överföringshastigheten. Den kan fortfarande användas för en seriekonsol eftersom vi bara passivt tittar på den.

För att starta om måste vi dra SCL1 (stift 5) kort. Den här nålen används av alla I2C -enheter (inklusive mitt midi -gränssnitt), men efter att ha startat starten låter vi den vara ifred.

Det mesta av komplexiteten finns i Arduino -skissen som vi laddar in i ATTiny85. Detta implementerar en "tillståndsmaskin" - ett mycket användbart och kraftfullt sätt att koda alla problem som kan representeras av ett antal "tillstånd". En tvättmaskin fungerar på samma sätt. Tillstånden representerar stegen i tvättcykeln, och var och en definierar vad maskinen ska göra vid den tidpunkten (motorer eller pumpar som ska köras, ventiler som ska öppnas eller stängas) och vilka sensoringångar (temperatur, vattennivå, timers) bestämma när du ska flytta till nästa tillstånd och vilket nästa tillstånd du ska välja.

Handskissen är mitt första utkast till ett tillståndsdiagram som visar alla tillståndsövergångar. Detta är bara för att visa dig hur du initialt kan planera dina tillstånd och tillståndsövergångar - det kanske inte är helt korrekt som det var innan jag började felsöka.

I vårt fall har vi 6 tillstånd som jag har ringt AV, BOOT -BEGÄRAN, BOOTING, RUNNING, SHUTDOWN -begäran och STÄNGNING NER. (Efter STÄNGNING går det tillbaka till AV.) Dessa identifieras av kommentarer i skissen, och för varje säger ytterligare kommentarer vad det ska göra och vilka händelser som kommer att flytta det till ett annat tillstånd.

Hjälparprogrammet som körs på Pi är bara lite mer komplicerat än för de flesta avstängningsknappar. Den reagerar på en lång låg puls på GPIO -stiftet genom att initiera en avstängning, men den svarar också på en kort puls genom att kort därefter dra GPIO -stiftet lågt. Så här kan ATTiny85 se att den körs och kan flytta från BOOTING till RUNNING -tillståndet.

Steg 3: Skapa en demonstrationsprototyp

Bygga en demonstrationsprototyp
Bygga en demonstrationsprototyp
Bygga en demonstrationsprototyp
Bygga en demonstrationsprototyp
Bygga en demonstrationsprototyp
Bygga en demonstrationsprototyp

För demonstrationsändamål kan du prototypera den på en lödlös brödbräda som visas men jag har också gett dig schemat så att du kan räkna ut din egen layout med stripboard eller en anpassad PCB, kanske en del av ett större projekt.

Steg 4: Programmering av ATTiny85

Arduino -skissen och hjälparprogrammet bifogas detta steg. Skapa en mapp som heter PiPwr i din Arduino sketches -mapp och kopiera filen PiPwr.ino till den. När du lanserar Arduino IDE hittar du den nu i din skissbok.

Det finns flera sätt att programmera en ATTiny85. Om din har en bootloader installerad kan du använda ett ATTiny85 -utvecklingsbräda som kostar bara några få pund. Detta ansluter till din dator via en USB -port. Jag använde en Hidiot som är i huvudsak densamma men med ett prototypområde.

Lägg till i Arduino IDE under File - Preferences

digistump.com/package_digistump_index.json

till URL: erna för ytterligare styrelsehanterare.

Under Tools - Board bör du nu se ett antal Digispark -alternativ. Välj Digispark (standard - 16,5 MHz).

Om din ATTiny85 inte har en bootloader (eller du inte vet) kan du skaffa en AVR ISP -programmerare för några kilo. Eller så kan du använda en Arduino Uno eller billigare Pro Mini eller Nano som programmerare. Google för "arduino as isp attiny85" (utan citattecken) för instruktioner.

Om du vill ändra skissen hittar du den fullständigt kommenterad och förhoppningsvis lätt att följa. För felsökning är det mycket lättare att använda en Arduino Pro Mini eller Nano. Ta bort kommentaren om serial.begin () i Setup och utskriftsuttalandena i loop () för att se stegen som den går igenom med hjälp av den seriella bildskärmen. Det finns alternativa pin -definitioner i källan, kommenterade, för en Uno, Pro Mini eller Nano.

Kopiera filen shutdown_helper.py till mappen/etc/local/bin på din Raspberry Pi och ställ in den som körbar med kommandot

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

Redigera nu filen /etc/rc.local med din favoritredigerare. (Du måste göra det som root.) Innan den sista raden (avsluta 0) sätter du in raden

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

Starta om och hjälpprogrammet startar automatiskt.

Rekommenderad: