Aus Raspberry Pi Geek 07/2025

Raspberry Pi als Access Point mit Captive Portal (Seite 3)

Der Raspberry Pi ist ein echter Stromsparer, der alle möglichen Komponenten des Systems bei Nichtgebrauch heruntertaktet. Das gilt auch für die SPI-Schnittstelle. Um das zu verhindern, fügen wir in die Datei /boot/firmware/config.txt am Ende die Zeilen core_freq=500 und core_freq_min=500 ein. Damit die Anpassung greift, starten wir den RasPi neu.

Listing 4

Virtuelles Python-Environment

### SPI-Schnittstelle aktivieren
$ sudo raspi-config nonint do_spi 0
### virtuelles Python Environment
$ python -m venv rgbled
$ source ./rgbled/bin/activate
$ cd rgbled
$ pip install rpi_ws281x

Das Ansteuern des handgefertigten LED-Stripes ist schnell erklärt. Wir erzeugen mit dem Befehl leds = PixelStrip() ein Objekt, das die verketteten LEDs repräsentiert. Die verwendeten Parameter zeigt das Beispielprogramm aus Listing 5. Mit der Methode leds.setPixelColor(i, Color(r, g, b)) können wir beliebige LEDs (i) in der Farbe leuchten lassen, die dem RGB-Code entspricht. Hier gilt es zu beachten, dass einige RGB-LEDs eine andere Farbreihenfolge verwenden, etwa GRB. Für unser Beispielprogramm spielt das keine große Rolle, aber falls Sie beispielsweise eine Ampel bauen möchten, tut es das durchaus.

Nachdem wir für alle LEDs im Stripe eine Farbe gesetzt haben, schicken wir mit der Methode leds.show() die Farbwerte an die realen LEDs. Es ist ein häufiger Fehler, diesen Aufruf zu vergessen; man wundert sich dann, warum nichts geht. Ein Video des fertigen Servers finden Sie bei Youtube [6].

Listing 5

Rainbow-Programm

import time
from rpi_ws281x import PixelStrip, Color
LED_COUNT = 12       # Anzahl der LEDs.
LED_PIN = 10         # GPIO Pin (SPI)
LED_FREQ_HZ = 800000 # Taktrate der LEDs
LED_DMA = 10         # DMA-Kanal
LED_BRIGHTNESS = 64  # Helligkeit (0-255)
LED_INVERT = False   # Signal invertieren
LED_CHANNEL = 0      # PWM-Kanal (nicht ändern)
leds = PixelStrip(LED_COUNT, LED_PIN, LED_FREQ_HZ, LED_DMA, LED_INVERT, LED_BRIGHTNESS, LED_CHANNEL)
leds.begin()
def wheel(pos):
  if pos < 0 or pos > 255:
    return (0, 0, 0)
  if pos < 85:
    return (255 - pos * 3, pos * 3, 0)
  if pos < 170:
    pos -= 85
    return (0, 255 - pos * 3, pos * 3)
  pos -= 170
  return (pos * 3, 0, 255 - pos * 3)
while True:
  for j in range (255):
    for i in range (LED_COUNT):
      r,b,g = wheel(((i*256 // LED_COUNT) + j) & 255)
      leds.setPixelColor(i, Color(r, g, b))
    leds.show()
    time.sleep(0.003)

Fazit

Dieses Projekt hat beim Autor einige graue Haare wachsen lassen. Das liegt zum einen an der etwas ungewöhnlichen Funktionsweise des relativ neuen NetworkManagers und zum anderen an den vielen veralteten Informationen im Internet. Sie basieren weitgehend noch auf dem traditionellen Netzwerkmanagement des Raspberry Pi. Aber auch die etwas unklare Lage auf dem Hardwaremarkt führte zu einigen Bestellungen und auch Rücksendungen. Am Ende hat dann alles wie gewünscht funktioniert. (tle)

Der Autor

Martin Mohr hat die komplette Entwicklung der modernen Computertechnik live miterlebt. Nach dem Studium entwickelte er überwiegend Java-Applikationen. Mit dem Raspberry Pi erwachte seine alte Liebe zur Elektronik wieder.

Glossar

Captive Portal

Eine spezielle Webseite, die automatisch erscheint, wenn Sie sich mit einem öffentlichen WLAN-Netzwerk verbinden, beispielsweise im Hotel oder Flughafen.

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 5 HeftseitenPreis €0,99
(inkl. 19% MwSt.)
RASPBERRY PI GEEK KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS Raspberry Pi Geek bei Google Play Readly Logo
Nach oben