はじめに
休眠中のTFTで何か実用的なモノをと思ったのでフォトカレンダーを作ってみた。できるだけ配線はシンプルに。



(※抵抗や赤黒線は無視して。今回は未使用なので。)

アクリル板で固定して完成
ESP32
使用したESP32。
TFT
使用したTFT。
- ILI9488 480x320 (Amazon) 2,000円ぐらい
-
ST7789 240x240 (Amazon) 1,000円ぐらい
あと、「ILI9341 240x320」 と 「ST7735S 128x128」 があるので、様子をみてそのうち追加するかも。
だいぶ昔に買ったので詳細は不明。
ST7789 は小さいので、カレンダー表示はなく日付曜日のみ表示。
配線
シンプル配線。ブレットボードにワイヤーだらけって美しくないので。御覧のとおり、デフォルトSPIピンは無視していますので速度とかは度外視。今回の用途的に問題ないと思います。
ILI9488 <=> ESP32-DevKitC


※VCC、RESET、LCD は 5V に繋げる。写真では見えないが、TFTの下を通っている。RESETはGPIO14に繋げた方がいいかも。
ST7789 <=> ESP32C6
画像のようにピンヘッダを 裏付け にすると ワイヤーレス!


(※抵抗や赤黒線はバッテリ駆動用のモノ。今回は未使用なので無視。)
環境
- Windows10
- VSCode 1.99.3
- ArduinoIDE2 2.3.6
- PlatformIO
- GoogleDrive
ライブラリ
- bblanchon/ArduinoJson@^7.4.1
- lovyan03/LovyanGFX@^1.2.0
仕様
- 描画は LovyanGFX を使用
- 画像データは、GoogleDrive のフォルダから取得
- 画像データは、JPGファイル 100個まで50KB/ファイル以下、幅高さの制限は無し(縮小される)
- 画像データが横長、縦長でカレンダーの配置を変更
- 画像データはランダム表示。10分おきに更新
- GoogleDriveのアクセストークンは初回起動時取得しSPIFFSへ保存
- 祝日はここより取得
GoogleDrive
適当にGoogleDriveにフォルダを作って、JPGファイルをアップロードする。
フォルダの folderId
を以下の箇所に記述。URLの以下の部分。
※JPGファイル は 100個まで。50KB以下。
アクセス権
GoogleDriveから画像データを取得するには、アクセス権の設定が必要。以下を参照すると分かると思います。頑張ってclient_id
と client_secret
を用意してください。
#define FOLDER_ID "zzzzzzzzzzzzzzzz" // 画像データ FOLDER_ID
背景画像
背景画像は480x320を用意してGoogleDriveにアップしてfileIdを以下の箇所のところに記述。fileIdは、GoogleDriveで対象ファイルを右クリック>アプリで開く>新しいタブで開く>で表示されたURLにある。
今回私が使った画像を置いておく。
COLOR_BACKGROUND_CAL
COLOR_BACKGROUND_IMG
#define COLOR_BACKGROUND_CAL "xxxxxxxxxxxxxxxxxxxx" // 背景画像のFILE_ID 480x320
#define COLOR_BACKGROUND_IMG "yyyyyyyyyyyyyyyyyyyy" // 背景画像のFILE_ID 480x320
GoogleDriveの認証とアクセストークン
初回起動時にGoogleDriveのリフレッシュトークン&アクセストークンを取得する。
初回起動時にシリアルモニターで以下の手順で認証をする。
1.以下のような表示になるので client_id
を入力する。
2.https://accounts.google.com/o/oauth2/auth?client_id=...
が表示されるのこのURLをコピーしてブラウザで表示する。
3.ブラウザが以下のような画面になるので、自分のアカウントを選択
4.続行
5.認証コードをコピーする
6.シリアルモニターに戻って、コピーした認証コードをペースト
7.さらにclient_secret
を入力
8.以下のようになればOK
client_id
、リフレッシュトークン などは SPIFFSに保存されるので次回以降は入力不要。
ソース
ArduinoIDE2
ArduinoIDE2のコンパイルは10分ぐらい掛かる。
https://github.com/nori-dev-akg/ESP32-calendar-ArduinoIDE
PlatformIO
PlatformIO のコンパイルは1分ぐらい。
https://github.com/nori-dev-akg/ESP32-calendar
実用的に
ST7789の方だけ、アクリル板にネジ止め。配線はブレッドボードからジャンパーピンに変えただけ。半田は使っておらず、ESP32C6は固定せずジャンパーピンでST7789にくっついているだけ。ジャンパーピンは取れやすいのでポリミドで一応固定。写真は分かりやすいように透明のままにしておいたけど、なにかでマスクて液晶以外を隠した方がおしゃれだと思う。そのうちやる。
ILI9488の方は、アクリル板加工したら力尽きたので今度またやる。


おわりに
ソースはPlatformIOで開発した。配布用にArduinoIDE用.inoを作ったけど初回コンパイルに10分掛かるのでげんなりした。
ちょっとコジャレたものができたの公開した。ESP32C6は前に使ったものでバッテリ駆動用線が付いてたりするので新しいもの買おうと思います。
今回のポイントはピンヘッダを裏付けしてデフォルトSPIピンを無視して並びのいいピンを使えたことで、半田レスでできた。LI9488の方もできたら追記すること。