ラズパイで7セグメントLEDに数字やアルファベットを表示させる方法

7セグメントLEDとは、7つのセグメント(区分)の点灯・消灯を切り替えることで好きな数字を表示させることができる電子部品です。
使用例としては時計や温度計などで使われ、時間や温度を表示させるのが代表的です。
今回は7セグメントLEDの使い方の基礎として、1桁の数字を表示させる方法について解説していきます。
7セグメントLEDの仕組み
はじめに、7セグメントLEDがどういう仕組になっているかを見ていきましょう。
下図のA~GとDPにそれぞれ個別にLEDが入っています。

「7セグメント」ですが、実は8つのLEDが入っているのです。
8つ目はDPと呼ばれ、Decimal Point(小数点)の略です。
数字の右下にある点がDPです。
端子は10本あり、背面から端子が出ています。

各端子と内部回路の繋がりはこのようになっています。

これら8つのLEDの点灯・消灯を切り替えて数字を表示させます。
例えば、A,B,C,D,GのLEDを点灯させ、他のLEDを消灯させれば「3」を表示させることができます。

今回使う7セグLED(5161BS)はアノードコモンと呼ばれ、アノードが全て接続され、カソードが別々となっています。
逆に、アノードが別々でカソードが全て接続されているものもあり、これをカソードコモンと呼びます。
点灯回路の作り方
ラズパイのGPIOを使って8つのLEDを制御していきます。
使ったラズパイはRaspberry Pi 4 Model Bです。
回路図
アノードに3.3Vの電源を接続します。
各カソードには220Ωの抵抗を接続し、流す電流を決めます。
VFは1.8Vなので、電流IFは、
IF = (3.3V – 1.8V) / 220Ω = 6.8mA
となります。
抵抗の反対側にGPIOの各端子を接続します。
GPIOの出力がHi(3.3V)のときはLEDには電流が流れないので消灯します。
GPIOの出力がLo(0V)だとLEDに電流が流れ点灯します。
数字を表示させてみよう
それでは、実際に数字を表示させてみましょう。
まず、数字の3を表示させてみます。
Pythonのコードは次のようにしました。
#モジュールをインポート
import RPi.GPIO as GPIO #GPIO用のモジュール
import time #時間制御用のモジュール
#使用するGPIOピン設定
seg_pin = [19, 26, 16, 20, 21, 13, 6, 12] #[A, B, C, D, E, F, G, DP]
#GPIOの設定
GPIO.setmode(GPIO.BCM) #BCMモードに設定(GPIOの数字で指定するモード)
GPIO.setup(seg_pin, GPIO.OUT) #GPIOを出力モードに設定
#光らせるLED
seg_on = [19, 26, 16, 20, 6] #「3」を表示
#GPIOの出力設定
GPIO.output(seg_pin, GPIO.HIGH) #全出力をHi(3.3V)にする(全LEDオフ)
GPIO.output(seg_on, GPIO.LOW) #seg_onで設定したピンをLo(0V)にする
time.sleep(5) #5秒間待つ
GPIO.output(seg_pin, GPIO.HIGH) #全出力をHi(3.3V)にする(全LEDオフ)
GPIO.cleanup
これでA,B,C,D,GのLEDを5秒間点灯させて3を表示させることができます。

次に数字の5を表示させてみましょう。
seg_onを次のように書き換えます。
seg_on = [19, 16, 20, 13, 6] #「5」を表示
これでA,C,D,F,GのLEDを点灯させることができるので、5が表示されます。

アルファベットを表示させてみよう
7セグLEDでは、数字に限らずアルファベットも表示させることができます。
A~Fまでを表示させるために点灯させる箇所は次のようになります。

seg_onを次のように書き換えてA,B,C,E,F,GのLEDを点灯させればAを表示さることができます。
seg_on = [19, 26, 16, 21, 13, 6] #「A」を表示

seg_onを次のように書き換えてA,E,F,GのLEDを点灯させればFを表示さることができます。
seg_on = [19, 21, 13, 6] #「F」を表示

今回は1桁の7セグLEDを使いましたが、4桁の7セグLEDを使えば時間を表示させるなど、応用の幅が広がります。