RaspberryPi Picoで液晶パネルを使う!

f:id:PocketGriffon:20211124075841j:plain

今から1ヶ月以上前、RaspberryPi Picoに小型の液晶モニタを取り付けて、PC-8001エミュレータを動かすということをやってみた。

 

あれからもう1ヶ月以上も経つのか…と驚きを隠せない!(^-^;

 

扱った液晶パネルが240x135ドットということもあり、画面解像度的にはPC-8001が限界でそれ以外の機種はPC-8801を試す程度で終わっていた。

どちらかといえばPicoの性能よりも液晶サイズの問題が大きくて、もっと大きな液晶が繋げられたらチャレンジしてみたい事はいくつかあるなぁ…とか思ってた。

 

そしたら!

先日なにげに秋葉原マルツ電波に行ってみたら、Pico用の大きなモニタが置いてあった!

f:id:PocketGriffon:20211124080617j:plain

え!?こんなの出てたの知らなかった!!!

この前、Picoを5個セットのシート買いしてしまった事もあり、Pico本体には余裕がある。

使い方その他が全く不明なままだったが、えーいままよ!とばかりに衝動買いしてしまった(^^;;

 

とりあえず動かしてみたい!

手に入れたからには、カタチはどーあれ動かしてみたい!

まずはPicoを取り付けるところから始める事に!(^^)

f:id:PocketGriffon:20211124082626j:plain

Picoにピンヘッダをはんだづけし、液晶パネルの裏側にあるソケットに挿し込む。

これだけでOKらしい!

あとから気がついたけれど、SDカードも入れられるようだ。これは便利!(^^)

 

何年か前だったら「ピンヘッダをはんだづけ?無理ムリ!」って感じに諦めているところだけど、ここ数年ははんだづけに対する敷居がどどーんと下がっていて、こういう楽しげなモノにもチャレンジ出来るようになったのは喜ばしい(^-^)

 

さて……物理的に繋がったは良いけれども、これってどうやって制御するん??(@_@;

知識情報その他が全くない状態で手に入れてしまったので、正直困った!

 

 

ここのサイトに商品に対する情報がたくさん載ってた!

ここの「Resources」タブにサンプルプログラムも置いてあった。これは助かる(^-^)

さっそくダウンロードして、試しにビルド環境を作ってみた。以前作った環境も使いやすいとは到底言えなかったが、そこに入れるカタチになるのでさらに使いにくく…汗

 

そして動かしてみたところ……

f:id:PocketGriffon:20211124092456j:plain

画面は表示されたけれども、更新速度がめちゃくちゃ遅い…。全画面書き換えに0.5秒くらい掛かってる気がする。あれれ?そういうモンなの??

この速度だと頻度の高い画面更新を必要とするものは作れないな…

 

そんなこんなで悪戦苦闘していたところ、あお氏(@hd61yukimizake) から

Arduino IDEでRaspberryPi Pico の開発環境が構築出来る事を教えてもらった!

なんと!そんな便利なことが出来たなんて!!

tomosoft.jp

そしてST7789(今回の液晶パネルの型番)のライブラリも存在する事が判明!

これは勝つる予感!!(^-^)/

 

……と、だいぶ楽観視していたのですが、実際に試してみると全く動かず(T-T)

そして動かなかった時に、何も出来ない自分が居た…orz

 

うーん…これは(T^T)

そもそもSPIってなんだろ?GPIOじゃなくて?(こういう混同も普通に起きてる)

何をどうしたらこうなってるのかがさっぱり理解できてない…。

 

これはもう……理解するために作るしか無いでしょう、最初から!!!

 

無謀な挑戦!

使ったこともない液晶パネルのドライバを作るなんて、そんな壮大な事が出来るはずがない。

私の使い方限定で良いので、自分自身が使いやすければいいや的な発想。

私が作るものと言えばエミュレータ系が多いわけで、そうなると「フレームバッファの内容をLCDへ送り込めれば良い」という事になる。

ドライバというよりは、ライブラリ群だ。

よし、これのみに限定して動くものを作ってみよう!

 

幸い、速度は速くないけれども動くサンプルが手元にあったので、これを元にLCDの初期化ルーチンを組んでいく。

SPI通信というものを根本的に理解しているわけではないけれども、サンプル的なものがM5Stack環境にもたくさんあったため、似たような感じで実装していった。

 

f:id:PocketGriffon:20211124101329j:plain

サンプルが置いてあったサイトにST7789のデータシートへのリンクもあったため、それとサンプルプログラムをにらめっこする事数時間、ようやく画面に矩形が表示出来た!

この段階では、画面の左下が起点となっていて、気持ち的には横方向に200ドット、縦方向に100ドットの青い矩形を書いたつもりが、こういう(回転した)カタチとなって表示された。

 

青い矩形以外のノイズみたいなモノは、おそらく電源入れた際のメモリ内容がそのまま表示されてるもので、初期化しない状態はこんな感じに見えるようだ(^^)

 

その後、ネットから画像を拾ってきて(ごめんなさい!)適当に表示させてみた。

f:id:PocketGriffon:20211124102016j:plain

これはjpegファイルを表示しているのではなく、jpegファイルを外部ツールで都合の良いデータ形式に変換し、そのままプログラム内に組み込んだ。

同時にLCDの初期化部分を変更して、画面の左上が起点となるようにする事が出来た!

これで脳内のイメージと映像の方向が合致した(^-^)

 

そして気になる画面更新速度は、当初のものよりも約10倍速となり、秒間20回以上書き変えることが出来るようになった!

それでもM5Stackに比べるとだいぶ遅いんだけど、そういうモノかしらん?

PicoのCPU速度をオーバークロックしてみても更新速度は速くならなかったので、現状のプログラムでは限界なのかも知れない。

 

よーし、とりあえずここまで動いたら何か作ってみるよ!

タッチパネルやSDカードへの対応とかはまーったくしていないけど、必要になったら取り組もうかな…うん(-_-;;

 

ではまた次回!(^-^)ノ