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公式サイトより引用

使用する部品

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

ブレッドボード

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

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

7セグメント4桁LED

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

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

こちらはレッド版です。

ピンヘッダ

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の使い方が知りたい」という人の参考になればうれしいです。

お知らせ

そぞらさんのRaspberryPi Pico Wの本が登場

RaspberryPi 界隈で有名、Xでもバズり中の「そぞら」さんがPico Wの本を出しました。

Pico Wを使って、電子工作やMicroPythonの文法、AI活用にいたるまでをゼロから学ぶことができるので、興味のあるかたはぜひご覧ください!

著:そぞら
¥2,803 (2024/07/23 14:38時点 | Amazon調べ)
\楽天ポイント4倍セール!/
楽天市場
\ポイント5%還元!/
Yahooショッピング

MicroPythonのプログラミングガイドブックが遂に発売!

このブログでよく使用している「MicroPython」の本が遂に発売になりました。

MicroPythonの言語仕様から、プログラミングの仕方までが”みっちり”学べます(笑)。

普段別言語で組み込み系の開発をしている人や、これからマイコンの学習が必要となってしまった(専門分野の)学生などを対象としているため、初心者用とはいきませんが、自前のライブラリの作成を目標にしているので、これ一冊で「ガッツリ」と使い方を学ぶことができます。

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

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

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

質問・要望 大歓迎です

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

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

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

COMMENT

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

Index