MAX7219 8x8 LED モジュールで表示してみよう
MakeCodeエディターの「拡張機能」を探索すると、さまざまデバイス用の拡張機能が提供されていることがわかります。そこで見つけたのが、この「MAX7219」です。ん?確かこれ我が家にあったよな、とやってみました。
なかなかインパクトある表示が出来るデバイスなので、子どもウケもいいかもしれません。
MAX7219 8x8 LEDで
インパクトある表示をしてみよう
(本ページ作成 2021.05.20)
MAX7219 & 8x8 ドットマトリックスLED
紹介する「MAX7219 8x8 ドットマトリックスLEDモジュール(以下「MAX7219LEDモジュール」と略)」は、8x8マトリックスLEDと制御用の「MAX7219」を一つのモジュールにしたものです。
1つのMAX7219で1つの8x8マトリックスLEDを制御することができます。これは連結することも可能で、写真のように連結したものも販売されています。
白く見える丸の1つ1つがLEDで、それぞれのLEDの点灯消灯で文字を表示します。連結すると数文字一度に表示できるので、かなりインパクトある表示が可能になります。
MAX7219
MAX7219はMaxim Integrated社のシリアルインターフェイス・8桁LEDディスプレイドライバです。
データシート https://pdfserv.maximintegrated.com/jp/ds/1339J.pdf
MAX7219を使うと、7セグメントLDEx8桁や8x8ドットマトリクスLEDを少ない本数の信号線で制御できます。送られてきたデータを元に点灯させるドットまたはセグメントを設定し、高速で切り替えながら転送させる処理を行います。こうすることでホストコンピューターの負担を減らす役割があります。
8x8ドットマトリックス
格子状に64個のLEDを並べて1つのパッケージにしたものです。MAX7219では1列8個のLEDがカソード共通となっているタイプのものを使用します。
連結
MAX7219の特長として「連結」に対応していることがあります。MAX7219の「出力」を次のMAX7219の「入力」に数珠繋ぎで接続すると、一つのディスプレイとして扱うことができます。
拡張機能
micro:bitにデバイスを接続して使うとき、「拡張機能」で追加されるブロックの機能でも使い勝手が変わります。
MAX7219LEDモジュールには、alankrantas作の拡張機能が提供されています。
MakeCodeエディターで「設定>拡張機能」を選択し、「MAX7219」を検索し読み込みます(2021年5月現在、同じバージョン0.0.3が2つ表示されます)。
この拡張機能「MAX7212」を読み込むと、次のようなブロックが読み込まれます。
MAX7219LEDモジュールの設定や文字の表示に関するブロックのほか、オリジナルパターン用ブロックなどの機能を持ったブロックが用意されています。
接続方法
今回は、4連タイプのMAX7219LEDモジュールを例に接続法を説明します。
配線
多くのMAX7219LEDモジュールには、「IN(入力)」「OUT(出力)」のコネクタがついていると思います(連結版は最終モジュールのOUT側にコネクタが取り付けられていない例も多い)。
micro:bitとMAX7219LEDモジュールの配線はプログラムでも変更できますが、拡張機能の初期値に合わせた配線例を示します。他のデバイスを使用していて例示しているmicro:bit側のピンが使えないときは、別のピンを使い、設定ブロックのピン設定を変更しても大丈夫です。
micro:bit(拡張ボード) | MAX7219LEDモジュール | 備 考 |
P16 | CS | |
P15 | DIN | |
P13 | CLK | |
3V(3.3V) or 5V | VCC | ※注意 |
GND | GND |
次の写真はmicro:BreadBoardを使った配線例です。
電源について
データシートでは、MAX7219LEDモジュールの電源電圧は4.4~5.5Vとなっていますが、3.3V電源でも動作しました。拡張機能の制作例ではmicro:bitからの給電で動作させていますが、LEDを多数点灯させる場合などは、micro:BreadBoard等をつかって、3.3Vまたは5Vを直接給電したほうが望ましいと思います(5Vのほうが明るく点灯します)。
※micro:BreadBoardの場合、ボードのスイッチをONにしないと、MAX7219LEDモジュールには給電できませんので注意して下さい。
プログラム
MAX7219LEDモジュールを使って文字を表示するプログラムを実際に作成しながら、各機能の基本的な使い方を説明していきます。
4連タイプのモジュールを例に、「左寄せ・右寄せで文字表示」「スクロールしながら長い文字列を表示」をさせてみます。これらのプログラムを応用すれば、計測データや長めのメッセージをインパクトある表示で伝えることができます。
設定について
今回は複数の文字を一度に表示できる「4連タイプ」を使います。「接続方法・配線」で例示している結線をしている前提で説明します。
初期化(接続数と結線)
プログラムのはじめに、MAX7219LEDモジュールのの初期化を行います。
接続数
連結タイプのモジュールを使用する場合は、その数を「Number of matrixs」に設定します。4連タイプであれば「4」です。
結線
MAX7219LEDモジュールとmicro:bit(拡張ボード)の接続を設定します。「CS」「DIN」「CLK」が接続されているmicro:bitのピン名を設定します。「MISO」は未接続ですが、他のSPIデバイスと整合性を取るためピン名を設定します。
このブロックではありませんが、電源(3Vまたは5V)とGNDの配線も忘れずにしてください。
表示順と表示向き
連結タイプのMAX7219LEDモジュールでは、「表示順と表示向き」の設定も必要となり、次のブロックを使います(道具箱「MAX7219」のその他にあります)。
このブロックでの設定にはMAX7219LEDモジュールの向きが関係します。
Revers printing order(表示順の反転)
数珠繋ぎで接続したMAX7219LEDモジュールでは、マイコンにつながっているINコネクタから一番「遠い」モジュールに「0」、「近い」モジュールに大きな番号が割り当てられます。4連モジュールの場合次のようになります。
向かって左側に「INコネクタ」→「(IN)3・2・1・0」
向かって右側に「INコネクタ」→「0・1・2・3(IN)」
一方、MAX7219拡張機能のブロックのIndex番号は、一番右が「0」とする必要があります。
モジュラーの番号とIndex番号を一致させるための設定が「Revers printing order」です。
初期値の「偽」では、モジュラー番号をそのままIndex番号としますが、「真」にすると、反転させます。
つまり、INコネクタが左側のときは「偽」、右側のときは「真」を指定します。
Rotate matrix display(マトリックス表示の回転)
次にドットマトリックスLEDのどの辺を「表示の上」にするかを設定します。これは、ドットマトリックスLEDの取付向きにより変わるので製品によって設定が必要になる場合があります。
例えば、筆者が使っているMAX7219LEDモジュールの場合、「Rotate matrix display」が初期値「none」のままだと、次のように表示されます。
一番左のモジュールを見ると、「A」が右に寝ているようです。この様な場合、「Rotate matrix display」は「counterclockwise(反時計回り)」を指定し向きを変更します。
多連タイプのMAX7219LEDモジュールを使う場合、接続数とあわせ「Revers printing order」と「Rotate matrix display」の設定を行い、正しく表示出来るようにしましょう。
その1:文字を表示させる
文字列を表示するブロック
文字を表示させるブロックは次の2つがあります。
「Display text(align right)」
文字列を「右そろえ」で表示します。もし文字列が表示可能幅を超える場合は、文字列の終わりの方が表示され、文字列の前の方は表示されません。
「clear screen first」を「真」に設定すると、文字列を表示する前にスクリーンを消去します。
「Display text(align left)」
文字列を「左そろえ」で表示します。もし文字列が表示可能幅を超える場合は、文字列のはじめの方が表示され、文字列の終わりの方は表示されません。
また表示開始位置を右側にずらす「オフセット」も指定できます。「0」のときはマトリックスの一番左から、数字を増やすと、1ドットずつ右にずらします。
「clear screen first」は「Display text(align right)」と同じです。
プログラム例
文字列を表示する2つのブロックを使って、次のような表示をするプログラムを作成します。
1)「12」という文字列を、3ドットオフセットして左そろえ表示
2)「AB」という文字列を、右そろえ表示
つまり「 12 AB」と表示するプログラムです。
リンク先こちらです(https://makecode.microbit.org/_YtUCbgLamUs9) 。
INコネクタが4連モジュールの左側にある場合のプログラムです。
プログラム中の「※」印の「一時停止」ですが、実際に実行させてみたところ、電源投入直後、MAX7219側の準備ができていなかったため、表示がうまく行かないことがありました。システムの電源を入れた後時間を置いて、MAX7219の設定を行うようにしました。2番目の「一時停止」も設定後に値が安定するまでの時間を稼ぐために入れています。
「Display text(align right)」では、前に表示した文字を消さないよう、「clear screen first」を偽としています。
実行例
プログラムの実行例を示します。
左寄せで「12」、それを消すことなく右寄せで「AB」と表示されていることがわかります。
その2:スクロール表示
4連モジュールでも一度に表示できる文字数は5~6文字程度です。 長い文字列を表示したい時は、電光掲示板のようにスクロール表示させる方法があります。
スクロール表示するブロック
「Scroll text 」ブロックが、スクロール表示のためのブロックです。このブロックを使うとメッセージのような長めの文字列もわかりやすく表示できます。次のような項目を設定できます。
Scroll test
スクロール表示したい文字列を入力します。
delay(ms)
文字を表示して、次に1ドットずらして表示する間隔をミリ秒単位で設定します。数字が小さいと速く、数字が大きいとゆっくりスクロールすることになります。あまり速いとメッセージが読み取りにくくなりますが、あまりゆっくりだと間延びした表示になります。用途と好みで設定するとよいでしょう。
at the end wait(ms)
一度文字列のスクロール表示が終わり、次のスクロールが始まるまでの間の時間を指定します。あまり長くすると間延びしますので、これも用途と好みで設定するといいでしょう。
プログラム例
同じメッセージを流し続けても面白みに欠けるので、「1kaime」「2kaime」・・・と50までカウントアップしながらスクロール表示をするプログラムを作成してみました。
リンク先はこちらです(https://makecode.microbit.org/_Vf2gvfaqEWfC)
「最初だけ」ブロックの中では、MAX7219LEDモジュールの初期化を行います。本プログラムは「4連LED・左INコネクタ」の場合を示しています。
「ずっと」ブロック内では、カウントアップしながら「xxkaime」とスクロール表示する処理を行います。「Scroll text」ブロックでは「文字列をつなげる」ブロックなども使えますので、計測値と単位の組み合わせなどもスクロール表示させることが出来ます。
実行例
プログラムをmicro:bitに書き込み、装置に装着して電源を入れて実行すると、「1kaime」「2kaime」とスクロール表示を行うと思います(表示しないときは、電源を切って再点検)。
まとめ
8x8ドットマトリックスモジュールは大きさもですが、多数のLED(4連だと256個)が光って、メッセージを流すとかなりインパクトがあります。
実はこのことはとても大事なことで、コンピューターで正しい計測や計算をしても、必要な人にわかりやすく伝わらないと、コンピューターを有効に使っているとはいえません。
場合によっては、このようなインパクトがある表示方法を工夫するとよいでしょう。