1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

春なので冬眠中のESP32とTFTでフォトカレンダーを作ろう

Posted at

はじめに

休眠中の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_idclient_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の方もできたら追記すること。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?