树莓派使用Nokia 5110屏幕显示网速温度等

Nokia 5110

长这样

图片

驱动

PCD8544

资料

Google 一搜各种博客都有介绍,毕竟我不是学硬件的,底层什么的就不说了。好玩就行

引脚

  • rst:外部复位引脚
  • ce:显示屏使能引脚
  • dc:数据/命令引脚
  • din:串行数据输入端
  • clk:串行时钟输入端
  • vcc:电源引脚
  • bl: 亮度调节
  • gnd:接地

先看看驱动代码-python

修改自(Adafruit)
这里用的是 BCM 模式

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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
# coding:utf-8
import time
import Adafruit_GPIO as GPIO
import Adafruit_GPIO.SPI as SPI

LCDWIDTH = 84
LCDHEIGHT = 48
ROWPIXELS = LCDHEIGHT//6
PCD8544_POWERDOWN = 0x04
PCD8544_ENTRYMODE = 0x02
PCD8544_EXTENDEDINSTRUCTION = 0x01
PCD8544_DISPLAYBLANK = 0x0
PCD8544_DISPLAYNORMAL = 0x4
PCD8544_DISPLAYALLON = 0x1
PCD8544_DISPLAYINVERTED = 0x5
PCD8544_FUNCTIONSET = 0x20
PCD8544_DISPLAYCONTROL = 0x08
PCD8544_SETYADDR = 0x40
PCD8544_SETXADDR = 0x80
PCD8544_SETTEMP = 0x04
PCD8544_SETBIAS = 0x10
PCD8544_SETVOP = 0x80
FONT = {
' ': [0x00, 0x00, 0x00, 0x00, 0x00],
'!': [0x00, 0x00, 0x5f, 0x00, 0x00],
'"': [0x00, 0x07, 0x00, 0x07, 0x00],
'#': [0x14, 0x7f, 0x14, 0x7f, 0x14],
'$': [0x24, 0x2a, 0x7f, 0x2a, 0x12],
'%': [0x23, 0x13, 0x08, 0x64, 0x62],
'&': [0x36, 0x49, 0x55, 0x22, 0x50],
"'": [0x00, 0x05, 0x03, 0x00, 0x00],
'(': [0x00, 0x1c, 0x22, 0x41, 0x00],
')': [0x00, 0x41, 0x22, 0x1c, 0x00],
'*': [0x14, 0x08, 0x3e, 0x08, 0x14],
'+': [0x08, 0x08, 0x3e, 0x08, 0x08],
',': [0x00, 0x50, 0x30, 0x00, 0x00],
'-': [0x08, 0x08, 0x08, 0x08, 0x08],
'.': [0x00, 0x60, 0x60, 0x00, 0x00],
'/': [0x20, 0x10, 0x08, 0x04, 0x02],
'0': [0x3e, 0x51, 0x49, 0x45, 0x3e],
'1': [0x00, 0x42, 0x7f, 0x40, 0x00],
'2': [0x42, 0x61, 0x51, 0x49, 0x46],
'3': [0x21, 0x41, 0x45, 0x4b, 0x31],
'4': [0x18, 0x14, 0x12, 0x7f, 0x10],
'5': [0x27, 0x45, 0x45, 0x45, 0x39],
'6': [0x3c, 0x4a, 0x49, 0x49, 0x30],
'7': [0x01, 0x71, 0x09, 0x05, 0x03],
'8': [0x36, 0x49, 0x49, 0x49, 0x36],
'9': [0x06, 0x49, 0x49, 0x29, 0x1e],
':': [0x00, 0x36, 0x36, 0x00, 0x00],
';': [0x00, 0x56, 0x36, 0x00, 0x00],
'<': [0x08, 0x14, 0x22, 0x41, 0x00],
'=': [0x14, 0x14, 0x14, 0x14, 0x14],
'>': [0x00, 0x41, 0x22, 0x14, 0x08],
'?': [0x02, 0x01, 0x51, 0x09, 0x06],
'@': [0x32, 0x49, 0x79, 0x41, 0x3e],
'A': [0x7e, 0x11, 0x11, 0x11, 0x7e],
'B': [0x7f, 0x49, 0x49, 0x49, 0x36],
'C': [0x3e, 0x41, 0x41, 0x41, 0x22],
'D': [0x7f, 0x41, 0x41, 0x22, 0x1c],
'E': [0x7f, 0x49, 0x49, 0x49, 0x41],
'F': [0x7f, 0x09, 0x09, 0x09, 0x01],
'G': [0x3e, 0x41, 0x49, 0x49, 0x7a],
'H': [0x7f, 0x08, 0x08, 0x08, 0x7f],
'I': [0x00, 0x41, 0x7f, 0x41, 0x00],
'J': [0x20, 0x40, 0x41, 0x3f, 0x01],
'K': [0x7f, 0x08, 0x14, 0x22, 0x41],
'L': [0x7f, 0x40, 0x40, 0x40, 0x40],
'M': [0x7f, 0x02, 0x0c, 0x02, 0x7f],
'N': [0x7f, 0x04, 0x08, 0x10, 0x7f],
'O': [0x3e, 0x41, 0x41, 0x41, 0x3e],
'P': [0x7f, 0x09, 0x09, 0x09, 0x06],
'Q': [0x3e, 0x41, 0x51, 0x21, 0x5e],
'R': [0x7f, 0x09, 0x19, 0x29, 0x46],
'S': [0x46, 0x49, 0x49, 0x49, 0x31],
'T': [0x01, 0x01, 0x7f, 0x01, 0x01],
'U': [0x3f, 0x40, 0x40, 0x40, 0x3f],
'V': [0x1f, 0x20, 0x40, 0x20, 0x1f],
'W': [0x3f, 0x40, 0x38, 0x40, 0x3f],
'X': [0x63, 0x14, 0x08, 0x14, 0x63],
'Y': [0x07, 0x08, 0x70, 0x08, 0x07],
'Z': [0x61, 0x51, 0x49, 0x45, 0x43],
'[': [0x00, 0x7f, 0x41, 0x41, 0x00],
'\\': [0x02, 0x04, 0x08, 0x10, 0x20],
']': [0x00, 0x41, 0x41, 0x7f, 0x00],
'^': [0x04, 0x02, 0x01, 0x02, 0x04],
'_': [0x40, 0x40, 0x40, 0x40, 0x40],
'`': [0x00, 0x01, 0x02, 0x04, 0x00],
'a': [0x20, 0x54, 0x54, 0x54, 0x78],
'b': [0x7f, 0x48, 0x44, 0x44, 0x38],
'c': [0x38, 0x44, 0x44, 0x44, 0x20],
'd': [0x38, 0x44, 0x44, 0x48, 0x7f],
'e': [0x38, 0x54, 0x54, 0x54, 0x18],
'f': [0x08, 0x7e, 0x09, 0x01, 0x02],
'g': [0x0c, 0x52, 0x52, 0x52, 0x3e],
'h': [0x7f, 0x08, 0x04, 0x04, 0x78],
'i': [0x00, 0x44, 0x7d, 0x40, 0x00],
'j': [0x20, 0x40, 0x44, 0x3d, 0x00],
'k': [0x7f, 0x10, 0x28, 0x44, 0x00],
'l': [0x00, 0x41, 0x7f, 0x40, 0x00],
'm': [0x7c, 0x04, 0x18, 0x04, 0x78],
'n': [0x7c, 0x08, 0x04, 0x04, 0x78],
'o': [0x38, 0x44, 0x44, 0x44, 0x38],
'p': [0x7c, 0x14, 0x14, 0x14, 0x08],
'q': [0x08, 0x14, 0x14, 0x18, 0x7c],
'r': [0x7c, 0x08, 0x04, 0x04, 0x08],
's': [0x48, 0x54, 0x54, 0x54, 0x20],
't': [0x04, 0x3f, 0x44, 0x40, 0x20],
'u': [0x3c, 0x40, 0x40, 0x20, 0x7c],
'v': [0x1c, 0x20, 0x40, 0x20, 0x1c],
'w': [0x3c, 0x40, 0x30, 0x40, 0x3c],
'x': [0x44, 0x28, 0x10, 0x28, 0x44],
'y': [0x0c, 0x50, 0x50, 0x50, 0x3c],
'z': [0x44, 0x64, 0x54, 0x4c, 0x44],
'{': [0x00, 0x08, 0x36, 0x41, 0x00],
'|': [0x00, 0x00, 0x7f, 0x00, 0x00],
'}': [0x00, 0x41, 0x36, 0x08, 0x00],
'~': [0x10, 0x08, 0x08, 0x10, 0x08],
'\x7f': [0x00, 0x7e, 0x42, 0x42, 0x7e],
}
X = 13
Y = 5

