はじめに
RaspberryPi PicoでSPIを使って「シリアル接続7セグメント4桁LED(青)」を操作する方法を解説します。言語はMicroPythonを使います。
~ この記事の内容 ~
- 初めてSPI通信を使う。
- MicroPythonでサクッとSPI通信をしてみたい。
- 7セグLEDを簡単に使いたい。
環境
この記事の内容は、以下の環境で作成しています。
環境 | バージョンなど | 備考 |
開発用PCのOS | Windows11 | Windows10でもOKです |
言語 | MicroPython | |
開発環境 Thonny | 3.3.13 | |
ボード | RaspberryPi Pico |
シリアル接続7セグメント4桁LED(青)
SparkFunから発売されている、SPI・I2C・シリアル接続が可能な4桁の7セグメントLEDです。
通常、7セグLEDを使おうとすると、表示される「線1本1本」に配線・プログラムが必要なのですが、この基板は制御用のマイコン(ATMega328P)のおかげで、「1234」などの数値を送るだけで表示ができます。配線も電源系と通信系の計5本だけなので超簡単。
「LEDに表示すること」ではなく、表示する内容や、他のプログラムの作成に注力することができます。
私はスイッチサイエンスさんで購入しました。使用するにはピンヘッダの半田付けが10ピン分必要で、本体に付属していないので、ピンヘッダは別途準備する必要があります。

- SPI・I2C・シリアル接続に対応
- 省配線・省コード
- 簡単に7セグLEDが使える
Picoとシリアル接続7セグメント4桁LED(青)の接続
下記のようにPicoと7セグLEDをつなぎます。

7セグLED付近の拡大画像です。

ピン番号 | Pico側 | 7セグ側 |
38 | GND | GND |
36 | 3V3(OUT) | VCC |
25 | SPI0 Tx | SDI |
24 | SPI0 SCK | SCK |
22 | GP17 | SS |
Picoピンアサイン(Pin-Out)
※ Pico公式サイトより引用
使用する部品
今回使用する部品は以下の通りです。
RaspberryPi Pico
Pico本体です。半導体不足が続いていますが、価格・納期とも安定しています。

電池ボックス
Picoの電源に使う電池ボックスです。解説では「単4」を使っていますが、容量が多いので「単3」のものをおすすめします。

ちなみに記事内(単4)の電池ボックスはこちら
ブレッドボード
サンハヤト製がおすすめです。少々固いですが、品質は高いです。スペースが広いので配線・デバッグが楽に行えます。

充電池(エネループ)
使い捨てタイプもいいですが、エネループなら4本充電しても電気代は約1円。モーター・ポンプなどの電池が消耗しやすい実験・工作におすすめです。

※ はじめて使う方は充電器とのセットがおすすめです。
7セグメント4桁LED
スイッチサイエンスさんよりだいぶ高いですが、Amazonでも購入することができます。
こちらはレッド版です。
ピンヘッダ
7セグLEDに使うためのピンヘッダです。特別なものは必要ないので、お手持ちの物があればそれで構いません。

プログラム概要
今回のプログラムの概要は以下の通りです。
- SPIを設定をする
- 「1234」を表示する
- 少数点を表示する
実行結果
後述するプログラムを実行すると、以下のように7セグLEDに数値と少数点が表示されます。

