點陣式LED控制

LED除了單獨一顆一顆之外,也有排成矩陣方式的以方便我們顯示數字和文字,在這個單元中我們就來看看如何驅動這一類的LED短陣。

首先來看看這種標準型的8x8點陣式LED(以下是由4個8x8點陣式LED所組成的):

雖然看起來有非常多的LED,但是其中大部份的工作都已被裡面的IC幫我們完成了,因此,其實它只有少少的5條線需要連接。背面看起來如下所示:

其中,VCC和GND不用說,當然就是分別接到5V電源和接地,我們直接把它們接到NodeMCU的控充板所提供的USB電源處。另外的三條線,DIN,CS,以及CLK,則分別接到D7,D8,和D5,如下所示:

這樣就連接好囉。在程式方面,它需要一個驅動程式max7219,這很容易,只要前往以下的網址,把這個檔案利用ampy上傳到板子上就可以了。

上傳完成之後,只要編寫以下的程式,就可以順利地在LED矩陣上顯示出文字或數字囉。

import max7219
import time
messages = ['Nice', ' to ', 'meet', 'you!']
from machine import Pin, SPI
spi = SPI(1, baudrate=10000000, polarity=0, phase=0)
disp = max7219.Matrix8x8(spi, Pin(15), 4)
disp.brightness(0)
while True:
for item in messages:
disp.fill(0)
disp.text(item,0,0,1)
disp.show()
time.sleep(1)

以下是程式執行的示範影片:

結合了WiFi網路連線與NTP網路對時,以及溫濕度感測器的功能,以下的程式就可以製作一個溫濕度計時鐘了:

import max7219
import time
import dht
from ntptime import settime
from machine import Pin, SPI
settime()
d = dht.DHT11(Pin(16))
spi = SPI(1, baudrate=10000000, polarity=0, phase=0)
disp = max7219.Matrix8x8(spi, Pin(15), 4)
disp.brightness(0)
while True:
messages = list()
utc = time.mktime(time.localtime())
year, month, day, hour, minute, second, week, days = time.localtime(utc+28800)
messages.append(str(year))
messages.append("{:2d}{:2d}".format(month, day))
messages.append("{:2d}{:2d}".format(hour, minute))
for item in messages:
disp.fill(0)
disp.text(item,0,0,1)
disp.show()
time.sleep(2)
d.measure()
disp.fill(0)
disp.text('{}C'.format(d.temperature()), 0, 0, 1)
disp.show()
time.sleep(2)
disp.fill(0)
disp.text('{}%'.format(d.humidity()), 0, 0, 1)
disp.show()
time.sleep(2)

以下是執行的結果:

請注意,這個程式需要在boot.py建立了網路連線之後才能正常運作喔。