1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
|
#!/usr/bin/python3
import time
import board
import busio
import adafruit_character_lcd.character_lcd_i2c as character_lcd
from datetime import datetime
import subprocess
i2c = busio.I2C(board.SCL, board.SDA)
lcd = character_lcd.Character_LCD_I2C(i2c, 20, 4)
lcd.backlight = True
#lcd.message = "Hello there welcom\nCircuitPython\nwho knows if \nthis is too bright"
customchars=[
bytes([0x01, 0x07, 0x0F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F]), # char 0: top left triangle
bytes([0x00, 0x00, 0x00, 0x00, 0x1F, 0x1F, 0x1F, 0x1F]), # char 1: bottom block
bytes([0x10, 0x1C, 0x1E, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F]), # char 2: top right triangle
bytes([0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x0F, 0x07, 0x01]), # char 3: bottom left triangle
bytes([0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1E, 0x1C, 0x10]), # char 4: bottom right triangle
bytes([0x1F, 0x1F, 0x1F, 0x1F, 0x00, 0x00, 0x00, 0x00]), # char 5: upper block
bytes([0x1F, 0x1F, 0x1E, 0x1C, 0x18, 0x18, 0x10, 0x10]), # char 6: full bottom right triangle
bytes([0x01, 0x07, 0x0F, 0x1F, 0x00, 0x00, 0x00, 0x00]) # char 7: top left triangle
]
for ch in range(8):
lcd.create_char(ch, customchars[ch])
mess=""
for ch in range(8):
mess+=chr(ch)
lcd.message=mess
bn4 = [ # 4-line numbers
# 0 1 2 3 4 5 6 7 8 9
["\x00\x05\x02","\x07\xFF\xFE","\x07\x05\x02","\x07\x05\x02","\xff\xFE\xff","\xff\x05\x05","\x00\x05\x02","\x05\x05\xff","\x00\x05\x02","\x00\x05\x02"],
["\xFF\xFE\xFF","\xFE\xFF\xFE","\xfe\x2f\x06","\xFE\x01\x04","\xff\x01\xFF","\xFf\x01\xa4","\xFF\xFE\xFE","\xFE\x2f\x06","\x03\x01\x04","\x03\x01\xff"],
["\xFF\xFE\xFF","\xFE\xFF\xFE","\x2F\x06\xFE","\xFE\xfe\x02","\xfe\xfe\xFF","\xfe\xfe\xff","\xFF\x05\x02","\xFE\xff\xfe","\x00\xfe\x02","\xfe\xfe\xFF"],
["\x03\x01\x04","\xFE\xFF\xFE","\xff\x01\x01","\x03\x01\x04","\xfe\xFE\xFF","\x03\x01\x04","\x03\x01\x04","\xfe\xff\xFe","\x03\x01\x04","\x03\x01\x04"],
]
def printNum4(digit, leftAdjust):
for row in range(4):
lcd.cursor_position(leftAdjust,row);
lcd.message=bn4[row][digit]
def printShort1(clear=False ):
for row in range(4):
lcd.cursor_position(0,row);
if (clear):
lcd.message="\xfe\xfe"
else:
lcd.message=bn4[row][1][0:2]
def printColon(leftAdjust):
clearCollumn(leftAdjust)
lcd.cursor_position(leftAdjust,1)
lcd.message="\xa5"
lcd.cursor_position(leftAdjust,2)
lcd.message="\xa5"
def clearCollumn(col=6):
for row in range(4):
lcd.cursor_position(col,row)
lcd.message="\xfe"
def localTempF():
with open('/var/lib/prometheus/node-exporter/temp.prom', 'r') as f:
for line in f.readlines():
if 'Xhome_temperature_farenheit' in ('X'+line) :
return('%.2fF' % (float(line.split(' ')[1],)))
def printTime():
date_string = f'{datetime.now():%I%M%p}'
if (date_string[0] == '1'):
printShort1()
else:
printShort1(clear=True)
clearCollumn(2)
printNum4(int(date_string[1]),3)
printColon(6);
printNum4(int(date_string[2]),7)
clearCollumn(10)
printNum4(int(date_string[3]),11)
lcd.cursor_position(14,0)
lcd.message=date_string[-2:]
lcd.cursor_position(15,1)
lcd.message=datetime.now().strftime("%d%b")
lcd.cursor_position(14,2)
lcd.message=localTempF()
if __name__ == '__main__':
while True:
printTime()
time.sleep(5)
|