🪅

Raspberry Pi Picoでつくる電光掲示板

2023/12/18に公開

https://adventar.org/calendars/8910
ちょっと株式会社アドベントカレンダー 12月18日の記事です。

この記事ではRaspberry Pi Pico(以下ラズパイピコと呼ぶ)を使ってLEDマトリクスパネルを制御します。

ラズパイピコの購入

ラズパイピコはC/C++やMicroPythonでプログラミングできるマイコンボードです。
AliExpressというECサイトで購入しました。
日本語表記が怪しいですが、問題なく届きました。

ラズパイピコとPCの接続

PCとラズパイピコをUSBケーブルで接続します。
thonnyというIDEを使ってプログラムを書き込みます。

接続確認のために、LEDを点灯させるプログラムを書き込みます。

LED点灯プログラム
import machine
import time

led= machine.Pin('LED', machine.Pin.OUT)

while (True):
    led.on()


LEDが点灯したラズパイ

点灯が確認できたので、次はピンヘッダをはんだ付けします。

ピンヘッダの取り付け

ラズパイピコにはGPIOという外部のセンサーやアクチュエーターを接続するための端子があります。
GPIOにピンヘッダをはんだ付けして接続しやすくします。

Amazonで安いはんだごてセットを購入しました。


安かったはんだごてセット

ピンヘッダをブレッドボードに固定して、その上にラズパイピコを乗せてはんだ付けします。

ブレッドボードに刺さったピンヘッダ ピンヘッダに刺したラズパイ
ブレッドボードに刺さったピンヘッダ ピンヘッダに刺したラズパイ

はんだ付け後がこちら。はんだ付けは苦手なのであまり裏面を見せたくないけど...。

はんだ付け後のラズパイ裏 はんだ付け後のラズパイ表
はんだ付け後のラズパイ1 はんだ付け後のラズパイ2

LEDマトリクスパネルの購入

ラズパイピコから制御するLEDマトリクスパネルを購入します。

今回は秋葉原のお店で購入しました。電源とケーブルも一緒に。

LEDマトリクスパネルと電源回り

LEDマトリクスパネルの接続

パネルの裏面にはピンヘッダが付いているのでその表示を見ながらジャンパー線でラズパイピコに接続します。
詳細はデータシートを確認してください。

ラズパイとマトリクスLEDの接続
ラズパイとマトリクスLEDの接続

接続できたら、プログラムを書き込んで動作確認します。

任意の色を表示するプログラム
import machine
import time
# GPIOピンの設定
R0 = machine.Pin(0, machine.Pin.OUT)
G0 = machine.Pin(1, machine.Pin.OUT)
B0 = machine.Pin(2, machine.Pin.OUT)
R1 = machine.Pin(3, machine.Pin.OUT)
G1 = machine.Pin(4, machine.Pin.OUT)
B1 = machine.Pin(5, machine.Pin.OUT)
A = machine.Pin(6, machine.Pin.OUT)
B = machine.Pin(7, machine.Pin.OUT)
C = machine.Pin(8, machine.Pin.OUT)
CLK = machine.Pin(11, machine.Pin.OUT)
STB = machine.Pin(12, machine.Pin.OUT)
OEn = machine.Pin(13, machine.Pin.OUT)
# 行を選択する関数
def select_row(row):
    A.value(row & 0b0001)
    B.value((row >> 1) & 0b0001)
    C.value((row >> 2) & 0b0001)
# ピクセルの色を設定する関数
def set_pixel_color(r0, g0, b0, r1, g1, b1):
    R0.value(r0)
    G0.value(g0)
    B0.value(b0)
    R1.value(r1)
    G1.value(g1)
    B1.value(b1)
# 主要なループ
while True:
    for row in range(16):  # 16行
        select_row(row)
        for col in range(32): # 32列
            # ここで任意の色データをセット
            set_pixel_color(1, 1, 0, 0, 1, 0)  # 例: 上の半分は赤、下の半分は緑
            CLK.value(1)
            CLK.value(0)
        STB.value(1)
        STB.value(0)
        OEn.value(0)  # 出力を有効にする
        time.sleep(0.00001)  # この値を小さくしてリフレッシュレートを上げる
        OEn.value(1)  # 出力を無効にする

R0 G0 B0は上の半分、R1 G1 B1は下の半分のLEDを制御します。
A B Cは行を選択するためのピンです。
(A, B, C) = (0, 0, 0)のとき、1行目が選択されます。
(R0, G0, B0, R1, G1, B1) = (1, 1, 0, 0, 1, 0)のとき、上半分は赤、下半分は緑になります。
CLKを変化させて次のピクセルに進みます。
これを繰り返すことで画面全体を表示します。

表面 接続部分

そして無事にLEDマトリクスパネルが点灯しました。🎄🎄
リフレッシュレートの関係で撮影するのは難しいですが、ちゃんと動作しています。

おわりに

いかがでしたでしょうか。
街中にある電光掲示板もLEDマトリクスパネルをたくさん繋げて作られています。
自分だけの電光掲示板を作ってみてください。

最近は32x32のLEDマトリクスパネルを使って遊んでいます。

GitHubで編集を提案
chot Inc. tech blog

Discussion