mgo-tec電子工作さんオリジナルのESP32を使用したYahooニュースと天気予報等表示をLCDに移植してみました
mgo-tec電子工作さんが、ESP32+OLEDを使用してYahooニュースや時計、天気予報を表示するアプリを公開されています。
OLEDディスプレイは非常に発色が良く、使われているチップSSD1331も性能が良いため、良い動きをします。
しかし、解像度が96x64と狭いのが残念。もう少し色々表示したい。 って事で、各所で売られている2.8インチTFT-LCD(320x240 ILI9341)に移植してみました。
アマゾンの2.8インチTFT-LCD(320x240 ILI9341)
ebayの2.8インチTFT-LCD(320x240 ILI9341)
aliexpressの2.8インチTFT-LCD(320x240 ILI9341)多数
こちらは動作動画です。
当然、microSDインターフェイスは付属のSDカードインターフェイスに修正。
他にもハードウェアをいじったので、回路図も参照してください。
ソフトウェアは本ディレクトリのYahoo5NewsViewWithWeather.inoの他に、Librarisのライブラリ追加や修正が必要です。
また、動作にはフォントや元記事にある、各種ファイルをSDカードに入れる必要があります。(著作権等、元記事をしっかり読んで理解してください。)
今回移植で、以下の箇所で苦労しました。
以下はどう解決したか...
CopyはSPIインターフェイスでLCDから描画を読みだして、ずらして書き込みすると、遅すぎて使えないので、
仮想VRAM的動作のMiniGrafxライブラリ https://github.com/squix78/minigrafx を使って、ESP32側で
スクロールし、仮想VRAMから転送することで実現。
元々、仮想VRAMからの転送方式はRetroPieでそこそこ早い事が判っていたので、方式採用。
RetropieでILI9341使用動画 RetropieのILI9341使用例
そのまま移植したら、画面の1/5程度に全て収まったので、4Yahooニュースに1行追加、更に時計・天気予報を追加
して、やっと1/4程度に。
しかし、そのままではせっかくの画面がもったいないので、縦横2倍に拡大して表示する事にした。
当初、フォントから仮想VRAM描画時に縦横2倍にしたが、仮想VRAMがメモリを圧迫するので、仮想VRAMを1/4サイズとして、転送時に縦横2倍にすることで、メモリ領域も描画速度もアップ。
仮想VRAMやYahooニュース5本を表示しようとメモリを使いすぎてメモリ不足!でも、以下の記事を読んで禁断の
メモリ開放を使っています。
簡単に言えば、使っていないBluetoothを使わない設定にし、メモリを解放。
ESP32を使用するのに、ハードウェア追加していますが、インストールした以下のディレクトリの
ファイルを編集。(バックアップしてから編集してくださいね!)
Arduino\hardware\espressif\esp32\tools\sdk\include\config\sdkconfig.h
以下の様に修正。
#define CONFIG_BT_RESERVE_DRAM 0x10000 -> #define CONFIG_BT_RESERVE_DRAM 0x0
#define CONFIG_BTC_TASK_STACK_SIZE 8192 -> #define CONFIG_BTC_TASK_STACK_SIZE 1024
#define CONFIG_BT_ENABLED 1 -> #define CONFIG_BT_ENABLED 0
これでかなりのメモリが解放されます。
本来、あってはいけないことだが、何故かSDカードのフォント読み出しファイルポインタが破壊される。
ハードウェアの品質?ライブラリの問題?結局解決できずに、ニュース読み込みタイミングで、フォントファイルを
クローズ・オープンする事で不具合に蓋をした...。(1週間連続動作したので、追及をあきらめた...)
フォントファイルのポインタが化けた状態で日付が更新されると、1日、日付表示が意味不明のドット状態 になるので、BOOTスイッチを押すと日付表示が更新される様に機能追加。