35
Raspberry Pi Picoで7セグメントディスプレイを使う方法

昔のデジタル目覚まし時計に見られるような7セグメントディスプレイは、Raspberry Piを使ったプロジェクト、特にRaspberry Pi Picoを使ったプロジェクトに最適です。7セグメントディスプレイは、ゲームのスコア表示、温度や距離などのセンサーデータの表示、時間の表示などに使えます。文字を表示することも可能です。

市場には様々な種類の7セグメントディスプレイがあり、桁数や色だけでなく、コントローラーボードの有無によっても異なります。安価な7セグメントディスプレイの中には、コントローラーが付属しておらず、各ライトに別々のピンを使用しているものもあります。各桁に7つの異なるライトが付いていることを考えると(「7セグメントディスプレイ」と呼ばれるのはこのためです)、ピンの数は非常に多いと言えます。 

しかし、より高性能な7セグメントディスプレイには、わずか4本のピンでI2C接続を行うコントローラボードが搭載されており、TM1637コントローラボードから電源供給を受けます。以下では、TM1637を搭載した7セグメントディスプレイをRaspberry Pi Picoで使用する方法をご紹介します。

必要なもの

  • 7セグメントディスプレイ。色々な機種があるのですが、今回はこれを使用しました。
  • はんだ付けされたピン ヘッダーと MicroPython を備えたRaspberry Pi Pico 。
  • メス-メスジャンパーケーブル4本

これまで Pico を使用したことがない場合は、Raspberry Pi Pico のセットアップ方法と Raspberry Pico にピンをはんだ付けする方法についての弊社の記事をご覧ください。   

Raspberry Pi Picoに7セグメントディスプレイを接続する方法

7セグメントディスプレイには、CLK、DIO、GND、VCCの4つのピンがあります。メス-メスのジャンパー線を使用すれば、接続にブレッドボードは必要ありません。

7セグメントディスプレイ Pi Pico

