このMorphing Clockは、
Hari FunさんのMorphing Digital Clock
を参考にして作成しました。
これは、ESP8266とLED-PanelのドライバーPxMatrixを使用し、Time_Zone Mapから時刻を取得する構成になっています。
この作品の良い点は、最初にPCとWiFiで設定すれば、後はPCもWiFiルーター等も必要としないことだと思います。
作成にあたって使用したライブラリのバージョン等でコンパイルエラー等が多々あり四苦八苦しながら一応完成しました。
使用したArduino IDEのバージョンは、ver1.8.19です。以下にその概要を記します。
WiFiから、オフセット時刻と24時間表示を指定してTime_Zone Mapに接続し、時間を表示しています。
1.ESP8266
写真のESP8266 Nodemcu V3 CH340(AliExpressで購入、¥250送料別)を使用しました。
(これは、技適を取得していませんので注意)
2.LED-Panel
写真のP3Matrix-Panel 64x32(これもAliExpressで購入、¥2000程送料含む)を使用しました。
3.USBコード
マイクロBタイプのUSBコードです。
(注:電源供給のみのUSBコードは使用しないでください。)
4.電源
5V 2Aの電源を使用しました。
参考:P3Matrix-Panel 64x32とドライバーPxMatrixの扱いは、本ホームページのLED-MatrixPanel(1)を参照してください。
1.配線図です。
2.ESP8266 Nodemcu V3のピン配置です。
3.LED-Panelの入力コネクタと出力コネクタの配線
(1)下図が入力コネクタと出力コネクタのピン配置です。
No8の「E」は、パネルによってはGNDの場合があります。その際はスケッチを変更しなければいけません。
確認方法、スケッチについては、本ホームページのLED-MatrixPanel(1)を参照してください。
4.PxMatrixを使用しますので、次のようにLED-Panelの入力コネクタと出力コネクタのピンを接続します。
5.ESP8266 Nodemcu V3とLED-Panelを次の図のように接続します。
1.Arduino IDEにボードをインストール。
Arduino IDEでESP8266が使えるように次のように設定します。シリアルポートは、後程「NodeMCU」を
PCに接続したときに選択します。
(1)Arduino IDEで「ファイル」>「設定」に移動します。
(2)「追加のボードマネージャー URL」の右側にあるアイコンをクリックします。
(3)次の URL を別の行に貼り付けます (順序は関係ありません)。
http://arduino.esp8266.com/stable/package_esp8266com_index.json
(4)「OK」をクリックして環境設定を終了します。
(5)[ツール] > [ボード xyz] > [ボード マネージャー...] に移動します。
(6)8266を検索してESP8266 コミュニティから esp8266 をインストールします。
その際、「バージョンの選択」から「2.7.4」を選択し、「インストール」ボタンをクリックしてください。
このMorphingClockは、「esp8266」のバージョンが「2.7.4」より後だと起動しませんので注意してください。
2.インストールされると次の図のようになり、ボード「NodeMCU 1.0(ESP-12E Module)を選択してください。
1.MorphingClockのスケッチは、
Hari FunさんのMorphingClock
から「Code」ボタンをクリックして「Download ZIP」をダウンロードしてください。
2.ZIPファイルを解凍すると次のようなファイルとなります。
3. 「Latest」フォルダを開くと「MorphingClock」がありますので、これをArduinoのスケッチホルダとします。
その中身は、以下の通りです。
4.スケッチ「MorphingClock.ino」の一部を修正します。
(1)行頭にある「#define double_buffer」を削除かまたはコメントにしておきます。
(2)LED-Panelの入出力コネクタのピン「E」がGNDの場合は、ピン定義の設定の所で、
「#define P_E 0」を削除かまたはコメントにして、その下の
「PxMATRIX display(64, 32, P_LAT, P_OE, P_A, P_B, P_C, P_D, P_E);」を
「PxMATRIX display(64, 32, P_LAT, P_OE, P_A, P_B, P_C, P_D);」にしておきます。
(3)スケッチの中にESP32の部分がありますが、ESP32ではMorphingClockは起動しません。
(4)参考として以下に、修正箇所とESP32の部分・コメントを削除したプログラム「MorphingClock.ino」を掲載しておきます。
#include <PxMatrix.h> #include <Ticker.h> Ticker display_ticker; #define P_LAT 16 #define P_A 5 #define P_B 4 #define P_C 15 #define P_D 12 #define P_E 0 #define P_OE 2 // Pins for LED MATRIX PxMATRIX display(64, 32, P_LAT, P_OE, P_A, P_B, P_C, P_D, P_E); // ISR for display refresh void display_updater() { //display.displayTestPattern(70); display.display(70); } //=== SEGMENTS === #include "Digit.h" Digit digit0(&display, 0, 63 - 1 - 9*1, 8, display.color565(0, 0, 255)); Digit digit1(&display, 0, 63 - 1 - 9*2, 8, display.color565(0, 0, 255)); Digit digit2(&display, 0, 63 - 4 - 9*3, 8, display.color565(0, 0, 255)); Digit digit3(&display, 0, 63 - 4 - 9*4, 8, display.color565(0, 0, 255)); Digit digit4(&display, 0, 63 - 7 - 9*5, 8, display.color565(0, 0, 255)); Digit digit5(&display, 0, 63 - 7 - 9*6, 8, display.color565(0, 0, 255)); //=== CLOCK === #include "NTPClient.h" NTPClient ntpClient; unsigned long prevEpoch; byte prevhh; byte prevmm; byte prevss; void setup() { Serial.begin(9600); display.begin(16); //display.setMuxDelay(1,1,1,1,1) display_ticker.attach(0.002, display_updater); ntpClient.Setup(&display); display.fillScreen(display.color565(0, 0, 0)); digit1.DrawColon(display.color565(0, 0, 255)); digit3.DrawColon(display.color565(0, 0, 255)); } void loop() { unsigned long epoch = ntpClient.GetCurrentTime(); //Serial.print("GetCurrentTime returned epoch = "); //Serial.println(epoch); if (epoch != 0) ntpClient.PrintTime(); if (epoch != prevEpoch) { int hh = ntpClient.GetHours(); int mm = ntpClient.GetMinutes(); int ss = ntpClient.GetSeconds(); if (prevEpoch == 0) { // If we didn't have a previous time. Just draw it without morphing. digit0.Draw(ss % 10); digit1.Draw(ss / 10); digit2.Draw(mm % 10); digit3.Draw(mm / 10); digit4.Draw(hh % 10); digit5.Draw(hh / 10); } else { // epoch changes every miliseconds, we only want to draw when digits actually change. if (ss!=prevss) { int s0 = ss % 10; int s1 = ss / 10; if (s0!=digit0.Value()) digit0.Morph(s0); if (s1!=digit1.Value()) digit1.Morph(s1); //ntpClient.PrintTime(); prevss = ss; } if (mm!=prevmm) { int m0 = mm % 10; int m1 = mm / 10; if (m0!=digit2.Value()) digit2.Morph(m0); if (m1!=digit3.Value()) digit3.Morph(m1); prevmm = mm; } if (hh!=prevhh) { int h0 = hh % 10; int h1 = hh / 10; if (h0!=digit4.Value()) digit4.Morph(h0); if (h1!=digit5.Value()) digit5.Morph(h1); prevhh = hh; } } prevEpoch = epoch; } }
1.以下のライブラリを「ツール」>「ライブラリを管理」からインストールします。
(1)AdaFruit GFX Library
(2)PxMatrix LED MATRIX library
(3)DoubleResetDetoctor by Stephen Denne
作成者を確認してください。
(4)ArduinoJSON
これはバージョン5.13.2を選択してください。このバージョン以降ではMorphingClockは起動しません。
(5)TzapuのWiFiManager
これは下記のGitHubよりダウンロードしてください。
https://github.com/tzapu/WiFiManager
(6)その他の注意:Arduino IDEの既存のライブラリとESP8266のライブラリとが混在しないようにしてください。
コンパイルエラーが生じます。
同名のライブラリがあるとコンパイル時に使用済み、未使用とエラー表示されます。
(7)ESP8266のライブラリの確認ですが、私の場合は以下の場所に有りました。
C/ユーザ/ユーザ名/AppData(隠しファイル)/Local/Arduino15/packages/esp8266/tool/hardware/
esp8266/esp8266/2.7.4/libraries/
(8)PC が ESP と通信できるようにするためのデバイス ドライバーCH340をインストール。
以下の場所からWindows用のCH340 ドライバーをダウンロードしてインストールします。
https://www.wch.cn/products/CH340.html
準備が完了しましたら次のように操作します。
1.スケッチのアップロード。
(1)NodeMCUとPCをUSBコードで接続します。
(2)Arduino IDE > Tools > シリアルポートからCOMポートを選択します。
(3)「アップロード」ボタンをクリックします。これにはしばらく時間がかかります。
2.アップロード後、LED Matrix Panelに
AP: MorphClk、
Pwd: HariFun、
192.168.4.1
が表示されます。
このAP名とPwd名は、スケッチホルダ内の「NTPClient.cpp」の前段に記載されています。
char wifiManagerAPName[] = "MorphClk";
char wifiManagerAPPassword[] = "HariFun";
この時点で、ESP8266は、パスワード HariFun を持つ MorphClk という名前の WiFi アクセス ポイントとして機能します。
3.PCのWiFi 接続を通常の WiFi から MorphClk に変更します。
この時点では、ESP はまだ インターネットに接続されていません。
4.Web ブラウザを使用して、192.168.4.1 にアクセスします。これは ESP が提供する Web サイトです。
(1)次の画面が表示されます。
(2)「Configure WiFi」をクリックすると次の画面になります。
(3)次のように入力します。
*SSID、password は、自分のWiFi(ルーター等)のSSID、passwordを入力。
*Time_Zone は、+9 と入力。
*24Hrは、24時間表示の場合は「Y」、12時間表示の場合は「N」と入力。
(4)その後、「Save」ボタンをクリックして保存します。
上記のデータは、ストレージに保存されるため、二度と入力することはありません。
(5)参考としてTime_Zone Mapでは、「TOKYO」のオフセット時刻は、
UTF+9 となっています。
5.その後、NodeMCUのリセットボタンを押すと、LED Matrix Panelに「Connecting」と表示され接続を開始します。
接続後、以下のように表示されて、時刻が表示されます。
Connected!
Zone: +9
24Hr: Y
以上で完成です。