Raspberry Pi Pico W: Anzeige eines TM1637-Displays über WLAN ändern
Ein TM1637-Display soll als externe Anzeige verwendet und übers WLAN aus der Ferne gesteuert werden.
Auf einem Raspberry Pi Pico W läuft dazu ein Webserver, der eine Oberfläche für einen Webbrowser zur Verfügung stellt, in der die 4 Stellen des Displays geändert werden können.
Als Anzeige verwenden wir ein TM1637-Display. Dreh- und Angelpunkt der softwareseitigen Ansteuerung des Displays mit einer externen Python-Bibliothek.
Wenn Du noch keine Erfahrung mit einem TM1637-Display gemacht hast, dann empfiehlt es sich, das Display zuerst zu testen und auszuprobieren. Das ist deshalb wichtig, weil ein TM1637-Display nicht alle Zeichen darstellen kann. Zahlen funktionieren problemlos. Doch nicht alle Buchstaben lassen sich zweifelsfrei identifizieren.
Hinweis: Die folgende Webserver-Lösung ist kein vollständiger Webserver. Dafür ist der Programmcode nicht gemacht und auch nicht gedacht. Wer einen vollwertigen Webserver braucht, der sollte einen Mini-Computer, wie den Raspberry Pi mit Raspberry Pi OS, verwenden.
Aufbau und Bauteile
Raspberry Pi Pico | TM1637 | |
---|---|---|
Pin 38 | GND | GND |
Pin 36 | VCC +3,3V | VCC |
Pin 27 | GPIO 21 | CLK |
Pin 26 | GPIO 20 | DIO |
Schnell und einfach alle Bauteile zusammen bestellen
MicroPython-Bibliothek für TM1637
Zur Ansteuerung der 7-Segment-Anzeige TM1637 ist eine externe Bibliothek erforderlich, die heruntergeladen und mit dem Dateinamen „tm1637.py“ auf dem Raspberry Pi Pico gespeichert werden muss.
Programmcode
Der Programmcode ist vergleichsweise umfangreich und dafür auch vollständig und sofort nutzbar. Es gibt nur 2 Parameter, die individuell konfiguriert werden MÜSSEN:
- wlanSSID: Das ist der WLAN-Name, mit dem sich der Raspberry Pi Pico W verbinden soll.
- wlanPW: Das ist das WLAN-Passwort für die Authentifizierung an dem zu verbindenden WLAN.
Das verbundene TM1637-Display wird nach der Inbetriebnahme des Aufbaus auch gleich sinnvoll verwendet. Am Anfang zeigt es für ein paar Sekunden „8888“ an, damit man prüfen kann, ob alle Segmente in Ordnung sind. Danach erfolgt der WLAN-Verbindungsaufbau. Bei erfolgreicher WLAN-Verbindung wird auf dem Display jedes Oktett der IPv4-Adresse des Raspberry Pi Pico W nacheinander angezeigt. Diese Adresse muss in einem Webbrowser an einem PC im selben WLAN eingegeben werden. Damit lässt sich die Bedienoberfläche aufrufen. Die enthält ein Eingabefeld für eine 4 Stellen lange Zeichenfolge, die auf dem Display angezeigt wird. Da sich das Display vielleicht zu weit weg und nicht sichtbar ist, zeigt das Eingabefeld die aktuell dargestellte Zeichenfolge im Display an.
Hinweis: Die Verbindung zum Raspberry Pi Pico W muss ohne HTTPS bzw. TLS erfolgen. Deshalb muss man darauf achten, dass der Webbrowser in der Adresszeile kein „https://„, sondern nur ein „http://„, ohne kleines „s“ verwendet.
# Bibliotheken laden import machine import socket import time import tm1637 # WLAN-Konfiguration wlanSSID = 'WLANNAME' wlanPW = 'WLANPASSWORT' # Display TM1637 initialisieren display = tm1637.TM1637(clk=machine.Pin(21), dio=machine.Pin(20)) value = '8888' display.show(value) time.sleep(3) # HTML-Datei html = """<!doctype html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><link rel="shortcut icon" href="data:"><title>Raspberry Pi Pico W</title></head><body><h1 align="center">Hi, I'am your Raspberry Pi Pico W</h1><hr><form action="/" method="POST"><p align="center"><input type="text" size="4" maxlength="4" name="display" value="DISPLAY"> <input type="submit" value="Absenden"></p></form><hr><p align="center">DEMO von Elektronik-Kompendium.de</p></body></html>""" # Funktion: WLAN-Verbindung def wlanConnect(): import network wlan = network.WLAN(network.STA_IF) network.hostname("PicoW") network.country('DE') if not wlan.isconnected(): print('WLAN-Verbindung herstellen') wlan.config(pm = 0xa11140) wlan.active(True) wlan.connect(wlanSSID, wlanPW) for i in range(10): if wlan.status() < 0 or wlan.status() >= 3: break print('.') time.sleep(1) if wlan.isconnected(): print('WLAN-Verbindung hergestellt') netConfig = wlan.ifconfig() print('IPv4-Adresse:', netConfig[0]) print() oktett = netConfig[0].split('.') for i in range (0, len(oktett)): display.number(int(oktett[i])); time.sleep(2); display.show(' '); time.sleep(1) return netConfig[0] else: print('Keine WLAN-Verbindung') print('WLAN-Status:', wlan.status()) print() display.show('err1') return '' # WLAN-Verbindung herstellen ipv4 = wlanConnect() # HTTP-Server starten if ipv4 != '': print('Server starten') addr = socket.getaddrinfo(ipv4, 80)[0][-1] server = socket.socket() server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) server.bind(addr) server.listen(1) print('Server hört auf', addr) print() print('Beenden mit STRG + C') print() else: display.show('err2') raise IndexError("Keine WLAN-Verbingung. Programm beendet!") # Auf eingehende Verbindungen hören while True: try: conn, addr = server.accept() print('HTTP-Request von Client', addr, 'empfangen') raw_request = conn.recv(1024) request = raw_request.decode() # POST-Request auswerten try: header, body = request.split('\r\n\r\n', 1) except: header = request body = '' # Header auswerten header = header.split() # POST-Variablen auslesen if body != '': fields = body.split('&') POST={} for field in fields: t = field.split('=') if len(t) > 1: k, v = field.split('='); POST[k] = v.replace('+', ' ') #print('Variablen:', POST) # POST-Variablen auswerten value = POST['display'].lower() value = value[0:4] # Display-Zeilen ausgeben display.show(' ') try: display.show(value) except ValueError: value = 'err ' display.show(value) # HTTP-Response erzeugen und senden response = html response = response.replace('DISPLAY', value) conn.send('HTTP/1.0 200 OK\r\nContent-type: text/html\r\n\r\n') conn.send(response) conn.close() print('HTTP-Response gesendet') print() except OSError as e: break except (KeyboardInterrupt): break try: conn.close() except NameError: pass try: server.close() except NameError: pass print('Server beendet')
Normalerweise sollte nach dem Ausführen des Programmcodes der Raspberry Pi Pico W verfügbar sein. Folgende zwei Fehler können auftreten:
- Die Anzeige „Err1“ bedeutet, dass die WLAN-Verbindung nicht hergestellt werden konnte. Bitte WLAN-Name, Passwort und WLAN-Verfügbarkeit prüfen.
- Die Anzeige „Err2“ bedeutet, dass die Server-Funktion nicht gestartet werden konnte. Dann empfiehlt sich ein Neustart des Picos.
Troubleshooting
Fehler: Trotz richtiger IPv4-Adresse schlägt die Verbindung zum Raspberry Pi Pico W fehlt. Das heißt, der Pico W wird nicht gefunden.
Dieses Problem tritt insbesondere dann auf, wenn man Änderungen am Programmcode vornimmt, speichert und den Programmcode neu startet. Es kann sinnvoll sein, auch wenn das aufwendig ist, den Raspberry Pi Pico W auszustecken und erst danach den neuen Programmcode zu starten. Es kann sein, dass im Speicher noch Fragmente in Verbindung mit dem WLAN-Chip die Funktionen des Webservers blockieren.
Darf es etwas mehr sein?
Eigentlich hat dieser Aufbau alles, was einen autarken Betrieb des Raspberry Pi Pico W ausmacht. Wenn der Programmcode fehlerfrei läuft, dann kannst Du ihn auch mit dem Dateinamen „main.py“ speichern. Die Datei wird dann automatisch gestartet. Die Datei wird dann automatisch gestartet, wenn der Raspberry Pi Pico Inbetrieb geht.
Weitere verwandte Themen:
- Raspberry Pi Pico: 4-fach 7-Segment-Anzeige programmieren (TM1637)
- Raspberry Pi Pico: LCD-1602-Display mit I2C-Modul programmieren
- Raspberry Pi Pico: Stoppuhr mit Anzeige (TM1637)
- Raspberry Pi Pico W: WLAN-Stoppuhr mit Anzeige (TM1637)
- Raspberry Pi Pico W als Webserver
Teilen:
Hardware-nahes Programmieren mit dem Raspberry Pi Pico und MicroPython
Das Elektronik-Set Pico Edition ist ein Bauteile-Sortiment mit Anleitung zum Experimentieren und Programmieren mit MicroPython.
- LED: Einschalten, ausschalten, blinken und Helligkeit steuern
- Taster: Entprellen und Zustände anzeigen
- LED mit Taster einschalten und ausschalten
- Ampel- und Lauflicht-Steuerung
- Elektronischer Würfel
- Eigene Steuerungen programmieren
Online-Workshop: Programmieren mit dem Raspberry Pi Pico
Gemeinsam mit anderen und unter Anleitung experimentieren? Wir bieten unterschiedliche Online-Workshops zum Raspberry Pi Pico und MicroPython an. Einführung in die Programmierung, Sensoren programmieren und kalibrieren, sowie Internet of Things und Smart Home über WLAN und MQTT.
Für Ihre Fragen zu unseren Online-Workshops mit dem Raspberry Pi Pico besuchen Sie unseren PicoTalk (Online-Meeting). (Headset empfohlen)