- Circuit et code modifié le 1er Décembre 2019, pour compatibilité avec le RPi Zero.
Comme je l'évoquais, je ne compte pas utiliser la version précédente du montage « power on/off » pour mon « Pi Hat », car le relais prendrait trop de place, j'ai donc travaillé sur cette nouvelle version à base d'un microcontrôleur Attiny85.
- Voici donc le schéma de ce nouveau montage :
- Et il faut s'assurer que le port série (TXD0, RXD0) soit bien actif, soit via « sudo raspi-config » ou en passant à 1 la ligne « enable_uart » du fichier « /boot/config.txt ».
- Fonctionnement :
- Pour mettre en route le RPi, effectuer une pression sur SW1, la sortie PB0 de l'ATtiny85 est alors mise à l'état haut pour permettre, via le transistor 2N2222 qui envoie un état bas au transistor MOSFET, de faire passer le 5V au RPi.
Ici, comme pour le montage précédent, le signal TXD0 est exploité pour connaître l'état du RPi au moment où le bouton est pressé (état bas, car RPi éteint) .
- Pour éteindre le RPi, presser normalement le bouton SW1, ce qui enverra le signal à la sortie PB1 de passer brièvement à l'état haut, pour déclencher un arrêt propre de GNU/Linux via le GPIO21 du RPi, grâce au script Python3 ci-dessous.
Le pont diviseur que forment R11 et R12 permet de ne n'envoyer que 3,2V au GPIO, car rappelez-vous bien que le RPi fonctionne en 3,3V !!
- Une fois arrêté de cette manière, le signal TXD0 passe donc à l'état bas, l'état du GPIO ayant été mémorisé, un délai est octroyé pour couper l'énergie et donc 3 secondes après la dernière activité de la led verte du RPi, la sortie PB0 passe à l'état bas, le transistor MOSFET ne laisse plus passer le 5V au RPi.
- Presser le bouton SW1 plus de 3 secondes et le courant sera coupé brutalement, utile en cas de plantage du RPi
- Ce montage gère le reboot. Par contre si on utilise un sudo poweroff sur le RPi, le courant ne sera pas coupé automatiquement comme avec le relay du montage précédent. Il faudra alors presser SW1 plus de 3 secondes.