Rasbpberry Pi 3B+, Pi Camera, USB GPS/Glonass
Archiv > Raspberry 3 B+

Vypínání Raspi se provádí podobně jako u Win (Start/Vypnout) anebo pomocí přílazu "sudo shutdown". Dost zásadní komplikací je však to, že i když Raspi vypneme pomocí příkazu shutdown, stále odebírá z napájení (v mém případě s periferiemi) kolem 250 mA.
Hledal jsem ale zapojení, které by fungovalo tak, že při zapnutí zapalování by se Raspi "nahodil" a při vypnutí zapalování by se řádně vypnul a odpojil od napájení. Vím, že existují řešení, speciální zdroje pro mobilní nasazení PC, stejně tak ale vím, že se dá podobný problém řešit víceméně softwarově.
Jeden ze způsobů, jak Raspi vypnout do stavu Shutdown je dole na obrázku. Nejprve pomocí vodičů přes rezistor s přibližnou hodnotou kolem 10 kiloohmů spojíme +3,3V napájení s pinem GPIO5. GPIO5 pak přes tlačítko připojíme na GND (zem, mínus) PIN39.

Pak si vytvoříme skript, který pojmenujeme třeba "shutdown.py". Skript vytvoříme buď přímo na Raspberry v programu Thonny Python IDE (nebo si tento program nainstalujeme ve Win verzi na PC).
#!/usr/bin/python
# shutdown/reboot Raspberry Pi mittels Taste
import RPi.GPIO as GPIO
import subprocess, time, sys, syslog, os
# GPIO-Port, an dem die Taste gegen GND angeschlossen ist
# GPIO 5, Pin 29 (GND waere daneben auf Pin 30)
PORT = 5
# Schwelle fuer Shutdown (in Sekunden), wird die Taste kuerzer
# gedruckt, erfolgt ein Reboot
T_SHUT = 3
# Entprellzeit fuer die Taste
T_PRELL = 0.05
uid = os.getuid()
if uid > 0:
print ("Programm benoetigt root-Rechte!")
sys.exit(0)
# GPIO initialisieren, BMC-Pinnummer, Pullup-Widerstand
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
GPIO.setup(PORT, GPIO.IN, pull_up_down=GPIO.PUD_UP)
# Zeitdauer des Tastendrucks
duration = 0
# Interrupt-Routine fuer die Taste
def buttonISR(pin):
global duration
if not (GPIO.input(pin)):
# Taste gedrueckt
if duration == 0:
duration = time.time()
else:
# Taste losgelassen
if duration > 0:
elapsed = (time.time() - duration)
duration = 0
if elapsed >= T_SHUT:
syslog.syslog('Shutdown: System halted');
subprocess.call(['shutdown', '-h', 'now'], shell=False)
elif elapsed >= T_PRELL:
syslog.syslog('Shutdown: System rebooted');
subprocess.call(['shutdown', '-r', 'now'], shell=False)
# Interrupt fuer die Taste einschalten
GPIO.add_event_detect(PORT, GPIO.BOTH, callback=buttonISR)
syslog.syslog('Shutdown.py started');
while True:
try:
time.sleep(300)
except KeyboardInterrupt:
syslog.syslog('Shutdown terminated (Keyboard)');
print ("Bye")
sys.exit(0)
zdroj: Hochschule München, FK 04, Prof. Jürgen Plate und die Autoren
Shora uvedený skript tedy uložíme do adresáře /home/pi a spustíme ho příkazem
sudo python shutdown.py
Teď, když skript běží, zmáčkneme krátce tlačítko. Raspberry se zrestartuje (reboot)
Podržíme-li tlačítko déle jak 3 sec., Raspberry se vypne (shutdown).
Raspberry je však stále pod napětím a odebírá proud.
Nastartování Raspi provedeme obnovením napájecího napětí.
Pokud všechno funguje jak má, můžeme nechat skript startovat se systémem. Do terminálu napíšeme příkaz
sudo nano /etc/rc.local
a na konec souboru (avšak před "exit 0") vepíšeme
sudo python /home/pi/shutdown.py &
(& znamená, že skript poběží na pozadí)
Pomocí Ctrl+O a Enter soubor uložíme, pomocí Ctrl+X editor opustíme.
K aktivaci skriptu nedochází při stlačení tlačítka, nýbrž při jeho uvolnění (sestupná hrana signálu)