Raspberry Pi PR

RaspberryPi(ラズパイ)でSPIを使う方法【シリアル接続7セグメント4桁LED(青)】

記事内に商品プロモーションを含む場合があります

はじめに

RaspberryPi(ラズパイ)4 のSPIを使って、7セグメント4桁LED(青)を操作する方法について解説します。言語はPython。ライブラリは「spidev」を使います。

環境

環境 備考
RaspberryPi 4 Model B
OS RaspberryPi OS (bullseye) 64bit版です
言語 Python 3.9.2
ライブラリ spidev ver.3.5

OSの書き込みやセットアップ方法はこちらをご覧ください。

RaspberryPiとの接続

以下のようにRaspberryPiと7セグLEDを接続します。

RaspberryPiの配線を説明する画像
RaspberryPi側配線
7セグLEDの配線を説明する画像
7セグLED側配線
ピン番号 RaspberryPi側 7セグ側
17 3V3 VCC
19 MOSI SDI
23 SCLK SCK
24 CE0 SS
25 GND GND

RaspberryPi ピンアサイン(Pinout)

RaspberryPi 公式のGitHubより引用

7セグLEDデータシート

使用する部品

今回の回路には以下のものを使用しています。

RaspberryPi 4 (8GB モデル)

解説でも使用しているRaspberryPi 4 です。

在庫切れ・価格高騰が続いていましたが、ようやく在庫もできて価格も定価近くまで下がりました。

\楽天ポイント4倍セール!/
楽天市場
\ポイント5%還元!/
Yahooショッピング

7セグメント4桁LED

Amazonでも購入することができます。

\ポイント5%還元!/
Yahooショッピング

こちらはレッド版です。

ブレッドボード

国内サンハヤト製のブレッドボードです。少々堅めの指し心地ですが、他の海外製と違い、ピン穴の数値がすべて印刷されており、品質も高いのでおすすめです。

あきばお〜楽天市場支店
¥1,192 (2024/04/09 09:18時点 | 楽天市場調べ)
\楽天ポイント4倍セール!/
楽天市場
\ポイント5%還元!/
Yahooショッピング

ジャンプワイヤ (オス-メス タイプ)

RaspberryPiで使う場合は、以下のオスーメスタイプがおすすめです。

\楽天ポイント4倍セール!/
楽天市場
\ポイント5%還元!/
Yahooショッピング

エネループ

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

※ はじめて使う方は充電器とのセットがおすすめです

電池ボックス

電源に使用する乾電池用のボックスとスナップです。記事では単4を使っていますが、容量の大きい単3タイプをお勧めします。単3でも単4でも電圧は変わりません。

プログラム概要

今回のプログラムの概要は以下の通りです。

  • SPIを設定する
  • 7セグLEDに「1234」と表示する
  • 7セグLEDに「コロン(:)」を表示する

実行結果

後述するプログラムを実行すると、以下のように7セグLEDに数値を表示できます。

プログラムを実行して7セグLEDが点灯した画像

SPIの有効化

RaspberryPiでは、デフォルトでSPI通信が無効化されているので、設定画面からSPIを有効化します。

デスクトップの「RaspberryPiのマーク」→「設定」→「RaspberryPiの設定」をクリックします。表示された画面で「インターフェイス」のタブを選択し「SPI」のスイッチをクリックします。

SPIの設定画面を表示させるための操作を説明する画像
メニューの表示
SPIの設定画面での操作方法を説明する画像
SPIの設定

ライブラリのインストール

2023年3月にインストールしたRaspberryPi OS(64bit)では、デフォルトの状態で「spidev」が使用できました。使用できない(importでエラーがでる)場合は、以下のコマンドでインストールしてください。

pip install spidev

全体コード

全体コードは以下の通りです。詳細な内容は後述する「コードのポイント」で解説します。

import spidev
import time

# SPIの設定です
spi = spidev.SpiDev()
spi.open(0,0)
spi.max_speed_hz = 100000

#
# ChipSelectコマンド内部で自動的にしてくれるので、
# 別途GPIOを操作する必要はありません。
#

# 表示のクリア
writeData = [ 0x76,]
spi.xfer2(writeData)
time.sleep(1)

# 数値の表示
writeData = [ 0x1, 0x2, 0x3, 0x4 ]
spi.xfer2(writeData)

# コロンの表示
writeData = [ 0x77, 0x10]
spi.xfer2(writeData)

print("done")

コードのポイント

コードのポイントは以下の通りです。

SPIの作成

SPI通信用のオブジェクトを作成して、周波数等を設定します。7セグLED側が250kHzまでしか対応していないため、周波数はそこまでの値を設定してください。

# SPIの設定です
spi = spidev.SpiDev()
spi.open(0,0)
spi.max_speed_hz = 100000

表示のクリア

xfer2関数でSPIのコマンドを送信します。SS(スレーブセレクト・チップセレクト)はコマンド内で自動でON/OFFされるので、別途GPIOを操作する必要はありません。

送信する「0x76」7セグLEDの表示をクリアするコマンドで、送信するとLEDが全て消灯します。sleepは消灯を目視確認するためのもので、必須ではありません。

#
# ChipSelectコマンド内部で自動的にしてくれるので、
# 別途GPIOを操作する必要はありません。
#

# 表示のクリア
writeData = [ 0x76,]
spi.xfer2(writeData)
time.sleep(1)

数値の表示

7セグLEDに数値を表示します。左から順に指定します。

# 数値の表示
writeData = [ 0x1, 0x2, 0x3, 0x4 ]
spi.xfer2(writeData)

コロンの設定

「0x77」と合わせて数値を送ると小数点やコロンを表示できます。

表示内容は2進数で指定します。コロンは2進数で「0001 0000」となるため、16進数に変換した「0x10」を送信しています。詳細は以下の表をご覧ください。

# コロンの表示
writeData = [ 0x77, 0x10]
spi.xfer2(writeData)

bit 7 6 5 4 3 2 1 0
内容 アポストロフィ コロン 少数点③ 少数点② 少数点① 少数点⓪

7セグLEDの小数点やコロンなどの表示方法を説明する画像

※ SparkFunの公式ページより引用

まとめ

RaspberryPi(ラズパイ)4 のSPIを使って、7セグメント4桁LED(青)を操作する方法について解説しました。RaspberryPi4で、SPI通信をしてみたい方の参考になればうれしいです。

おすすめの最新書籍

RaspberryPi はじめてガイドが”5”に完全対応して発売です!

RaspberryPi4の時に大人気だった、はじめてガイドがRaspberryPi5に完全対応しました。

RaspberryPiの始め方から、デスクトップ/サーバーとして使う方法、Pythonプログラミングや電子工作まで、RaspberryPiで出来ることは一通り網羅されています。

「とりあえずラズパイ買ってみたけど、何しよう?」「子供の教育にラズパイを使いたい」と思っているかたは、ぜひ読んでみてください。

著:山内 直, 著:大久保 竣介, 著:森本 梨聖, 読み手:太田 昌文
¥2,587 (2024/07/07 08:15時点 | Amazon調べ)
\楽天ポイント4倍セール!/
楽天市場
\ポイント5%還元!/
Yahooショッピング

質問・要望 大歓迎です

「こんな解説記事作って」「こんなことがしたいけど、〇〇で困ってる」など、コメント欄で教えてください。 質問・要望に、中の人ができる限り対応します。

使えたよ・設定できたよの一言コメントも大歓迎。気軽に足跡を残してみてください。記事を紹介したい方はブログ、SNSにバシバシ貼ってもらってOKです。

ABOUT ME
えす
現役のソフトウェアエンジニアです。 C++ C# Python を使ってます。10年ちょい設計/開発部門にいましたが、今はQAエンジニアっぽいことをしています。

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

Index