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でも購入することができます。

こちらはレッド版です。

¥5,791 (2023/03/10 20:45時点 | 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は『仕事のChatGPT』!

今週号の日経Interfaceは「仕事のChatGPT」。
イントロとして、ChatGPTをはじめとした大規模言語モデル(LLM)の現在や、エンジニア向け生成AIの活用法。その後の内容で、ChatGPTを使ったPythonでゲームの作り方や生成AIを使ったシステムの製作例が学べます。

全ての内容はここでは紹介しきれないので、詳細は以下のAmazonページをご覧ください。

5月25日発売です。

CQ出版
¥1,430 (2024/04/25 12:53時点 | Amazon調べ)

質問・要望 大歓迎です

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

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

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

COMMENT

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

Index