Twitterで、@tokyo_ff さんに1.3インチの240×240小型液晶の存在を教えてもらいました。SPI接続でRaspberryPi や Arduinoで使えそうです。
こういう小型サイズの液晶だと、解像度128×128止まりが多いのですが、これは240×240!高解像度!お値段1000円弱!
買うしかない!
(ぜいたくを言えば、もうちょい横長で320×240あれば…なのですが。それは今後の商品展開に期待です!)
ということで、到着しました。小さいー!
接続はSPI。端子を確認してみます。
液晶部品扱うの初めてなので、何が何やら…?
ここの通販サイトに載ってる情報が一番詳しかったです。
https://www.banggood.com/1_3-Inch-IPS-TFT-LCD-Display-240240-Color-HD-LCD-Screen-3_3V-ST7789-Driver-Module-p-1383404.html
SDAやSCLってI2Cだけの用語ではなかったんですね。
具体的な使用事例を探してみたのですが「こう接続すれば動作するよ~」みたいなズバリは見つかりませんでした。
コントローラはST7789を使っているそうなので、検索してみるとArduino用のAdaFruitのライブラリがありました。
AdaFruit ST7735 and ST7790 Library
https://github.com/adafruit/Adafruit-ST7735-Library
初期化するには、Adafruit_ST7789(int8_t cs, int8_t dc, int8_t mosi, int8_t sclk, int8_t rst = -1); を行うとのこと。接続したピン番号を指定します。
ということで、
dc = DC
mosi = SDA
sckl = SLC
rst = RES
…ってことでしょうかね。
csは… あれ?無いぞ。液晶パーツだと、たいていCS(Chip Select)が付いているみたいなのですが…。
とするとBLKがそれ?違うよなあ…。ためしに、csにBLKつないで動かしてみましたが、動作しませんでした。
どこかに使用事例は無いものかと「SPI 1.3 240 Arduino ST7789 CS」で検索してみたところ、こんな投稿が!
New Arduino library for china’s 1.3″ IPS SPI 240x240px display. This displays don’t have CS pin, but work very well with new library.
(https://plus.google.com/+%D0%98%D0%BB%D1%8C%D1%8F%D0%90%D0%BD%D0%B0%D0%BD%D1%8C%D0%B5%D0%B2/posts/bXLUrTUNp7r)
まさにこれですね!CSピン無いけど、このライブラリで動くよ!とのこと。
ananevilya/Arduino-ST7789-Library
https://github.com/ananevilya/Arduino-ST7789-Library
初期化関数を確認してみたところ、Arduino_ST7789(int8_t DC, int8_t RST, int8_t SID, int8_t SCLK, int8_t CS = -1);
たしかに、CSピン無しでもいけそう!
ちなみに、SID / SCLK を省略して、Arduino_ST7789(int8_t DC, int8_t RST, int8_t CS = -1);
と書くと、ハードウェア制御の SDA/SCLを使ってくれます。こっちの方が高速とのこと。
SIDとかmosiとかSDAとか、同じものを表しているのに違う言い方がいっぱいあって混乱しますね…。
ということで、ライブラリ付属のサンプル使って表示。
うーん?表示はされているようだけどなんか変だぞ。
https://t.co/bEUBN5vbaS
ここのライブラリ使って動かしてみたのだけど、画面がうまく表示されない…。
描画自体はできてるっぽくて、リセットボタンを押した一瞬だけは正常に表示される状況。むむー。 pic.twitter.com/Ir8duBWQvJ— Nochi (@shikarunochi) 2018年12月1日
リセットボタンを押すとクッキリ表示される。謎。
このあと、設定値を変更してみたり、コードを入れ替えてみたりしましたが、状況は改善せず。
なんか変なところあるかなー、と見直していて、気が付きました。
SDA/SCL/DC/RES に繋いでる電圧が 5V のままだった!
電源だけは3.3Vを接続したけど、残りの信号線については何もしてなかった!これらも3.3Vじゃなきゃダメですね。
電圧は、簡易的に抵抗を使って調整できるとのこと。
Make.:5Vから3.3Vに変換する
http://make.bcde.jp/circuit/5v%E3%81%8B%E3%82%893-3v%E3%81%AB%E5%A4%89%E6%8F%9B%E3%81%99%E3%82%8B/
電圧調整してみると…
キレイに出た!
Arduinoの5Vをそのまま繋いでおりました。オハズカシイ。壊れてなくてヨカッタ…。
抵抗をはさんで電圧下げたらキレイに表示されましたー! pic.twitter.com/6I7olbWBuv— Nochi (@shikarunochi) 2018年12月5日
こちらのパックマンも、ほぼ描画部分だけ差し替えて動きました。
Arduino MEGA2560で動かしてるので、メモリに載りきらず、配列のデータをPROGMEM にしたりしました。このせいもあってかなり重くて、遊べるレベルにはならなかったです。あと表示がチョット変ですが…何となくいいかんじで動作したので、ひとまず満足です!
ピンバック: Run IPS SPI diplay on M5Stack | macsbug
ピンバック: Hardware 関連メモ | saino.me