class PCD8544(object):
"""Nokia 5110/3310 PCD8544-based LCD display."""

def __init__(self, dc, rst, sclk=None, din=None, cs=None, gpio=None, spi=None, vcc=None, bl=None):
self._sclk = sclk
self._din = din
self._dc = dc
self._cs = cs
self._rst = rst
self._gpio = gpio
self._spi = spi
self._buffer = [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xE0, 0xF0, 0xF8, 0xFC, 0xFC, 0xFE, 0xFF, 0xFC, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF0, 0xF0, 0xE0, 0xE0, 0xC0, 0x80, 0xC0, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x3F, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x1F, 0x3F, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE7, 0xC7, 0xC7, 0x87, 0x8F, 0x9F, 0x9F, 0xFF, 0xFF, 0xFF, 0xC1, 0xC0, 0xE0, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xFC, 0xFC, 0xFC, 0xFE, 0xFE, 0xFE, 0xFC, 0xFC, 0xF8, 0xF8, 0xF0, 0xE0, 0xC0, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0xE0, 0xF1, 0xFB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x1F, 0x0F, 0x0F, 0x87, 0xE7, 0xFF, 0xFF, 0xFF, 0x1F, 0x1F, 0x3F, 0xF9, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x3F, 0x0F, 0x07, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x7E, 0x3F, 0x3F, 0x0F, 0x1F, 0xFF, 0xFF, 0xFF, 0xFC, 0xF0, 0xE0, 0xF1, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xF0, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x0F, 0x1F, 0x3F, 0x7F, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x7F, 0x1F, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ]
if self._gpio is None:
self._gpio = GPIO.get_platform_gpio()
self._gpio.setup(vcc, GPIO.OUT)
self._gpio.setup(bl, GPIO.OUT)
self._gpio.output(vcc, 1)
self._gpio.output(bl, 1)
if self._rst is not None:
self._gpio.setup(self._rst, GPIO.OUT)
# Default to bit bang SPI.
if self._spi is None:
self._spi = SPI.BitBang(self._gpio, self._sclk, self._din, None, self._cs)
# Set pin outputs.
self._gpio.setup(self._dc, GPIO.OUT)
# Initialize buffer to Adafruit logo.

