2017年に作った時計がブレッドボードの接触不良で時々ハングするようになったので、ラズパイPico Wでリメイクしました。[ハングしていたように見えたのはNeopixelが1個死にかけていたためのようです。リメイクした後でも再発したので故障したLEDを見つけて交換しました。]
製作当時の記事は以下です。
http://keisoku-lab.mond.jp/2017/06/28/手作りの大型7セグメントフルカラー表示器を使っ/
http://keisoku-lab.mond.jp/2017/08/10/手作りの大型7セグメントフルカラー表示器デモ版/

当時はまだシリアルフルカラーLEDを32×8 で敷き詰めたユニットは高価だったので、テープ状のシリアルフルカラーLEDを7セグメントLEDのように配置して表示板を作りました。1文字14個で4桁なので56個のLEDを使いました。
配線は以下の3本だけです。
Pico W—–シリアルLED
VBUS —–+5V
GND —–GND
GP16 —–Din
シリアルLEDのライブラリは以下を使いました。
https://github.com/blaz-r/pi_pico_neopixel
NTPサーバーへの接続とPico Wが内蔵しているrtcの更新については以下の記事に書きました。
時計の機能
毎時0分にNTPサーバーに接続してrtcを更新します。
6時から21時59分までは明るく、それ以外は暗く表示します。
毎分45秒から次の5秒まで表示色をグラデーションで変化させます。
一応、狙い通り動いていますが、Pythonは使い慣れていませんのでアドバイスがあればohashi(アットマーク)mac.email.ne.jpまでお願いします。
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 |
import machine import network import ntptime_jp import utime from neopixel import Neopixel #SSID = 'your SSID' #PASSWORD = 'your Password' sta_if = network.WLAN(network.STA_IF) sta_if.active(True) sta_if.connect(SSID, PASSWORD) while not sta_if.isconnected(): pass #+++++++_ntp_access_++++++++ #ntptime_jp.settime() #+++++++++++++++++++++++++++ check_ntp = True numpix = 56 strip = Neopixel(numpix, 0, 16, "GRB") strip.brightness(50) PATTERN0 = (0,1,2,3,4,5,8,9,10,11,12,13) PATTERN1 = (0,1,8,9) PATTERN2 = (0,1,2,3,6,7,10,11,12,13) PATTERN3 = (0,1,2,3,6,7,8,9,10,11) PATTERN4 = (0,1,4,5,6,7,8,9) PATTERN5 = (2,3,4,5,6,7,8,9,10,11) PATTERN6 = (2,3,4,5,6,7,8,9,10,11,12,13) PATTERN7 = (0,1,2,3,4,5,8,9) PATTERN8 = (0,1,2,3,4,5,6,7,8,9,10,11,12,13) PATTERN9 = (0,1,2,3,4,5,6,7,8,9) seg8 = (PATTERN0, PATTERN1, PATTERN2, PATTERN3, PATTERN4, PATTERN5, PATTERN6, PATTERN7, PATTERN8, PATTERN9) pattern_led_init = [] for i in range(0, numpix): pattern_led_init.append(False) pattern_led = [] def time_pattern(hour, minute): disp_time = f'{hour:02}' + f'{minute:02}' pattern_led = pattern_led_init.copy() for pos in range(0,4): pos_num = int(disp_time[pos]) position=3 - pos disp_num = seg8[pos_num] for num in disp_num: num = num + position * 14 pattern_led[num] = True return(pattern_led) pix_color=[] delta = 65536/numpix for pix_index in range(0, numpix): pix_color.append(strip.colorHSV(int(delta * pix_index), 255, 255)) while True: if (6 < utime.localtime()[3] < 21): strip.brightness(80) else: strip.brightness(20) hour = utime.localtime()[3] minute = utime.localtime()[4] pattern_led=time_pattern(hour, minute) for pix_index in range(0, numpix): if pattern_led[pix_index] == True: strip.set_pixel(pix_index,pix_color[pix_index]) else: strip.set_pixel(pix_index,(0,0,0)) strip.show() move_last=pix_color[0] del(pix_color[0]) pix_color.append(move_last) utime.sleep(0.05) while(5 < utime.localtime()[5] < 45): # wait every 5 ~ 45sec if (check_ntp == True) and (minute == 0): ntptime_jp.settime() # access ntp server check_ntp = False if (check_ntp == False) and (minute >= 1): check_ntp = True |