全体コード
全体コードは以下の通りです。詳細な内容は後述する「コードのポイント」で解説します。
from machine import SPI, Pin
import time
#
# SPIの設定
#
spi = SPI( 0,
baudrate = 100000,
sck = machine.Pin(18),
mosi = machine.Pin(19) )
#
# チップセレクト(スレーブセレクト)用の出力ピンを設定。
#
cs = machine.Pin(17, mode=Pin.OUT)
cs.value(1)
#
# クリアコマンド(0x76)でLEDを全て消す
#
cs.value(0)
spi.write(b"\x76")
cs.value(1)
time.sleep(0.5)
#
# 左から順に数値の表示
#
cs.value(0)
spi.write(b'\x01')
spi.write(b'\x02')
spi.write(b'\x03')
spi.write(b'\x04')
cs.value(1)
time.sleep(1)
#
# 小数点設定コマンド
#
cs.value(0)
spi.write(b"\x77")
spi.write(b"\x01")
cs.value(1)
print("done")
コードのポイント
コードのポイントは以下の通りです。
SPIの設定
SPI通信のクロック、通信に使うピンの設定をします。
MicroPythonの公式リファレンスでは、バス番号のみを指定していますが、それだと動作せずにちょっとハマりました。今回のピン(GP18,19)を使用する場合は、下記のようにピンを指定してください。
#
# SPIの設定
#
spi = SPI( 0,
baudrate = 100000,
sck = machine.Pin(18),
mosi = machine.Pin(19) )
クロック(baoudrate)は変更可能ですが、7セグLEDのボードが250kHzまでの対応です。クロックは250kHzまでにしてください。
CS(Chip Select) 用の出力ピンを設定
通信相手を選ぶCS(Chip Select)用のピンを設定します。
この基板では通信状態によってCSを以下のようにするため、設定直後は通信なしの(1)にしておきます。
指定 | 電圧 | value |
チップへのコマンド送信なし | High | 1 |
チップへのコマンド通信あり | Low | 0 |
#
# チップセレクト(スレーブセレクト)用の出力ピンを設定。
#
cs = machine.Pin(17, mode=Pin.OUT)
cs.value(1)
クリアコマンド
表示のクリアコマンド(0x76) で、全てのLEDが消灯して表示のクリアができます。通信に合わせてCSの状態も切り替えてください。
最後のスリープはLEDの消灯を目視確認するためのものなので、必須ではありません。
#
# クリアコマンド(0x76)でLEDを全て消す
#
cs.value(0)
spi.write(b"\x76")
cs.value(1)
time.sleep(0.5)
byte型の表記
LEDのクリアは16進の「0x76」ですが、write関数の引数はbyte型なので、「b”\x76″」という書き方をしています。
公式リファレンスでは、コマンドは16進数で書かれているので、引数に書く際は、上記のように「b”\x〇〇”」という形式に変換してください。
数値表示
左の桁から順に数字を送信すると、LEDに「1234」と表示されます。通信の前後でCSの状態も変化させてください。
#
# 左から順に数値の表示
#
cs.value(0)
spi.write(b'\x01')
spi.write(b'\x02')
spi.write(b'\x03')
spi.write(b'\x04')
cs.value(1)
time.sleep(1)
少数点の表示
コマンド「0x77」を送信すると、小数点などの設定を指定できます。
設定はコマンドに続けて、以下のように2進数で指定します。
#
# 小数点設定コマンド
#
cs.value(0)
spi.write(b"\x77")
spi.write(b"\x01")
cs.value(1)
小数点などの指定方法
bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
内容 | — | — | アポストロフィ | コロン | 少数点③ | 少数点② | 少数点① | 少数点⓪ |
※ SparkFunの公式ページより引用
まとめ
RaspberryPi PicoでSPI接続の7セグLEDを使う方法を解説しました。
OLEDディスプレイが格安で買える時代ですが、7セグLEDはいかにも工作・プロダクトっぽくて楽しいですよね。
PicoでSPI使う方法の解説を書こうと思った時に、使いやすくて、面白そうなのでこの7セグLEDを買ってみました。「7セグLEDを使ってみたい」「SPIの使い方が知りたい」という人の参考になればうれしいです。
お知らせ
\ 3月17日にPicoの本が発売されました /
Picoの基礎から50種類の電子パーツの動かし方までがソースコードと実体配線付で解説されています。初心者はもちろん中級者まで楽しめる内容です(電子書籍版もあり)。
\ 3月15日にPico/Pico W の本が発売されました /
雑誌 Interfaceの特集内容に大幅加筆。Picoの基礎~いろいろな動かし方を詰め込んだ、まさに「攻略本」な一冊です。

「見た目もいい工具」が見つかります
工具は『見た目』も重要ですよね、部屋や机にこだわって、カッコいい作業環境を作っても、ダサい工具が散乱していたら、一発で台無しです。
ですが「機能性ばかりで、デザイン性のいいものは見つからない」という人も多いんじゃないでしょうか。
以下のサイトなら、『ケースまでこだわった』ドライバー、フラッシュライト、テスターなどなど、デザイン性の良い工具やツールが見つかます。また、クラファンを活用して種類もどんどん増えています。
ここで全ては書ききれないので、以下のボタンから、好みの工具があるか確認してみてください(お得なセール情報もありますよ)。
質問・要望 大歓迎です
「こんな解説記事作って」「こんなことがしたいけど、〇〇で困ってる」など、コメント欄で教えてください。 質問・要望に、中の人ができる限り対応します。
使えたよ・設定できたよの一言コメントも大歓迎。気軽に足跡を残してみてください。記事を紹介したい方はブログ、SNSにバシバシ貼ってもらってOKです。