前回買ったCYD(Cheap Yellow Display)は技適マークの無いXH-32SというESP32互換モジュールが載った怪しい偽物?だった。
気を取り直してAli-Expressで別のベンダーにCYDを発注した。届いたCYDはちゃんと技適マークのESP32-WROOMが載った正規品?と思われる物だった。今回は「当たり」のようだ。
Ali-Expressでの買い物は一種の賭けみたいなもんである。届いてみるまでは、何が届くか分からない。なんとも困ったもんである。できるだけ写真付きのユーザーレビューを見て選ぶのが良いようだ。
今回は、ケースも一緒に購入。ケースと言っても板2枚をスペーサとネジで固定する簡易的な物だった。



電源を入れてみると、前に買ったのとは別のデモプログラムが動作する。
新しい証拠だろうか?


とりあえず動作はするようだ。
内部回路は、偽物も本物も同じはずで以下と思われる。
前にも書いたが、 こちらのページ等によると、USBコネクタが2つ付いた新しいのは、Displayコントローラーは ILI9341ではなくて、ST7789が使われているらしい。
前に届いた怪しい物は ILI9341だったので、確認のために、前に作ったDSPラジオのUIだけのプログラムを動かしてみる。
なお、Arduino/libraries/TFT_eSPI/User_Setup.h を編集して以下の内容に変更した。
青字部分が、ST7789用に追加、変更した部分
-------------------------------
#define ST7789_DRIVER
#define TFT_INVERSION_OFF
#define TFT_RGB_ORDER TFT_BGR
#define TFT_WIDTH 240 // ST7789 240 x 240 and 240 x 320
#define TFT_HEIGHT 320 // ST7789 240 x 320
#define TFT_MISO 12
#define TFT_MOSI 13
#define TFT_SCLK 14
#define TFT_CS 15
#define TFT_DC 2
#define TFT_RST -1
#define TOUCH_CS 33
#define LOAD_GLCD
#define LOAD_FONT2
#define LOAD_FONT4
#define LOAD_FONT6
#define LOAD_FONT7
#define LOAD_FONT8
#define LOAD_GFXFF
#define SMOOTH_FONT
---------------------------------------------------
最初、色がおかしくて焦ったが、上記のように設定すると、ちゃんと表示出来た。
ST7789が使われているのは間違いないだろう。

次に、WiFiが使えるので、前に試したWiFiManagerでWiFi設定を移植する。
(WiFiManagerに関しては前の記事を参照)
画面を何処でもタッチしながら電源を入れると、WiFi設定モードになる。

無事WiFiに接続できると、こんな感じに表示してから立ち上がる。

次に、NTPサーバーに繋いで時刻を表示するサンプルプログラムをChatGPTにお願いして書いてもらった↓。これを移植する。
#include <WiFi.h>
#include <time.h>
#include <Ticker.h>
const char* ssid = "YOUR_SSID";
const char* password = "YOUR_PASSWORD";
// 日本標準時 (UTC+9)
const long gmtOffset_sec = 9 * 3600;
const int daylightOffset_sec = 0;
// NTP サーバー
const char* ntpServer = "ntp.nict.jp"; // 日本向け
Ticker ntpTicker;
void syncTimeWithNTP() {
Serial.println("NTPサーバーに接続して時刻同期します...");
configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);
struct tm timeinfo;
if (getLocalTime(&timeinfo, 10000)) { // 最大10秒待つ
Serial.println("NTP時刻同期成功");
} else {
Serial.println("NTP時刻同期失敗");
}
}
void printLocalTime() {
struct tm timeinfo;
if (!getLocalTime(&timeinfo)) {
Serial.println("時刻取得失敗");
return;
}
const char* weekStr[] = {
"日", "月", "火", "水", "木", "金", "土"
};
Serial.printf(
"%04d/%02d/%02d (%s) %02d:%02d:%02d\n",
timeinfo.tm_year + 1900,
timeinfo.tm_mon + 1,
timeinfo.tm_mday,
weekStr[timeinfo.tm_wday],
timeinfo.tm_hour,
timeinfo.tm_min,
timeinfo.tm_sec
);
}
void setup() {
Serial.begin(115200);
WiFi.begin(ssid, password);
Serial.print("WiFi接続中");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nWiFi接続完了");
// 起動時にNTP同期
syncTimeWithNTP();
// 10分ごと(600秒)にNTP再同期
ntpTicker.attach(600, syncTimeWithNTP);
}
unsigned long lastPrint = 0;
void loop() {
// 1秒ごとに内部RTCの時刻を表示
if (millis() - lastPrint >= 1000) {
lastPrint = millis();
printLocalTime();
}
}
日付と時刻を、このように表示するようにしてみた。
まぁ、こんなもんぢぁろう。

今回はここまで。
このプログラムは以下に入れておきますので、興味のある方はどうぞ
CYD_terminal_v01
これにいろいろ追加して、様々な情報が表示できる端末にして遊んでみたいのである。
「おいらで遊ばないで欲しいにゃ、おいらは眠いのニャ」

そんなこと言わずに、相手してよ