4-Digit Display esp32 micropython(TM1637)

4-Digit Display довольно таки яркий экран , но не так уж и много информации можно отобразить.


ESP32 > 4-Digit Display

GND > GND

3.3 > VCC

D4 > DIO

D15 >  CLK



main.py    


# tm1637_mpy.py – рабочий драйвер TM1637 + пример
from machine import Pin
from time import sleep_ms
import time

class TM1637:
def __init__(self, clk_pin, dio_pin):
self.clk = Pin(clk_pin, Pin.OUT, value=1)
self.dio = Pin(dio_pin, Pin.OUT, value=1)
# 0-9, '-', ' ', 'A'
self.segmap = [
0b00111111, #0
0b00000110, #1
0b01011011, #2
0b01001111, #3
0b01100110, #4
0b01101101, #5
0b01111101, #6
0b00000111, #7
0b01111111, #8
0b01101111, #9
0b01000000, #'-'
0b00000000, #' '
0b01110111 #'A'
]

def _start(self):
self.dio(1); self.clk(1)
self.dio(0); self.clk(0)

def _stop(self):
self.clk(0); self.dio(0)
self.clk(1); self.dio(1)

def _write_byte(self, b):
for i in range(8):
self.clk(0)
self.dio((b >> i) & 1)
self.clk(1)
self.clk(0)
self.dio.init(Pin.IN) # read ack
self.clk(1)
_ = self.dio()
self.clk(0)
self.dio.init(Pin.OUT)

def show(self, data, colon=False):
# подготавливаем строку к 4 символам без rjust
if isinstance(data, str):
if len(data) < 4:
s = ' ' * (4 - len(data)) + data
else:
s = data[:4]
else:
# если передан список/кортеж цифр
s = list(data)
while len(s) < 4:
s.insert(0, ' ')
s = s[:4]

segs = []
for ch in s:
if isinstance(ch, int):
segs.append(self.segmap[ch] if 0 <= ch < 10 else self.segmap[11])
else:
if ch == '-':
segs.append(self.segmap[10])
elif ch == ' ':
segs.append(self.segmap[11])
elif ch.isdigit():
segs.append(self.segmap[int(ch)])
elif ch.upper() == 'A':
segs.append(self.segmap[12])
else:
segs.append(self.segmap[11])

if colon:
segs[1] |= 0b10000000 # зажигаем двоеточие

# команда записи
self._start()
self._write_byte(0x40)
self._stop()
self._start()
self._write_byte(0xC0)
for b in segs:
self._write_byte(b)
self._stop()
# яркость
self._start()
self._write_byte(0x88 | 7) # 0–7
self._stop()

def set_brightness(self, level):
if level < 0: level = 0
if level > 7: level = 7
self._start()
self._write_byte(0x88 | level)
self._stop()

# ==== пример использования ====
if __name__ == "__main__":
import time
tm = TM1637(clk_pin=15, dio_pin=4) # подставьте свои GPIO

# простой счётчик
for i in range(0, 1000 , 100):
tm.show(str(i)) # выводим число
time.sleep_ms(150)

tm.show("1234", colon=True)
time.sleep(2)
tm.show("-A ")
time.sleep(2)
tm.show("1234", colon=True)
time.sleep(2)
tm.show("1234", colon=False)
time.sleep(2)
tm.show("", colon=True)
time.sleep(2)
tm.show("1111", colon=True)
time.sleep(2)
tm.show("2222", colon=True)
time.sleep(2)



Комментарии

Популярные сообщения из этого блога

Meshtastic ESP32 E22

LORA Upgrade E32 400M30S

Установка micropython на ESP32