注釈
こんにちは!SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts Communityへようこそ!Facebookコミュニティで、Raspberry Pi、Arduino、ESP32について深く学び、愛好者と交流しましょう。
なぜ参加するべきか?
専門的なサポート: 購入後の問題や技術的な課題を、コミュニティやサポートチームと一緒に解決できます。
学びと共有: ヒントやチュートリアルを交換し、スキルを向上させましょう。
最新情報の先行公開: 新製品の発表やプレビューにいち早くアクセスできます。
特別割引: 最新製品を特別価格で購入できます。
イベントやプレゼント企画: さまざまなキャンペーンやプレゼント企画に参加できます。
👉 さあ、一緒に学び、創造しましょう![こちら] をクリックして、今すぐ参加!
5.4 8x8 LEDマトリックスでのグラフィック表示
このレッスンでは、 Raspberry Pi Pico 2 と 74HC595シフトレジスタ2個 を使用して 8x8 LEDマトリックス を制御する方法を学びます。各LEDを個別にコントロールすることで、パターンや簡単なグラフィックを表示できるようになります。
必要なもの
このプロジェクトでは、以下のコンポーネントが必要です。
すべてを一括で揃えるのに便利なキットはこちら:
名称 |
キット内容 |
リンク |
|---|---|---|
Newton Lab Kit |
450点以上 |
個別に購入する場合は、以下のリンクを利用してください。
SN |
コンポーネント |
数量 |
リンク |
|---|---|---|---|
1 |
1 |
||
2 |
Micro USBケーブル |
1 |
|
3 |
1 |
||
4 |
数本 |
||
5 |
1 |
||
6 |
2 |
8x8 LEDマトリックスの概要
8x8 LEDマトリックスは、8行×8列に並んだ合計64個のLEDで構成されています。行と列に電圧を加えることで各LEDを個別に制御し、文字やパターンを表示できます。
このプロジェクトでは、 74HC595シフトレジスタ2個 を使用してLEDマトリックスの行と列を制御し、少ないGPIOピンで多くの出力を管理します。
回路図
8x8 LEDドットマトリックスは、 2つの74HC595シフトレジスタ によって制御されます。1つは行を、もう1つは列を制御します。これらのICは GP18、GP19、GP20 の3つのGPIOピンを共有し、PicoのI/Oポートを節約します。
Raspberry Pi Picoは一度に16ビットのバイナリデータを出力し、最初の8ビットが行、次の8ビットが列を制御する仕組みになっています。
Q7' (ピン9): 1つ目の74HC595のシリアルデータ出力ピンが、2つ目の74HC595の DS (ピン14) に接続されることで、シフトレジスタを連結できます。
配線手順
配線は少し複雑ですが、手順を追って進めましょう。
Step 1: まず、Pico、LEDドットマトリックス、および2つの74HC595チップをブレッド ボードに挿入します。Picoの 3.3V と GND をブレッドボードの両サイドの穴に接続 し、その後、2つの74HC595の ピン16 と ピン10 を VCC に、 ピン13 と ピン8 を GND に接続します。
注釈
上記のFritzing画像では、ラベルのある側が下側になります。
ステップ2: 2つの74HC595の ピン11 を接続し、それをGP20に接続。続いて、ピン12をGP19に、 左側の74HC595の ピン14 をGP18に、ピン9を2つ目の74HC595のピン14に接続します。
Step 3: 右側の74HC595は、LEDドットマトリックスの列を制御します。 対応関係は下表のとおりです。そのため、74HC595の*Q0-Q7 ピンは、 それぞれ ピン13、3、4、10、6、11、15、16 に対応しています。
74HC595 |
Q0 |
Q1 |
Q2 |
Q3 |
Q4 |
Q5 |
Q6 |
Q7 |
LED Dot Matrix |
13 |
3 |
4 |
10 |
6 |
11 |
15 |
16 |
Step 4: 次に、LEDドットマトリックスの ROW(行)を接続します。 左側の74HC595がLEDドットマトリックスの行を制御します。対応関係は下 表のとおりです。左側の74HC595のQ0-Q7ピンは、それぞれピン9、14、8、12、1、7、2、5に対応しています。
74HC595 |
Q0 |
Q1 |
Q2 |
Q3 |
Q4 |
Q5 |
Q6 |
Q7 |
LED Dot Matrix |
9 |
14 |
8 |
12 |
1 |
7 |
2 |
5 |
コードの記述
次に、MicroPythonでLEDマトリックスにパターンを表示するプログラムを作成します。
注釈
5.4_8x8_pixel_graphics.pyをnewton-lab-kit/micropythonから開くか、Thonnyにコードをコピーして「Run」をクリックするか、F5キーを押してください。インタプリタが MicroPython (Raspberry Pi Pico) COMxx に設定されていることを確認してください。
import machine
import time
# 74HC595シフトレジスタに接続するピンの定義
sdi = machine.Pin(18, machine.Pin.OUT) # シリアルデータ入力
rclk = machine.Pin(19, machine.Pin.OUT) # ストレージレジスタクロック(RCLK)
srclk = machine.Pin(20, machine.Pin.OUT) # シフトレジスタクロック(SRCLK)
# LEDマトリックスに「X」を表示するためのパターンデータ
glyph = [0x7E, 0xBD, 0xDB, 0xE7, 0xE7, 0xDB, 0xBD, 0x7E]
def hc595_in(dat):
"""
Shifts 8 bits of data into the 74HC595 shift register.
"""
for bit in range(7, -1, -1):
srclk.low()
sdi.value((dat >> bit) & 1) # ビット単位でデータを出力
srclk.high()
time.sleep_us(1) # 短い遅延を入れてタイミングを調整
def hc595_out():
"""
Latches the data from the shift register to the storage register,
updating the outputs.
"""
rclk.high()
rclk.low()
while True:
for i in range(8):
hc595_in(glyph[i]) # 現在の行のカラムデータを送信
hc595_in(1 << i) # 該当の行をアクティブ化
hc595_out() # ディスプレイを更新
time.sleep_ms(1) # 視覚的な残像効果のための遅延
このコードを実行すると、8x8 LEDマトリックスに「X」の形が表示されます。LEDが点灯し、マトリックス上に「X」のパターンを形成します。
コードの解説
モジュールのインポート:
machine: GPIOピン制御などのハードウェア関連機能を提供time: タイミング制御のための遅延処理に使用
ピンの定義:
sdi: シフトレジスタにシリアルデータを送信rclk: シフトレジスタのデータを出力ピンにラッチsrclk: 送信されたデータをシフトレジスタに移動
「X」パターンの定義:
各要素がLEDマトリックスの1行に対応
16進数値は、その行の点灯(0)・消灯(1)の状態を示す
これにより、対称的な「X」の形がマトリックス上に描画される
glyph = [0x7E, 0xBD, 0xDB, 0xE7, 0xE7, 0xDB, 0xBD, 0x7E]
hc595_in(dat)関数:8ビットのデータ(
dat)をシフトレジスタに順次送信最上位ビット(MSB)から順に処理
srclkピンをトグルして各ビットをレジスタにシフトsdiピンが現在のビットの値に応じてHIGHまたはLOWを設定
def hc595_in(dat): """ Shifts 8 bits of data into the 74HC595 shift register. """ for bit in range(7, -1, -1): srclk.low() sdi.value((dat >> bit) & 1) # ビットごとにデータを送信 srclk.high() time.sleep_us(1) # 適切なタイミング調整
hc595_out()関数:シフトレジスタのデータをストレージレジスタにラッチ
rclkピンの立ち上がりエッジでデータを出力ピンに適用
def hc595_out(): rclk.high() rclk.low()
メインループ:
ループ内でディスプレイを高速に更新し、「X」パターンを維持
forループで各行(0~7)を順番に処理hc595_in(1 << i)により1行ずつアクティブ化hc595_in(glyph[i])で各行のカラムデータを送信hc595_out()でラッチし、マトリックスを更新time.sleep_ms(1)により各行を短時間表示し、視覚的に全体を同時点灯させる
while True: for i in range(8): hc595_in(glyph[i]) # 現在の行のデータを送信 hc595_in(1 << i) # 行をアクティブにする hc595_out() # LEDマトリックスを更新 time.sleep_ms(1) # 視覚的残像のための遅延
さらなる実験
パターンの変更
以下のパターンデータに置き換えることで、異なるグラフィックを表示可能。
pattern_heartまたはpattern_smileをコード内で使用すると、異なる形状を描画できる。# ハート形 pattern_heart = [ 0b11111111, 0b10011001, 0b00000000, 0b00000000, 0b00000000, 0b10000001, 0b11000011, 0b11100111 ] # スマイルフェイス pattern_smile = [ 0b11000011, # 行0 0b10111101, # 行1 0b01011010, # 行2 0b01111110, # 行3 0b01011010, # 行4 0b01100110, # 行5 0b10111101, # 行6 0b11000011 # 行7 ]
Animating the Display
複数のパターンを作成し、順番に切り替えてアニメーションを実現しましょう。
import machine import time # 74HC595シフトレジスタに接続するピンを定義 sdi = machine.Pin(18, machine.Pin.OUT) # シリアルデータ入力 rclk = machine.Pin(19, machine.Pin.OUT) # レジスタクロック(ラッチ) srclk = machine.Pin(20, machine.Pin.OUT) # シフトレジスタクロック # ハートの形 pattern_heart = [ 0b11111111, 0b10011001, 0b00000000, 0b00000000, 0b00000000, 0b10000001, 0b11000011, 0b11100111 ] # スマイルフェイス pattern_smile = [ 0b11000011, # 行0 0b10111101, # 行1 0b01011010, # 行2 0b01111110, # 行3 0b01011010, # 行4 0b01100110, # 行5 0b10111101, # 行6 0b11000011 # 行7 ] def hc595_in(dat): """ Shift 8 bits of data into the 74HC595 shift register. """ for bit in range(7, -1, -1): srclk.low() # データのシフト準備 sdi.value((dat >> bit) & 1) # データビットをセット srclk.high() # データをシフトレジスタへ送信 time.sleep_us(1) # 短い遅延でタイミング調整 def hc595_out(): """ Latch the shifted data to the output pins of the 74HC595. """ rclk.high() # データをラッチ(立ち上がりエッジ) rclk.low() # 次のデータ送信準備 def display_pattern(pattern): """ Display a given 8x8 pattern on the LED matrix. """ for _ in range(500): # 一定時間パターンを表示 for i in range(8): hc595_in(pattern[i]) # 現在の行のカラムデータを送信 hc595_in(1 << i) # 該当の行をアクティブ化 hc595_out() # 出力を更新 time.sleep_ms(1) # 視覚的な持続効果のための遅延 while True: display_pattern(pattern_heart) # ハートの形を表示 display_pattern(pattern_smile) # スマイルフェイスを表示
Design Your Own Patterns
各バイトはLEDマトリックスの1行を表し、ビットが0の箇所が点灯します。独自のパターンリストを作成して、オリジナルのデザインを作りましょう。
Conclusion
このレッスンでは、Raspberry Pi Pico 2と2つの74HC595シフトレジスタを使用して、8x8 LEDマトリックスを制御する方法を学びました。 ビット操作やシフトレジスタの活用方法を理解することで、マトリックス上にパターンやグラフィックを自由に表示できるようになります。



