Sommario:

Costruisci un pulsante di accensione Raspberry Pi migliore: 4 passaggi
Costruisci un pulsante di accensione Raspberry Pi migliore: 4 passaggi

Video: Costruisci un pulsante di accensione Raspberry Pi migliore: 4 passaggi

Video: Costruisci un pulsante di accensione Raspberry Pi migliore: 4 passaggi
Video: Raspberry Portatile fai da te - Prima Parte - Con Raspberry Pi4 8GB 2024, Dicembre
Anonim
Image
Image

È molto facile creare un pulsante di spegnimento o di spegnimento del Raspberry. Ci sono molti di questi progetti sul web e alcuni qui su Instructables, ma nessuno di loro (che posso vedere) ti dice quando il tuo Pi ha effettivamente finito di spegnersi e quindi è sicuro togliere il potere. In realtà non riconoscono nemmeno che la pressione del pulsante è stata vista.

Ci sono anche progetti per riavviare un Pi che è stato spento, ma nemmeno questi ti danno alcun feedback visivo.

Ma chi ha bisogno di un tale pulsante? Se sei un po' nerd come me, o anche solo un aspirante nerd, puoi sempre accedere al tuo Pi localmente o in rete e digitare sudo shutdown -h now. Ma se stai costruendo un progetto per utenti non tecnici, non funzionerà. È vero, puoi quasi sempre farla franca semplicemente tirando il cavo di alimentazione, ma nota, ho detto quasi sempre! La fortuna di tutti finisce prima o poi. Ho avuto una scheda SD morta su di me solo la scorsa settimana, anche se non saprò mai se è stato davvero a causa di una brusca perdita di potenza.

Nel mio caso avevo bisogno di aggiungere un pulsante di accensione a un Pi che usiamo come sequencer midi per registrare e riprodurre inni e canzoni in chiesa, per quando non abbiamo a disposizione un pianista dal vivo. Posso sempre digitare il comando di spegnimento, ma ho bisogno di de-qualificarlo per quando non sono presente.

La mia intenzione qui non è di darti un prodotto finito, completo di una splendida custodia stampata in 3D, come tanti altri Instructables. Ognuno ne avrà un uso diverso o vorrà incorporarlo nel proprio progetto. Piuttosto, ti preparerò con la tecnologia che puoi aggiungere al tuo progetto, che si tratti di un media center, un dispositivo IoT o qualsiasi altra cosa.

