A Python 3 port from MicroPython library for the quad 7-segment LED display modules based on the TM1637 LED driver, implemented on Raspberry Pi. This fork includes an extension for OptoSupply's OSL40391 4x7 Segment Display.
For example, the OptoSupply - 4 Digit Display
Basic usage
import tm1637
# tm = tm1637.TM1637(clk=5, dio=4)
tm = tm1637.TM1637_OSL40391(clk=24, dio=23)
# all LEDS on "88:88"
tm.write([127, 255, 127, 127])
# all LEDS off
tm.write([0, 0, 0, 0])
# show "0123"
tm.write([63, 6, 91, 79])
# show "COOL"
tm.write([0b00111001, 0b00111111, 0b00111111, 0b00111000])
# show "HELP"
tm.show('help')
# display "dEAd", "bEEF"
tm.hex(0xdead)
tm.hex(0xbeef)
# show "12:59"
tm.numbers(12, 59)
# show "-123"
tm.number(-123)
# show temperature '24.5*C'
tm.temperature(24.5)
# show percentage '56.7%'
tm.percent(56.7)
For more detailed examples, see tm1637_test.py
They are called 7-segment displays as there are 7 LEDs for each digit (segment). One byte (7 lower bits) for each segment. The 8th bit (MSB) is for the colon and only on the 2nd segment.
A
---
F | | B *
-G- H (on 2nd segment)
E | | C *
---
D
HGFEDCBA
0b01101101 = 0x6D = 109 = show "5"
Display | Bin | Hex | Dec |
---|---|---|---|
0 | 0b00111111 | 0x3F | 63 |
1 | 0b00000110 | 0x06 | 6 |
2 | 0b01011011 | 0x5B | 91 |
3 | 0b01001111 | 0x4F | 79 |
4 | 0b01100110 | 0x66 | 102 |
5 | 0b01101101 | 0x6D | 109 |
6 | 0b01111101 | 0x7D | 125 |
7 | 0b00000111 | 0x07 | 7 |
8 | 0b01111111 | 0x7F | 127 |
9 | 0b01101111 | 0x6F | 111 |
A | 0b01110111 | 0x77 | 119 |
b | 0b01111100 | 0x7C | 124 |
C | 0b00111001 | 0x39 | 57 |
d | 0b01011110 | 0x5E | 94 |
E | 0b01111001 | 0x79 | 121 |
F | 0b01110001 | 0x71 | 113 |
G | 0b00111101 | 0x3D | 61 |
H | 0b01110110 | 0x76 | 118 |
I | 0b00000110 | 0x06 | 6 |
J | 0b00011110 | 0x1E | 30 |
K | 0b01110110 | 0x76 | 118 |
L | 0b00111000 | 0x38 | 56 |
M | 0b01010101 | 0x55 | 85 |
n | 0b01010100 | 0x54 | 84 |
O | 0b00111111 | 0x3F | 63 |
P | 0b01110011 | 0x73 | 115 |
q | 0b01100111 | 0x67 | 103 |
r | 0b01010000 | 0x50 | 80 |
S | 0b01101101 | 0x6D | 109 |
t | 0b01111000 | 0x78 | 120 |
U | 0b00111110 | 0x3E | 62 |
v | 0b00011100 | 0x1C | 28 |
W | 0b00101010 | 0x2A | 42 |
X | 0b01110110 | 0x76 | 118 |
y | 0b01101110 | 0x6E | 110 |
Z | 0b01011011 | 0x5B | 91 |
blank | 0b00000000 | 0x00 | 0 |
- | 0b01000000 | 0x40 | 64 |
* | 0b01100011 | 0x63 | 99 |
Get or set brightness.
brightness(val=None)
Write one or more segments at a given offset.
write(segments, pos=0)
Convert a single hex digit (0x00-0x0f) to a segment.
encode_digit(digit)
Convert a string to a list of segments.
encode_string(string, colon=False, deg=False)
Convert a single character to a segment.
encode_char(char)
Display a number in hexadecimal format 0000 through FFFF.
hex(val)
Display a number -999 through 9999, right aligned.
number(num, colon=True, deg=False)
Display 2 independent numbers on either side of the (optional) colon, with leading zeros.
numbers(num1, num2, colon=True, deg=False)
Display a temperature -9.9 through 99.9 followed by degrees C.
temperature(num)
Display a percentage 0 through 100 followed by a mimic '%'.
percent(num)
Show a string on the display.
Shorthand for write(encode_string())
.
Limited to first 4 characters.
show(string, colon=False, deg=False)
Display a string on the display, scrolling from the right to left, speed adjustable. String starts off-screen and scrolls until off-screen at 4 FPS by default. If preset is set 0, the string starts on-screen from the left side.
scroll(string, delay=250, preset=4)
Scan a pressed key. This method returns a pressed key code, if pressed, otherwise, returns 0.
scan_key()
- OptoSupply 4 Digit Display $2 USD x 1
- HiLetgo I2C Logic Level Converter $0.75 USD x 1
- Blue LED x 1
- Akizuki BME280 Module $10 USD x 1
- Push Switch x 1
- R 10kOhm x 2
- C 100pF x 2
- C 0.1uF x 1
Raspberry Pi | 4 Digit Display |
---|---|
GPIO24 | CLK |
GPIO23 | DIO |
5V (or 3V3) | VCC |
GND | GND |
: | : |
: | : |
See docs/clock-schematic.png for more details.
Licensed under the MIT License.