(画像提供:Tom's Hardware)

7 セグメント ディスプレイの次のピンを PIco に接続します。

  1. VCC ピンをPico の 3V3 に接続します (物理ピン 36、右側の 5 番目)。
  2. GND ピンをPico の GND (物理ピン 34、右側から 3 番目) に接続します。
  3. CLK ピンをPico の GP16 (右側の最後のピン) に接続します。
  4. DIO ピンをPico の GP17 (右側の最後から 2 番目のピン) に接続します。

CLKピンとDIOピンは、それぞれI2C SCLとSDAをサポートするPico上の任意の2つのGPIOピンに接続できます。また、GNDピンはPicoの8つのGNDピンのいずれかに接続できます。詳細はRaspberry Pi Picoのピン配置をご覧ください。

Tom's Hardware の最高のニュースと詳細なレビューをあなたの受信箱に直接お届けします。

7セグメントディスプレイ Pi Pico

(画像提供:Tom's Hardware)

MicroPythonで7セグメントディスプレイをコーディングする方法

私たちは、Mike Causer による優れた TM1637 MicroPython ライブラリを大いに活用し、さまざまな表示オプションを表示するスクリプトを作成します。このスクリプトは、後で自分のプロジェクトで使用できます。 

5. Mike CauserのTM1637 githubプロジェクトからtm1637.pyファイルをダウンロードします。他のファイルは必要ありません。 

6. tm1637.py を Pico のルートディレクトリにコピーします。MicroPython がインストールされた Pico はドライブレターとして表示されないため、最も簡単な方法は、Thonny、IDE、またはお好みのツールで tm1637.py を開いて保存することです。 

7. Thonny または任意の MicroPython IDE で 新しい MicroPython スクリプトを作成します。

8.必要なライブラリをインポートします。

import tm1637
from machine import Pin
from utime import sleep

utime ライブラリを使用して、各関数の間に 1 秒間の「スリープ」遅延を設定し、ディスプレイ上で関数を確認する時間を確保します。 

9. 「mydisplay」というtm1637.TM1637オブジェクトのインスタンスを作成し、CLKピンとDIOピンの正しいピン番号をパラメータとして入力します。

mydisplay = tm1637.TM1637(clk=Pin(16), dio=Pin(17))

10. 「show」メソッドを使用して、任意の4文字を表示します。文字または数字を使用できますが、Wなど多くの文字は表示が不自然になることに注意してください。4文字以上入力した場合、最初の4文字のみが表示されます。パラメータ文字列は必ず引用符で囲んでください。

mydisplay.show(“Pico”)
sleep(1)

11. 4 つの空白スペースを含む「show」を使用して画面を空白にします(画面に 4 つの数字が表示されていると仮定します)。

mydisplay.show(“ “)
sleep(1)

ディスプレイをブランクにしないと、プログラムの実行が終了しても画面は点灯したままになることに注意してください。ディスプレイを変更する際にブランクにする必要はありませんが、最大文字数未満のshowコマンドを再度実行した場合、置換されなかった文字は画面に残ります。例えば、show(“halo”) を実行してから show(“20”) を実行すると、画面には 20lo と表示されます。 

12.整数を表示するには「number」メソッドを使用します。パラメータを引用符で囲まないでください。正の数でも負の数でも表示できますが、負の数の場合はマイナス記号用に1文字を確保する必要があります。表示可能な桁数よりも大きな数値を入力した場合(例:4桁表示で12345と入力した場合)、画面には負の数として「9999」または「-999」と表示されることに注意してください。

mydisplay.number(-123)
sleep(1)

7セグメントディスプレイ Pi Pico

(画像提供:Tom's Hardware)

色付きで時刻を表示するには、「numbers」メソッドを使用します。パラメータとして2桁の数字を2つ入力すると、画面にコロン(:)がある場合は、数字の間にコロンが表示されます。この例では12:59と表示されます。

13. 「show」メソッドを使って数字や文字を表示できることを考えると、なぜnumberメソッドを使う必要があるのか​​疑問に思うかもしれません。1つは、整数を文字列に変換する必要がないこと、もう1つは、画面に表示される桁数が必要なだけなので、数字を右揃えにするために空白を入力する必要がないことです。

mydisplay.numbers(12,59)
sleep(1)

14. 明るさ調整メソッドを使用して明るさを調整します。パラメータとして0(最低)から7(最高)までの数値を入力できます。

#adjust the brightness to make it loewr
mydisplay.brightness(0)
sleep(1)

15. スクロールテキストを表示するには、「scroll」メソッドを使用します。最初のパラメータとして文字列(引用符で囲む)を入力し、「delay=」とスクロール速度を制御するミリ秒数を追加します。delayパラメータを省略した場合、デフォルトの250ミリ秒になります。

mydisplay.scroll("Hello World 123", delay=200)
sleep(1)

7セグメントディスプレイ Pi Pico

(画像提供:Tom's Hardware)

16. 摂氏温度を表示するには、「温度」メソッドを使用します。このメソッドでは、数字の後に度記号と文字「C」が追加されます。温度は1桁または2桁の整数で入力できます。負の温度も入力できますが、1桁のみです。

mydisplay.temperature(99)
sleep(1)

7セグメントディスプレイ Pi Pico

(画像提供:Tom's Hardware)

17. プログラムが終了したときに画面が点灯したままにならないように、画面を再度空白にします。

mydisplay.show(“ “)

これが最終的なコードです

import tm1637
from machine import Pin
from utime import sleep
mydisplay = tm1637.TM1637(clk=Pin(16), dio=Pin(17)) # Show a word
mydisplay.show("Pico")
sleep(1) #blank the screen
mydisplay.show(" ")
sleep(1) #show numbers
mydisplay.number(-123)
sleep(1) #show a time with colon
mydisplay.numbers(12,59)
sleep(1) #adjust the brightness to make it loewr
mydisplay.brightness(0)
sleep(1) #show scrolling text
mydisplay.scroll("Hello World 123", delay=200)
sleep(1) #show temperature
mydisplay.temperature(99)
sleep(1) #blank the screen again
mydisplay.show(" ")

Causer氏がGitHubページで公開している他の方法には、数値を16進形式に変換したり、16進数で入力したりするものなどがあります。しかし、7セグメントディスプレイとRaspberry Pi Picoを使う上で、ほとんどの人が必要とすると思われる主な方法はこれらです。

Avram Piltchは特別プロジェクト担当の編集長です。仕事で最新ガジェットをいじったり、展示会でVRヘルメットを装着したりしていない時は、スマートフォンのルート化、PCの分解、プラグインのコーディングなどに取り組んでいます。技術的な知識とテストへの情熱を活かし、Avramはノートパソコンのバッテリーテストをはじめ、数多くの実環境ベンチマークを開発しました。