(Nel video lo sto dimostrando con un Pi Zero v1.2 e un monitor che ho realizzato da uno schermo di laptop riproposto e un controller dall'Estremo Oriente.)

Passaggio 1: il design

Come funziona
Come funziona

Questo è ciò che il mio pulsante di accensione farà per te:

  • Quando il Pi è in funzione, un LED è costantemente acceso. Se viene spento manualmente, il LED si spegne solo quando è possibile scollegare l'alimentazione.
  • Durante l'esecuzione, se si preme il pulsante per almeno un secondo, viene avviato uno spegnimento e il LED lampeggia per un quarto di secondo ogni secondo finché non è possibile scollegare l'alimentazione.
  • Da uno stato di spegnimento (se l'alimentazione non è stata rimossa), premendo il pulsante si avvia l'avvio e il LED lampeggia per un quarto di secondo ogni secondo fino all'avvio. (Potrebbe essere necessario un po' più di tempo prima che tutti i servizi come ssh e vnc siano in esecuzione.)

I componenti sono molto economici. Tutto ciò che serve è:

  • ATTiny85 (chip compatibile con Arduino)
  • 3 resistori: 2 x 330Ω e 1 x 10kΩ
  • 1 LED - Suggerisco verde o blu, ma è la tua scelta
  • breadboard e ponticelli, o stripboard, o comunque tu voglia costruirlo.

Passaggio 2: come funziona

Come con tutti i pulsanti di accensione Pi, questo porta un pin GPIO a uno stato basso per segnalare una richiesta di spegnimento a un programma di supporto in esecuzione sul Pi. Ho usato GPIO4 (pin 7) ma puoi usare qualsiasi altro pin.

L'unico modo per dire che un Pi ha completato lo spegnimento è guardare il pin TxD 8, che poi si abbassa. Ciò dipende dall'abilitazione della console seriale, che è per impostazione predefinita. In effetti TxD andrà regolarmente su e giù mentre viene utilizzato come console seriale, ma non andrà mai in basso per più di circa 30 ms alla volta, anche alla velocità di trasmissione comune più lenta. Può ancora essere utilizzato per una console seriale poiché lo guardiamo solo passivamente.

Per riavviare, dobbiamo abbassare brevemente SCL1 (pin 5). Questo pin è utilizzato da qualsiasi dispositivo I2C (inclusa la mia interfaccia midi), ma dopo aver avviato l'avvio lo lasciamo stare.

La maggior parte della complessità è nello sketch Arduino che carichiamo nell'ATTiny85. Questo implementa una "macchina a stati" - un modo molto utile e potente di codificare qualsiasi problema che può essere rappresentato da un numero di "stati". Una lavatrice funziona allo stesso modo. Gli stati rappresentano le fasi del ciclo di lavaggio, e ognuno definisce cosa deve fare la macchina in quel momento (motori o pompe da far funzionare, valvole da aprire o chiudere) e quali sensori input (temperatura, livello acqua, timer) determinare quando passare allo stato successivo e quale stato successivo scegliere.

Lo schizzo a mano è la mia prima bozza di un diagramma di stato, che mostra tutte le transizioni di stato. Questo è solo per mostrarti come puoi inizialmente pianificare i tuoi stati e le transizioni di stato: potrebbe non essere completamente accurato come lo era prima che iniziassi il debug.

Nel nostro caso, abbiamo 6 stati che ho chiamato OFF, BOOT REQUEST, BOOTING, RUNNING, SHUTDOWN REQUEST e SHUTTING DOWN. (Dopo lo SPEGNIMENTO torna su OFF.) Questi sono identificati da commenti nello schizzo, e per ciascuno, ulteriori commenti dicono cosa dovrebbe fare e quali eventi lo sposteranno in un altro stato.

Il programma di supporto in esecuzione sul Pi è solo un po' più complicato rispetto alla maggior parte dei pulsanti di spegnimento. Risponde a un impulso lungo e basso sul pin GPIO avviando uno spegnimento, ma risponde anche a un impulso breve da solo abbassando brevemente il pin GPIO. Questo è il modo in cui ATTiny85 può dire che è in esecuzione e quindi può passare dallo stato BOOTING allo stato RUNNING.

Passaggio 3: creazione di un prototipo demo

Costruire un prototipo dimostrativo
Costruire un prototipo dimostrativo
Costruire un prototipo dimostrativo
Costruire un prototipo dimostrativo
Costruire un prototipo dimostrativo
Costruire un prototipo dimostrativo

A scopo dimostrativo puoi prototiparlo su una breadboard senza saldatura come mostrato, ma ti ho anche fornito lo schema in modo da poter elaborare il tuo layout utilizzando stripboard o un PCB personalizzato, forse parte di un progetto più ampio.

Passaggio 4: Programmazione di ATTiny85

Lo sketch Arduino e il programma di supporto sono allegati a questo passaggio. Nella cartella degli schizzi di Arduino, crea una cartella chiamata PiPwr e copia il file PiPwr.ino al suo interno. Avviando l'IDE Arduino lo troverai ora nel tuo album da disegno.

Esistono diversi modi per programmare un ATTiny85. Se il tuo ha un bootloader installato puoi usare una scheda di sviluppo ATTiny85 che costa solo poche sterline. Questo si collega al PC tramite una porta USB. Ho usato un Hidiot che è essenzialmente lo stesso ma con un'area di prototipazione.

Nell'IDE di Arduino in File - Preferenze, aggiungi

digistump.com/package_digistump_index.json

agli URL del gestore di schede aggiuntive.

In Strumenti - Scheda ora dovresti vedere una serie di opzioni Digispark. Seleziona Digispark (predefinito - 16,5 MHz).

Se il tuo ATTiny85 non ha un bootloader (o non lo sai), puoi ottenere un programmatore ISP AVR per poche sterline. Oppure puoi usare un Arduino Uno o un Pro Mini o Nano più economico come programmatore. Google per "arduino as isp attiny85" (senza virgolette) per istruzioni.

Se vuoi modificare lo schizzo lo troverai completamente commentato e, si spera, facile da seguire. Per il debug è molto più semplice utilizzare un Arduino Pro Mini o Nano. Decommenta serial.begin() in Setup e le istruzioni print in loop() per vedere i passaggi che esegue utilizzando il monitor seriale. Ci sono definizioni di pin alternative nella fonte, commentate, per Uno, Pro Mini o Nano.

Sul tuo Raspberry Pi, copia il file shutdown_helper.py nella cartella /etc/local/bin e impostalo come eseguibile con il comando

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

Ora modifica il file /etc/rc.local con il tuo editor preferito. (Dovrai farlo come root.) Prima dell'ultima riga (uscita 0) inserisci la riga

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

Riavvia e il programma di supporto si avvierà automaticamente.

Consigliato: