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 です。

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

7セグメント4桁LED

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

こちらはレッド版です。

ブレッドボード

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

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

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

エネループ

使い捨ての乾電池もいいですが、エネループなら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通信をしてみたい方の参考になればうれしいです。

おすすめの最新書籍

今月号の日経Interfaceは「Linuxチューニング術50」

今月号のInterfaceは『Linux チューニング術 50』です。

Linuxを組み込んだ機器を”本格的”に作ろうとすると「起動を早くしたい」「いきなり電源を切られてもデータを守りたい」など、対応が必要なチューニングはおおいですよね。

今回の記事は、「カーネルをいじらない」方法でチューニングを行う方法が解説されています。

こういった”実用的”な特集はレアですし、知っておいても損はない情報だと思います。

私も仕事でこの手の問題に何度も遭遇していますが、こういったOSレベルの難しそうな設定を、さらっとできちゃう人はかっこいいですよね。

興味のある方は、以下のリンクから確認できます。

質問・要望 大歓迎です

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

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

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

COMMENT

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

Index