Pico PR

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

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

はじめに

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の全体画像(ピンヘッダ実装後)
7セグLED(ピンヘッダ取り付け後)

通常、7セグLEDを使おうとすると、表示される「線1本1本」に配線・プログラムが必要なのですが、この基板は制御用のマイコン(ATMega328P)のおかげで、「1234」などの数値を送るだけで表示ができます。配線も電源系と通信系の計5本だけなので超簡単。

「LEDに表示すること」ではなく、表示する内容や、他のプログラムの作成に注力することができます。

私はスイッチサイエンスさんで購入しました。使用するにはピンヘッダの半田付けが10ピン分必要で、本体に付属していないので、ピンヘッダは別途準備する必要があります。

到着時の7セグLED

色違いのもあります。

  • 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)

RaspberryPi Picoのピンアサイン(pinout)の画像

Pico公式サイトより引用

使用する部品

今回使用する部品は以下の通りです。

ブレッドボード

サンハヤト性のブレッドボードです。少々堅めの指し心地ですが、などの品質も高く、おすすめの一品です。

7セグメント4桁LED

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

こちらはレッド版です。

¥5,791 (2023/03/10 20:45時点 | 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
内容 アポストロフィ コロン 少数点③ 少数点② 少数点① 少数点⓪

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

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

まとめ

RaspberryPi PicoでSPI接続の7セグLEDを使う方法を解説しました。

OLEDディスプレイが格安で買える時代ですが、7セグLEDはいかにも工作・プロダクトっぽくて楽しいですよね。

PicoでSPI使う方法の解説を書こうと思った時に、使いやすくて、面白そうなのでこの7セグLEDを買ってみました。「7セグLEDを使ってみたい」「SPIの使い方が知りたい」という人の参考になればうれしいです。

お知らせ

今月号のInterfaceは『RaspberryPi 5』特集

3月25日発売のInterfaceは「RaspberryPi 5」特集!

実験などを通じた性能測定や特徴・変更点の解説。新規に追加されたI/Oボード「RP1」の特徴と謎。Pi5のはじめかたやLinuxコマンド入門などが特集されています。

Pico/Pico W関連のおすすめ本

RaspberryPi Pico / Pico W関連のおすすめ本を独断と偏見で3つ選んでみました。Picoやるならとりあえずこれ買っとけ的な本や、電子工作全般で使える本などを厳選しています。

見た目のいい工具をお探しの方へ

よく使うツールは『見た目』が重要。モチベもあがりますし、仲間との話のネタにもなります。以下のサイトは、デザイン性の高い工具が集めたサイトなので、興味がある方はぜひご覧ください。

質問・要望 大歓迎です

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

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

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

COMMENT

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

Index