Taula de continguts:

Construeix un millor botó d’engegada de Raspberry Pi: 4 passos
Construeix un millor botó d’engegada de Raspberry Pi: 4 passos

Vídeo: Construeix un millor botó d’engegada de Raspberry Pi: 4 passos

Vídeo: Construeix un millor botó d’engegada de Raspberry Pi: 4 passos
Vídeo: Беслан. Помни / Beslan. Remember (english & español subs) 2024, De novembre
Anonim
Image
Image

És molt fàcil crear un botó d’apagat o apagat del gerd. Hi ha un munt de projectes d’aquest tipus al web i alguns aquí a Instructables, però cap d’ells (que puc veure) no us indica quan el vostre Pi ha acabat d’apagar-se i, per tant, és segur tirar d’energia. De fet, ni tan sols reconeixen que s'hagi vist el botó premut.

També hi ha projectes per reiniciar un Pi que s'ha tancat, però tampoc no us proporcionen retroalimentació visual.

Però qui necessita aquest botó? Si sou una mica un nerd com jo, o fins i tot només un aspirant a un nerd, sempre podeu iniciar sessió al vostre Pi localment o per la xarxa i escriure sudo shutdown -h ara. Però si esteu construint un projecte per a usuaris no tècnics, això no ho farà. És cert que gairebé sempre es pot sortir amb només estirar el cable d'alimentació, però tingueu en compte que he dit gairebé sempre. Tota la sort s’acaba tard o d’hora. Només la setmana passada em vaig morir una targeta SD, tot i que mai no sabré si realment es va deure a una pèrdua brusca d’energia.

En el meu cas, calia afegir un botó d’engegada a un Pi que utilitzem com a seqüenciador midi per gravar i reproduir himnes i cançons a l’església, quan no tinguem disponible un pianista en directe. Sempre puc escriure l'ordre shutdown, però he de deshabilitar-la per quan no hi sigui.

La meva intenció aquí no és oferir-vos un producte acabat, amb una funda impresa en 3D, com tantes altres instruccions. Tothom en tindrà un ús diferent o voldrà incorporar-lo al seu propi projecte. Més aviat, us configuraré amb la tecnologia que podeu afegir al vostre projecte, ja sigui un centre multimèdia, un dispositiu IoT o qualsevol altra cosa.

