[LEDPiZero] Pi Zero W
Dies ist Teil 4 meiner kleinen Serie über den LEDPiZero.
- Teil 1: Besseres Ambilight? LEDPiZero!
- Teil 2: [LEDPiZero] Eine Platine
- Teil 3: [LEDPiZero] Die Software
- Teil 4: [LEDPiZero] Pi Zero W
Die Veröffentlichung des Raspberry Pi Zero W ermöglichte die Erweiterung bzw. Verschlankung meiner Platine des LEDPiZero. In diesem Zusammenhang war es möglich, dass der USB Hub entfernt werden konnte und stattdessen die interne WLAN-Antenne genutzt wird.
Diese Variante der Platine ist nun in der Lage, dass der Raspberry Pi sowohl über die Plaine, als auch über eine direkte Stromversorgung des Raspberry Pi versorgt wird. Der Grund dafür ist, dass ich gern mein AmPilight gern sofort starten möchte und nicht erst nachdem der Raspberry Pi gestartet ist. Außerdem ermöglicht es, dass der Raspberry nicht abrupt ausgeschaltet wird.
Wird Spannung angelegt, wird zusätzlich der GPIO Pin 29 (BCM 5) mit Spannung versorgt. Darauf reagiert ein Python-Skript und schaltet Hyperion und WLAN an bzw. aus.
#! /usr/bin/env python
# coding: utf8
import os
import subprocess
import time
import RPi.GPIO as GPIO
import lirc
# setup GPIO
GPIO.setmode(GPIO.BCM)
GPIO.setup(25, GPIO.IN)
GPIO.setup(5, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
# init lirc
sockid = lirc.init('ledpizero', blocking=False)
# temporary status variables
hyperionrunning = subprocess.check_output('sudo service hyperion status | grep running | wc -l', shell=True) == 1
wifi = subprocess.check_output('ifconfig wlan0 | grep \'inet Adresse\' | cut -d: -f2 | awk \'{print $1}\'', shell=True) != ''
isOn = None
while True:
# read lirc pressed button
codeIR = lirc.nextcode()
if codeIR:
if codeIR[0] == 'KEY_POWER':
if hyperionrunning:
os.system('sudo service hyperion stop')
hyperionrunning = False
else:
os.system('sudo service hyperion start')
hyperionrunning = True
if codeIR[0] == 'KEY_WLAN':
if wifi:
os.system('sudo ifdown wlan0')
wifi = False
else:
os.system('sudo ifup wlan0')
wifi = True
# read status of power input
gpio = GPIO.input(5)
if gpio and (isOn is None or isOn is False):
isOn = True
if not hyperionrunning:
os.system('sudo service hyperion start')
hyperionrunning = True
if not wifi:
os.system('sudo ifup wlan0')
wifi = True
elif not gpio and (isOn is None or isOn is True):
isOn = False
if hyperionrunning:
os.system('sudo service hyperion stop')
hyperionrunning = False
if wifi:
os.system('sudo ifdown wlan0')
wifi = False
time.sleep(0.05)
GPIO.cleanup()
Die Installation von lirc
habe ich bereits in dem Artikel [LEDPiZero] Die Software beschrieben. Damit dann auch das Skript automatisch beim Systemstart startet, kann einfach über
sudo crontab -e
der Editor für die Cronjobs (geplante Aufgaben) geöffnet werden. Füge dort einfach die Zeile
@reboot python /home/pi/ledpizero.py &
hinzu. Den Namen den Skriptes musst du natürlich an deine Gegebenheiten anpassen.
Für die Platine werden von mir folgende Teile verwendet:
C1 Keramikkondensator 10uF
D1 Zener-Diode
D2 Zener-Diode
FIN Sicherung (optional)
IC1 NAND 74HCT00D
POWER LED rot
R.PI LED grün
R1 Widerstand 2 kOhm
R2 Widerstand 100 kOhm (optional)
R3 Widerstand 2 kOhm
R4 Widerstand 1 kOhm
R5 Widerstand 2 kOhm
SV3 4-Pin-Konnektor
U$1 2-Pin-Anschlussklemme
U$2 IR-Empfänger TSOP4838
X1 Spannungsversorgung
X2 40-Pin-Verbindung
X3 USB-Buchse
Wird die Sicherung FIN
gesetzt (oder eine Brücke gelötet), kann darüber auch der Raspberry Pi mit Strom versorgt werden. Aus oben genannten Gründen lasse ich das bei mir allerdings offen.