def command(self, c):
"""Send command byte to display."""
# DC pin low signals command byte.
self._gpio.set_low(self._dc)
self._spi.write([c])

def extended_command(self, c):
"""Send a command in extended mode"""
# Set extended command mode
self.command(PCD8544_FUNCTIONSET | PCD8544_EXTENDEDINSTRUCTION)
self.command(c)
# Set normal display mode.
self.command(PCD8544_FUNCTIONSET)
self.command(PCD8544_DISPLAYCONTROL | PCD8544_DISPLAYNORMAL)

def begin(self, contrast=40, bias=4):
"""Initialize display."""
self.reset()
# Set LCD bias.
self.set_bias(bias)
self.set_contrast(contrast)

def reset(self):
"""Reset the display"""
if self._rst is not None:
# Toggle RST low to reset.
self._gpio.set_low(self._rst)
time.sleep(0.1)
self._gpio.set_high(self._rst)

def display(self):
"""Write display buffer to physical display."""
# TODO: Consider support for partial updates like Arduino library.
# Reset to position zero.
self.command(PCD8544_SETYADDR)
self.command(PCD8544_SETXADDR)
# Write the buffer.
self._gpio.set_high(self._dc)
self._spi.write(self._buffer)

def clear(self):
"""Clear contents of image buffer."""
self._buffer = [0] * (LCDWIDTH * LCDHEIGHT // 8)

def set_contrast(self, contrast):
"""Set contrast to specified value (should be 0-127)."""
contrast = max(0, min(contrast, 0x7f)) # Clamp to values 0-0x7f
self.extended_command(PCD8544_SETVOP | contrast)

def set_bias(self, bias):
"""Set bias"""
self.extended_command(PCD8544_SETBIAS | bias)

def draw_str(self, y, s):
"""修改显示数据,y 为第几行,s 为要显示的数据"""
if (y >= Y ) or (y < 0):
return False
x = 0
for c in s[0:14]:
try:
self._buffer[y*84+x*6: y*84+x*6 + 6] = FONT[c] + [0]
except KeyError:
pass
x += 1

def draw_char(self, x, y):
pass

def quit(self):
self._gpio.cleanup()

接线(BCM)

  • dc 13
  • rst 5
  • sclk 26
  • din 19
  • cs 6
  • vcc 20
  • bl 21
  • gnd 0v

显示信息

网速

显示路由器的网速,电脑网速就没必要了
我用的是老毛子固件,所以用这个固件的可以参考我的代码

代码量不大,我就没写注释了

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
98
99
100
101
102
103
104
105
106
107
108
109
110
# coding:utf-8
import requests
import time
from math import fabs
from base64 import b64encode
# from demjson import decode

class RaspberryMonitorNetSpeed:
url = 'http://192.168.123.1/update.cgi?output=netdev'
headers = {
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
'Accept-Encoding': 'gzip, deflate',
'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8',
'Cache-Control': 'max-age=0',
# 'Connection':'keep-alive',
'Connection': 'close',
'Cookie': 'n56u_cookie_bw_rt_tab=WAN',
'Host': '192.168.123.1',
'Upgrade-Insecure-Requests': '1',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36',
}
# 最近一次请求时间
last_time = 0
# 最近一次请求的下行数据总量
last_rbytes = 0
# 最近一次请求的上行数据总量
last_tbytes = 0

def __init__(self, username, passwd):
self.headers['Authorization'] = 'Basic '+b64encode((username+':'+passwd).encode()).decode()
data = self.__get_wan_rx_and_tx()
self.last_rbytes = data[0]
self.last_tbytes = data[1]
self.last_time = data[2]

def set_auth(self, username, passwd):
self.headers['Authorization'] = 'Basic '+b64encode((username+':'+passwd).encode()).decode()

def __get_wan_rx_and_tx(self):
text = requests.get(self.url, headers=self.headers).text
try:
rx = int(text.split(',')[25].lstrip('rx:').strip(), 16)
tx = int(text.split(',')[26].lstrip('tx:').rstrip('}\n').strip(), 16)
new_time = time.time()
except (IndexError, ValueError, TypeError):
return False
return [rx, tx, new_time]

def get_human_speed(self):
"""这里返回的是 M/s 这种网速,[下载,上传]"""
data = self.__get_wan_rx_and_tx()
if data:
down_speed = 0
up_speed = 0
try:
down_speed = self.__bytes_to_humanspeed((data[0] - self.last_rbytes) / (data[2] - self.last_time))
up_speed = self.__bytes_to_humanspeed((data[1] - self.last_tbytes) / (data[2] - self.last_time))
except ZeroDivisionError:
pass
self.last_rbytes = data[0]
self.last_tbytes = data[1]
self.last_time = data[2]
return down_speed, up_speed

def __bytes_to_humanspeed(self, B):
absval = fabs(B) / 1024
megabyte = 1024
gigabyte = megabyte * 1024
terabyte = gigabyte * 1024
# petabyte = terabyte * 1024
if absval < megabyte:
return str(round(absval, 2)) + ' KB/s'
elif absval < gigabyte:
return str(round(absval / megabyte, 2)) + ' M/s'
else:
return str(round(absval / gigabyte, 2)) + ' G/s'

def get_bits_speed(self):
"""这里返回的是 Mbps 这种网速,[下载,上传]"""
data = self.__get_wan_rx_and_tx()
if data:
down_speed = self.__bytes_to_bitrate((data[0] - self.last_rbytes) / (data[2] - self.last_time))
up_speed = self.__bytes_to_bitrate((data[1] - self.last_tbytes) / (data[2] - self.last_time))
self.last_rbytes = data[0]
self.last_tbytes = data[1]
self.last_time = data[2]
return down_speed, up_speed

def __bytes_to_bitrate(self, B):
bits = B * 8
absval = fabs(bits)
kilobit = 1000
megabit = kilobit * 1000
gigabit = megabit * 1000
if absval < megabit:
return str(round(bits / kilobit, 2)) + ' Kbps'
elif absval < gigabit:
return str(round(bits / megabit, 2)) + ' Mbps'
else:
return str(round(bits / gigabit, 2)) + ' Gbps'

if __name__ == '__main__':
from lcd1602 import LCD1602
a = RaspberryMonitorNetSpeed('username', 'password')
lcd = LCD1602()
while True:
tmp = a.get_human_speed()
lcd.lcd_string('u:' + tmp[1], lcd.LCD_LINE_1)
lcd.lcd_string('d:' + tmp[0], lcd.LCD_LINE_2)
time.sleep(2)

温度

这里用的是 DTH11,驱动同样参考这个(Adafruit)

开始显示

代码量同样不大,没写注释

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
import time
import datetime
from PCD8544 import PCD8544 as lcd
import threading
import Adafruit_DHT
from speed import RaspberryMonitorNetSpeed as rmn

ns = [-1, -1]
th = [-2, -2]

def main():
a = lcd(dc=13, rst=5, sclk=26, din=19, cs=6, vcc=20, bl=21)
a.begin(contrast=60)
tmp = threading.Thread(target=network_speed)
tmp.setDaemon(True)
tmp.start()
tmp = threading.Thread(target=temperature_humidity)
tmp.setDaemon(True)
tmp.start()
while True:
try:
a.clear()
# 上传速度
a.draw_str(0, 'U: ' + str(ns[1]))
# 下载速度
a.draw_str(1, 'D: ' + str(ns[0]))
# 温度
a.draw_str(2, 'T: ' + str(th[1]) + ' C')
# 湿度
a.draw_str(3, 'H: ' + str(th[0]) + '%')
# 时间
a.draw_str(4, datetime.datetime.now().__str__()[5:].lstrip('0').split('.')[0])
a.display()
time.sleep(1)
except KeyboardInterrupt:
a.quit()
exit(0)

def network_speed():
global ns
b = rmn('bankroft', '123456')
while True:
time.sleep(1)
ns = b.get_human_speed()

def temperature_humidity():
global th
pin = 25
while True:
time.sleep(10)
th = Adafruit_DHT.read_retry(11, 25)

if __name__ == '__main__':
main()

运行

依赖

python3

安装

Adafruit_GPIO
Adafruit_DHT
requests

运行

python main.py

成果

图片

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×