/ ambilight / Comments

[LEDPiZero] Pi Zero W

Dies ist Teil 4 meiner kleinen Serie über den LEDPiZero.


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.

ledpizerow

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.

Tagged in: ambilight | raspberry pi | ledpizero | raspberry pi zero | hyperion | pi zero w