128×64のドットマトリクスをESP32で制御する方法
皆さんこんにちは。
早速ですが、僕はある時、8*8LEDドットマトリクスを使ったら、あの点々だけでゲームを作ることができるのではないかと思いました。
そこで、ネット上でいろいろ調べてみたところ、すでにそれを使ってゲームを作られている方がいるようだということがわかりました。
こちらの方は、16×16ドットのマトリクスを使って作られているようですが、僕が想像していたものとほぼ一致しました。動画ではスペースインベーダーが作られているようです。
プログラムさえ工夫すれば、実際に作ることが可能ということがわかりましたが、どうせ作るならだれもやったことのない方法で作ってみたいし、8*8LEDドットマトリクスなんかよりも、画素の細かくて多くの色が表現できるもので作りたいと思いました。
というわけで、いろいろ調べた結果、どうやらドット数が多いフルカラーLEDドットマトリクスというものが世の中にはあるということがわかりました。
そこで今回は、こちらの製品についての制御方法などについての解説をしていこうと思います。
フルカラーLEDドットマトリクスについて
このマトリクスについて軽く説明しますと、8*8よりも画素を多くしたうえに、一つ一つのドットの光る色を巧みに制御することができるディスプレイということになります。
イメージしやすいように言えば、街中でよく見かける電光掲示板を手ごろなサイズにしたものだといえます。
通常は、64*32や64*64といったものがよくつかわれるようですが、僕は欲張りなので、もっと細かく画像を表現したいと思って128*64という大きなディスプレイを購入することにしました。
とはいっても、このときはまだ、パネルのどのポートがどの役割を果たしていて、プログラムをどのように書けば動くのかについて全くわかっておらず、不安な気持ちもありました。
ただ、めちゃくちゃググった結果、どのような手順で操作するのかについて理解することができたので、僕と同じことにチャレンジしてみようと思っている方に向けてわかりやすく解説していこうと思います。
HUB75という規格で制御する
僕は最初、このことを知らなくて割と苦労したのですが、どうも世の中に出回っているLEDドットパネルはほとんどがHUB75という規格に則って制御するようです。
僕が購入したパネルは128*64でしたが、ネットで書かれているものはほとんどが64*32か64*64のパネルについての制御のことでしたので、「先導してくれる情報がない!」と思って少し焦りました。
ただ、先ほども言いましたが、この世のほとんどのLEDドットパネルはHUB75という規格をもとにして作られているので、実際のところ64*32だろうが128*64だろうが、はたまたそれより細かいものであろうが、制御の流れは同じということになります。
僕は、この点について早く気づいていれば、そこまで苦労することがなかったのにと少し後悔しましたが、気を取り直して、某サイトの64*32の制御方法を参考にして理解していこうと思いました。
パネル制御に使うピンの配置について
ここで一つ前提知識として知っておかなくてはならないのは、パネルを動かすためについているそれぞれのピンの位置と役割についてです。
僕が購入したパネルのピン配置は以下のようになっていました。
ピンのそれぞれの役割については、次の項を見ていただければわかると思います。
制御の流れ
大まかなHUB75の制御の流れについて書きますと、以下の通りです。
ちなみに128×64ドットのパネルに合わせて書いています。
- 全ピンをLOWにする。
- R1 G1 B1 R2 G2 B2をLOWかHIGHにする。これで1ピクセルごとの色を指定できる。
- CLKをHIGHにする。
- CLKをLOWにする。3と4によりそのピクセルは2で指定した色に決定され、次のピクセルの指定に移る
- これと同じように、2~4をあと128回繰り返す。これで1セクションのデータ分書き込み終わる。
- ABCDEの5bit使って送り込みたいセクションを決める。最初は00000とか。(R1,G1,B1用とR2,G2,B2用でそれぞれ32セクションある)
- OEをHIGHにする。画面表示有効のフラグらしい。
- LAT(STB)をHIGHにする。これでLEDが光る。
- LAT(STB)をLOWにする。
- OEをLOWにする。
- 以上、2~10をセクションを変えながら32回分繰り返す。これを高速で繰り返すことで画面を全部表示できる。
参照した記事は以下の記事です。
https://note.com/cuboktahedron/n/n3925ea7aeae2
1~11の手順で示した通りに操作すれば、LEDパネルを表示させることができるはずです。
ここで誤解しやすいところがあるのですが、パネルを上半分と下半分でそれぞれ32行ずつに分けた時に、R1,G1,B1は上半分にあるピクセルの色を指定するためのピンで、R2,G2,B2は下半分のためのピンになります。
ですので、1と2のピン二つを使って色の濃淡を表現するというわけではないのです。
また、セクションを指定するピンはA~Eの5ピン、つまり32ビット分しかありませんので、上半分と下半分でそれぞれ共用することになります。ご注意くださいませ。
ESP32とLEDパネルを接続する
今回使用するマイコンはESP32ですが、パネルのそれぞれのピンを以下のようにESP32のピンと接続しました。
- R1 → 32番ピン
- G1 → 33番ピン
- B1 → 27番ピン
- R2 → 14番ピン
- G2 → 12番ピン
- B2 → 13番ピン
- E → 23番ピン
- A → 22番ピン
- B → 21番ピン
- C → 19番ピン
- D → 18番ピン
- CLK → 5番ピン
- LAT → 17番ピン
- OE → 16番ピン
あとはこれらのピンの組み合わせをもとにプログラムを組んでいくだけです。
下の画像が実際に配線をしてみた時の画像です。
具体的なプログラムについては、また別の記事にまとめようと思いますので、今回はこの辺で終わりにしたいと思います。
次回は・・・
次回はプログラム編です。
後日追加の記事をアップしようと思いますので、ぜひそちらの方もご覧になってくださるとありがたく思います。
それではまた~。