あみらぼ

電子工作がメインのDIYもの作り雑記

ESP32でLCDモジュールを使う(2)

さて、前回、購入したLCDシールドのとんでもない仕様により、WROVERを壊しかけましたが、運よく繋ぐ前に気づけた事で、最悪の事態はさけられました。

 

引き続き、LCDシールド上のLCDモジュールをテストしていきます。まず、絵がでないとLCDモジュールを使ってる感じがしないので、atmega328p用のサンプルコードをちょこちょこいじって、ESP32-WROVERから絵を出すところまではなんとかできました。サンプルコードではSDカードから画像を読んでますが、既にLCDシールドとWROVERとの配線が大変な事になってるので、これ以上線を増やさないため、画像はSPIFFSに置いてそこから読み込みました。

f:id:amilabo:20200304110726j:plain

あの配線に繋ぐため、ブレッドボードのどこがWROVERのどこに繋がっているか、目がチカチカしながら何度も確認しつつ接続して、何とか絵を出す事に成功しました。やっと、WROVERを使ってる、って感じになってきましたね。

正直、ここまでこれただけで結構な達成感ですw

 

LCDシールドの仕様上、一般的な画像のRGB24ビットカラーではなく、Red5ビットGreen6ビットBlue5ビットの16ビットカラーなのですが、それほど諧調に違和感もなく、それなりに綺麗に絵が出ました。YUV422なんかで24ビットを16ビットに圧縮する方法があるのは知ってましたが、RGBそれぞれからビットを落とすシンプルな方法もこんな所では使われているんですね。RとBに比べて、Gに1ビット多く割り当ててるのがミソですね、GをYと近似して、人間の知覚にできるだけ影響しないようにしているのでしょう。

 

さて、絵が出て一安心したのもつかの間、ディスプレイの見え方が何か変な事に気づきました。まぁ、安物のディスプレイなので、視野角が狭いのは承知の上だったのですが、見る角度によって、とてつもなく輝度や色合いが変わってしまう角度があるようです。ちょっと写真からは伝わりづらいのですが、画像を載せてみます。

f:id:amilabo:20200306121612j:plain

写真だと、変な筋が見えたりでイマイチに見えますが、肉眼では左2つの画面は、わりと綺麗に見えています。写真でこうなってしまうのは、恐らくRGBのピクセル配列とカメラの解像度との関係でエイリアシングがおきているのが原因で、LCDモジュールの性能とは無関係なはずです。問題は、右側の画像、ほんのちょっと傾けただけで明るさがかなり暗くなり、色もぐちゃぐちゃで酷い見え方になってしまいます。一方で、反対方向に傾けたときは少し画面が明るくなる程度で、正面と同じか、むしろ正面より綺麗に見えるくらいです。上下方向に傾けた場合も試してみましたが、視野角が良好とまではいかないまでも、写真右のような酷い見え方にはなりませんでした。

 

はて?なぜかと気になったので、何とかこのLCDシールドに使われているLCDモジュールの情報が無いかと探し回ったところ、それらしいものを見つけました。ちなみに、「LCDシールド」とか「LCDモジュール」とかの違いで混乱している方もいるかもしれないので少し説明しておきます。まず、LCDの画面そのものには、全ての画素を操作するために1000本近くの端子があり、それを直接はんだ付けしたりすることはできないので、LCDの画面単体で売られていることはまずありません。実際に購入できるのは、そのLCD画面の1000近くの端子に「LCDドライバ」というICが接続されてユーザーが制御するための20~50ほどの端子がFFC(フレキシブルフラットケーブル:ペラペラの中に何十本も線が平行に通ってるケーブル)から出ている物で、それを「LCDモジュール」と呼んでいます。さらに多くの場合、電子工作でFFCを扱うのは難しいのでFFCと基盤が既に接続されていて、さらにその中から特に必要な端子のみを10~20程度出して、LCDモジュールを基盤に固定した「LCD基盤(ボード)」として売られています。さらにその中でもarduinoにそのまま乗せられる基盤を「LCDシールド」と呼んでいるようです。ただ、その辺の呼び方はあいまいで、基板の状態でも「LCDモジュール」と呼んでいる場合もあるようです。

以下は今回購入した「LCDシールド」に乗っている「LCDモジュール」の仕様画像(と思われるもの)です。LCDシールドに出ている端子は15本ほどですが、実際には以下のように37本の端子のFFCLCDシールドの基盤と接続されているという事ですね。 

f:id:amilabo:20200306132219j:plain

 で、この仕様画像から、LCD見え方がなんか変な原因がわかりました。このLCDシールドは明らかに横画面として売られていましたが、実際に乗っているLCDモジュールは、明らかに縦画面なんですね。しかも、上記の画像から「View direction」がはっきりと示されているようです。要するに、このLCDは縦画面でしかも正面より少し傾けた状態で見る事が前提となっていて、それ以外の角度から見る事はほとんど想定されていないんですね。たぶん、昔のガラケーのような感じの縦画面に使うのを想定しているんですね。そう考えると、想定された視野から少しでも外れると極端に見えづらくなるのは、のぞき見を防止する観点ではありがたい事で、あえてそうしているのかもしれません。

 

ただ、個人的にはこのLCDは横画面として使おうと思っていたので、この仕様はかなり致命的です。上下方向に傾けた時の視野角が狭いのはまだしも、左右方向に傾けた時の視野角が全く違って、片方の視野が壊滅的なのはあまりに残念です。ベストポジションで見ようと思ったら、画面を正面より左(実装によっては右)に傾けて見る必要がある、という、なんともヘンテコなものができあがってしまいます。

この件で、改めていきなり本番用のLCDモジュールを買わずに、格安のLCDシールドを練習用として買ったのは正解だったと感じました。「View direction」に注目して改めていろいろなLCDモジュールを探したところ、個人で購入できるようなLCDモジュールのほとんどは同様にView directionがあるようでした。また、横画面のモジュールは少なく、縦画面で上記のように斜め方向から見るのを想定しているものがほとんどのようでした。

 

このような仕様で失敗する人が少しでも減らせればという思いを込めて、まとめておきます。個人で購入できるLCDモジュール(基盤、シールド)のほとんどには、

View directionが存在する!

ということです。想定されたView direction以外の視野角は極端に狭いです。

 

と、いうわけで本番用のLCDモジュールはIPS液晶(実質、ViewDirectionという概念がほぼ無く、どの角度からでも同じように見える)タイプを選択するしかなさそうです。ただ、探してもなかなか2.6インチ前後の小型のLCDでIPS液晶というLCDモジュールは少ない…、もしくは高い…。FFCを扱う事も含めて最後まで完成させられるかまだ確証が持てない時点で購入するかどうかは、なかなか悩ましいところですね…。

 

という所でかなり長くなってしまったので、今回はこの辺で。次回こそは「60fpsで画面をヌルヌル動かす」に向けてのテスト結果を紹介したいと思います。ではでは。