4 digits-7 segmenten LED display met TM1637 controller aansturen

Voor slechts enkele euro's kun je op het internet een LED display kopen. Een populaire LED display is de 4 digits met 7 segmenten aansturing, deze is vooral bekend van de wekkerradio's. Deze LED displays worden vaak verkocht inclusief een TM1637 controller, die je heel eenvoudig kunt aansturen met een Raspberry Pi.

In dit stappenplan sluiten we een LED display met TM1637 controller aan op een Raspberry Pi en laten we als demo de actuele tijd weergeven. Je kunt het display natuurlijk ook gebruiken voor andere doeleinden zoals bijvoorbeeld de temperatuur of processor belasting weer te geven.

Componenten voor dit project

De gebruikte componenten voor dit stappenplan, klik op een component voor meer informatie.

4 Digit 7 segment LED display met TM1637 backpack
4 xDupont verbindingskabel (female/female)

Aansluitschema Raspberry Pi

Sluit de LED aan op je Raspberry Pi volgens onderstaand schema:

TM1637 Board Pin Functie RPI Pin Raspberry Functie
GND Ground 14 GND
VCC +5V Power 4 5V
DI0 Data In 18 GPIO 24
CLK Clock 16 GPIO 23

Raspberry Pi GPIO Layout

TM1637 script

Om de LED aan te kunnen sturen maken we gebruik van een speciaal script met voorgedefinieerde functies. In het script zijn verschillende functies aanwezig, zo kun je onder andere getallen weergeven en de intensiteit van de LEDS aanpassen. Download het script met het commando:

wget https://raspberrytips.nl/files/tm1637.py

Origineel van het script kun je ook hier terugvinden op Github.

Demo klok script

#!/usr/bin/env python
# -*- coding: utf-8 -*-

# https://raspberrytips.nl

import sys
import time
import datetime
import RPi.GPIO as GPIO
import tm1637

#CLK -> GPIO23 (Pin 16)
#Di0 -> GPIO24 (Pin 18)

Display = tm1637.TM1637(23,24,tm1637.BRIGHT_TYPICAL)

Display.Clear()
Display.SetBrightnes(1)

while(True):
   now = datetime.datetime.now()
   hour = now.hour
   minute = now.minute
   second = now.second
   currenttime = [ int(hour / 10), hour % 10, int(minute / 10), minute % 10 ]

   Display.Show(currenttime)
   Display.ShowDoublepoint(second % 2)

   time.sleep(1)

Als demo heb ik een script gemaakt die de huidige tijd weergeeft, kopieer het bovenstaande script of download het direct naar je Raspberry Pi met:

wget https://raspberrytips.nl/files/47digitclock.py

Het klok script heeft het tm1637.py script nodig om te kunnen werken, plaats dus beide bestanden in dezelfde map. Start het klok script met het commando:

python 47digitclock.py

De tijd verschijnt op het LED display en je zult zien dat de ‘:' per seconde aan/uit gaat.

FullSizeRender

Script functies

Het klok script maakt gebruik van de onderstaande functies, gedefinieerd in tm1637.py:

Display.Clear() – Maakt het display legen mochten er nog individuele LEDS actief zijn.

Display.SetBrightnes(x) – Hierna kun je de helderheid van het display aanpassen, minimaal 0 en maximaal 7.

Display.Show(x,x,x,x) – Laat de daadwerkelijke 4 cijfers (digits) zien, x kan 0 t/m 9 zijn.

Display.ShowDoublepoint(status) – Aansturing voor de ‘:' tussen de tweede en derde digit, true(1) = aan / false(0) = uit.

7 gedachten over “4 digits-7 segmenten LED display met TM1637 controller aansturen

  1. Hoe kun je dit programma zelfstandig automatisch opstarten bij aanzetten raspberry zonder monitor en keyboard?

    Verder werkt het heel erg mooi, synchroom met een zendergestuurde klok.

  2. Pingback: TM1637 | Isnochys
  3. Veel dank voor het tm1637 script. Ik ben bezig met een wakeuplight te bouwen en daar hoort ook een LED display bij 🙂

    Soms echter krijg ik een runtime error in regel 124 van tm1637.py:
    Unhandled exception in thread started by
    Traceback (most recent call last):
    File “./threadtest.py”, line 62, in setBrightness
    Display.SetBrightnes(brightnes)
    File “/home/pi/scripts/tm1637.py”, line 82, in SetBrightnes
    self.Show(self.__currentData);
    File “/home/pi/scripts/tm1637.py”, line 61, in Show
    self.start();
    File “/home/pi/scripts/tm1637.py”, line 124, in start
    IO.output( self.__Datapin, HIGH)
    RuntimeError: The GPIO channel has not been set up as an OUTPUT

    Het gevolg is dat het display niet meer wordt aangestuurd en ‘bevriest’. Ik heb een brute poging gedaan door boven de betreffende regel dit commando te plaatsen:
    IO.setup(self.__Datapin,OUTPUT)

    k blijf echter dezelfde foutmelding krijgen. Het lijkt op een race condition, maar mijn programmeerkennis is niet heel erg ontwikkeld mo.et ik toegeven. Als iemand enig idee heb hoor ik het graag.

  4. Hoi de klok werkt prima, nu de volgende uitdaging. De helderheid voluit en een vergrootglas ervoor en projecteren op het plafond. En toen stond het in spiegelschrift… nu de aanpassing in de software om de digits in mirror image te krijgen.
    Een spiegel geeft teveel verlies.

Een reactie plaatsen

Do NOT follow this link or you will be banned from the site!
%d bloggers liken dit: