Raspberry Pi Pico: 4-fach 7-Segment-Anzeige programmieren (TM1637)
Die Bezeichnung „TM1637“ wird oft für eine 4-fach 7-Segment-Anzeige mit Doppelpunkt verwendet. Diese Anzeige kann zur Darstellung von Ganzzahlen, Uhrzeiten und auch Text verwendet werden. Aufgrund der 4 Stellen sind die Wertebereiche von Zahlen und die Textlänge begrenzt.
Die TM1637-Anzeige wird per I2C angesteuert. Dazu sind insgesamt 4 Pins herausgeführt. Zur softwareseitigen Ansteuerung und Programmierung der 7-Segment-Anzeige ist eine externe Bibliothek für MicroPython erforderlich.
Wir wollen hier ausprobieren, wie wir den TM1637 hardwareseitig und softwareseitig ansteuern, und was wir alles mit dem TM1637 machen können. Dazu experimentieren wir im folgenden Programmcode mit Text, Zahlen und die Uhrzeit.
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
Im Programmcode werden die Bibliotheken geladen und dann die 4-fache 7-Segment-Anzeige TM1637 initialisiert. Anschließend werden verschiedene sinnvolle Möglichkeiten der Darstellung beispielhaft realisiert:
- 7-Segment-Test: "88:88" (alle Segmente leuchten)
- Helligkeit einstellen (von dunkler nach heller)
- Anzeige löschen
- Ganzzahlen anzeigen / Wertebereich: -999 bis 9999
- Darstellung bei Überschreitung des Wertebereichs
- Verschiedene Texte anzeigen (ohne Unterscheidung von Groß- und Kleinschreibung)
- Laufschrift: Hallo Welt
- Aktuelle Uhrzeit
- Temperatur mit der Einheit °C
- Countdown von 9999 bis 0
- Countdown von 01:00 bis 00:00
Damit die Anzeige richtig interpretiert werden kann, wird zusätzlich auf der Kommandozeile angezeigt, was der Wert auf der Anzeige sein soll.
Die Variable „pause“ gibt in Sekunden an, wie lange zwischen den unterschiedlichen Darstellungen gewartet werden soll.
# Bibliotheken laden from machine import Pin, RTC, ADC, Timer import time import tm1637 # Display initialisieren display = tm1637.TM1637(clk=Pin(21), dio=Pin(20)) # Pause zwischen den unterschiedlichen Darstellungen pause = 3 print('7-Segment-Test: "88:88" (alle Segmente leuchten)') display.write([127, 255, 127, 127]) # Pause time.sleep(pause) print('Helligkeit einstellen (von dunkler nach heller)') for i in range (0, 7+1): display.brightness(i) time.sleep(0.5) # Pause time.sleep(pause) print('Anzeige löchen') display.write([0, 0, 0, 0]) # Pause time.sleep(pause) print('Ganzzahlen anzeigen / Wertebereich: -999 bis 9999') display.number(1) time.sleep(1) display.number(12) time.sleep(1) display.number(123) time.sleep(1) display.number(1234) time.sleep(1) print('Überschreitung des Wertebereichs') display.number(12345) time.sleep(2) display.number(-1234) time.sleep(2) display.number(-123) time.sleep(1) display.number(-12) time.sleep(1) display.number(-1) # Pause time.sleep(pause) print('Text anzeigen') display.show('help') time.sleep(2) display.show('cool') time.sleep(2) display.show(' ja') time.sleep(2) display.show('nein') time.sleep(2) display.show(' ') # Pause time.sleep(pause) print('Laufschrift: Hallo Welt') # Default: 4 FPS = 250 display.scroll('Hallo Welt', 250) # Pause time.sleep(pause) # Echtzeituhr im Mikrocontroller initialisieren rtc = RTC() # Datum und Uhrzeit lesen datetime = rtc.datetime() print('Aktuelle Uhrzeit: %02d:%02d' % (datetime[4], datetime[5])) display.numbers(datetime[4], datetime[5]) # Pause time.sleep(pause) # Initialisierung des ADC4 sensor = ADC(4) # Temperatur messen value = sensor.read_u16() temp = int(27 - ( (value * 3.3 / 65535) - 0.706 ) / 0.001721) print('Temperatur: %s°C' % temp) # Wertebereich -9 bis 99 display.temperature(temp) # Pause time.sleep(pause) print('Countdown von 9999 bis 0') for count in range (9999, -1, -1): display.number(count) time.sleep(0.00001) # Pause time.sleep(pause) print('Countdown von 01:00 bis 00:00') counter = 60 points = 1 timeValue = time.localtime(counter) display.numbers(timeValue[4], timeValue[5], points) time.sleep(1) # Funktion: Countdown herunterzählen def countdown(value): global counter global points # Blinkender Doppelpunkt im Wechsel if points == 0: points = 1 else: points = 0 # Countdown reduzieren counter -= 1 # Countdown ist abgelaufen (0 = Ende) if counter == 0: clock.deinit() print('Countdown Ende') # Countdown in Minuten und Sekunden umrechnen und anzeigen timeValue = time.localtime(counter) display.numbers(timeValue[4], timeValue[5], points) # Initialisierung Timer für Countdown clock = Timer(freq=1, mode=Timer.PERIODIC, callback=countdown)
Im Programmcode wurden die wichtigsten Methoden zur Darstellung von Werten beispielhaft verwendet. Es gibt aber noch weitaus mehr, die vielleicht nicht so häufig verwendet werden. Bei der Nutzung des TM1637 sollte man einen Blick in die Dokumentation der hier verwendeten MicroPython-Bibliothek werfen.
Anwendungen
Neben der Anwendung als Status-Anzeige eignet sich die TM1637-Anzeige zur Darstellung von Uhrzeiten und Zeitangaben.
- Raspberry Pi Pico: Digitale Uhr mit Anzeige (TM1637)
- Raspberry Pi Pico: Stoppuhr mit Anzeige (TM1637)
- Raspberry Pi Pico W: WLAN-Stoppuhr mit Anzeige (TM1637)
- Raspberry Pi Pico: Countdown mit Zeitanzeige (TM1637)
- Raspberry Pi Pico W: Anzeige eines TM1637-Displays über WLAN ändern
Weitere verwandte Themen:
- Raspberry Pi Pico: LCD-1602-Display mit I2C-Modul programmieren
- Raspberry Pi Pico: I2C verbinden und testen
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)