(Al vídeo ho demostro amb un Pi Zero v1.2 i un monitor que he fet amb una pantalla de portàtil reutilitzada i un controlador de l'Extrem Orient.)

Pas 1: el disseny

Com funciona
Com funciona

Això és el que farà el meu botó d'engegada per vosaltres:

  • Quan el Pi funciona, s’encén un LED de forma contínua. Si s'apaga manualment, el LED només s'apaga quan es desconnecta el corrent de seguretat.
  • Mentre s’executa, si premeu el botó durant almenys un segon, s’iniciarà l’aturada i el LED parpellejarà un quart de segon cada segon fins que desconnecteu l’alimentació de manera segura.
  • Des d'un estat d'apagat (si no s'ha tret l'alimentació), en prémer el botó s'inicia l'arrencada i s'encén el LED durant un quart de segon cada segon fins que s'engega. (Pot trigar una mica més a executar-se tots els serveis com ssh i vnc).

Els components són molt econòmics. Tot el que necessites és:

  • ATTiny85 (xip compatible amb Arduino)
  • 3 resistències: 2 x 330Ω i 1 x 10kΩ
  • 1 LED: us suggereixo verd o blau, però és la vostra elecció
  • taulers de connexió i cables de pont, o taulers, o com vulgueu construir.

Pas 2: Com funciona

Com passa amb tots els botons d’alimentació Pi, aquest treu un pin GPIO a un estat baix per indicar una sol·licitud d’aturada a un programa auxiliar que s’executa al Pi. He utilitzat GPIO4 (pin 7), però es pot utilitzar qualsevol altre pin.

L’única manera de dir que un Pi ha finalitzat l’aturada és mirant el pin 8 de TxD, que després baixa. Això depèn de la habilitació de la consola sèrie, que és per defecte. De fet, TxD pujarà i baixarà regularment mentre s’utilitza com a consola sèrie, però mai baixarà durant més de 30 mS alhora, fins i tot a la velocitat de transmissió més baixa. Encara es pot utilitzar per a una consola de sèrie, ja que només la mirem passivament.

Per reiniciar, hem d’estirar breument SCL1 (pin 5) cap avall. Aquest pin l’utilitzen qualsevol dispositiu I2C (inclosa la meva interfície midi), però després d’iniciar l’arrencada el deixem en pau.

La major part de la complexitat es troba a l’esbós d’Arduino que carreguem a l’ATTiny85. Això implementa una "màquina d'estats": una manera molt útil i potent de codificar qualsevol problema que pugui representar una sèrie d'estats. Una rentadora funciona de la mateixa manera. Els estats representen les etapes del cicle de rentat i cadascun defineix què ha de fer la màquina en aquest punt (motors o bombes que s’han d’executar, vàlvules que s’han d’obrir o tancar) i quines entrades del sensor (temperatura, nivell d’aigua, temporitzadors) determinar quan passar al següent estat i quin estat següent triar.

L’esbós manual és el meu primer esborrany d’un diagrama d’estats, que mostra totes les transicions d’estat. Això és només per mostrar-vos com podeu planificar inicialment els vostres estats i transicions d’estats; pot ser que no sigui completament precís com abans de començar la depuració.

En el nostre cas, tenim 6 estats que he anomenat OFF, SOL·LICITUD D'INICI, ARRANC, RUNNING, SOL·LICITUD D'APAGAMENT i APAGADA. (Després d’APAGAR es torna a DESACTIVAR.) S’identifiquen mitjançant comentaris a l’esbós i, per a cadascun d’ells, altres comentaris indiquen què hauria de fer i quins esdeveniments el mouran a un altre estat.

El programa d’ajuda que s’executa al Pi és una mica més complicat que per a la majoria de botons d’aturada. Respon a un pols baix llarg al pin GPIO iniciant un apagat, però també respon a un impuls curt per si mateix estirant breument el pin GPIO cap avall. Així és com l'ATTiny85 pot dir que s'està executant i, per tant, pot passar de l'estat BOOTING a RUNNING.

Pas 3: crear un prototip de demostració

Construint un prototip de demostració
Construint un prototip de demostració
Construint un prototip de demostració
Construint un prototip de demostració
Construint un prototip de demostració
Construint un prototip de demostració

A efectes de demostració, podeu prototipar-lo en una placa de soldadura sense soldadura, tal com es mostra, però també us he donat l’esquema perquè pugueu elaborar el vostre propi disseny mitjançant un tauler de fusta o un PCB personalitzat, potser formant part d’un projecte més ampli.

Pas 4: programació de l'ATTiny85

A aquest pas s’adjunten l’esbós d’Arduino i el programa d’ajuda. A la carpeta de croquis Arduino, creeu una carpeta anomenada PiPwr i copieu-hi el fitxer PiPwr.ino. Llançant l'IDE Arduino, ara el trobareu al vostre quadern de dibuixos.

Hi ha diverses maneres de programar un ATTiny85. Si el vostre té un carregador d’arrencada instal·lat, podeu utilitzar una placa de desenvolupament ATTiny85 que costa només unes quantes lliures. Es connecta al vostre PC mitjançant un port USB. He utilitzat un Hidiot que és essencialment el mateix però amb una àrea de prototipatge.

Afegiu el fitxer IDE a Arduino, a Fitxer - Preferències

digistump.com/package_digistump_index.json

als URL del gestor de taulers addicionals.

A Eines - Tauler, ara hauríeu de veure diverses opcions de Digispark. Seleccioneu Digispark (per defecte: 16,5 MHz).

Si el vostre ATTiny85 no té un carregador d’arrencada (o no ho sabeu), podeu obtenir un programador ISP AVR per unes quantes lliures. O podeu utilitzar un Arduino Uno o Pro Mini o Nano més barat com a programador. Google per a "arduino as isp attiny85" (sense les cometes) per obtenir instruccions.

Si voleu modificar l’esbós, el trobareu completament comentat i esperem que sigui fàcil de seguir. Per a la depuració és molt més fàcil utilitzar un Arduino Pro Mini o Nano. Descomenteu el serial.begin () a la configuració i les instruccions d’impressió a loop () per veure els passos que realitza mitjançant el monitor sèrie. Hi ha definicions alternatives de pins a la font, comentades, per a Uno, Pro Mini o Nano.

Al vostre Raspberry Pi, copieu el fitxer shutdown_helper.py a la carpeta / etc / local / bin i configureu-lo com a executable amb l'ordre

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

Ara editeu el fitxer /etc/rc.local amb el vostre editor favorit. (Haureu de fer-ho com a root). Abans de l'última línia (sortida 0), inseriu la línia

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

Reinicieu i el programa d'assistència s'iniciarà automàticament.

Recomanat: