Archive for 10月 2016
ESP32 Beginning
Nano32 を試してみました。 2016.11.03
OLEDのVCCは Nano32のV3(3.3v) から配線しGND,SCL,SDAは直挿ししました。
ピン数は40ピン。ピンの縦幅は ブレッドボード上下に1ピン空くサイズです。
スケッチで WiFi を停止し without TELEC にします。
2016.11現在の Arduino IDE ESP32 は BLE, Analog入出力, RTC 等は未実装です。
基板中央下に NANO32 と書かれた左に LED があり IO16 と書かれています。
この LEDは GPIO 16 で pinMode(16, OUTPUT); で「Lチカ」ができます。
Nano32 Front
Nano32 Rear
Nano32 (40pin)
NodeMCU-32S Front (38pin)
NodeMCU-32S Rear (38pin)
準備その1:ハード編
1. Nano32(ESP32) ボードの入手:
Cytron:NANO32 IoT Development Board:今回の注文先です。
_ FedExを使用し $39.55($24.75+14.80(送料):4237円 と高い商品です。
_ マレーシアのCytronに10月20日に注文し25日に到着。書類は丁寧。
_ ピン数は40。基板裏には作られた GRAVITECHとmakerasia の文字。
GRAVITECH:NANO32 IoT Development Board – 4MB
ESPert:Get your Nano32
Aliexpres:NodeMCU-32S が一斉に発売しました。最安は$23.20です。
_ ピン縦幅は ブレッドボード上下に1ピン空くサイズです。
_ ピン番号は ボードの裏に印刷 されています。これは非常に見づらい。
_ ピン数は 38。FTDIはCP2102。LDOはAMS1117-33(ノイズ大)。
ebay:NodeMCU-32S が一斉に登場してきました。
_ NodeMCU-32S:2718円($25.99)。Aliexpressより少し高い。
準備その2:ソフト編。 条件は マック( macOS )です。
ESP32用フォルダーを用意しArduino IDE へインストールする。
1. espressif から「arduino-esp32」をダウンロードする:
_ 「arduino-esp32-master 」フォルダーが出来る。
_ 「arduino-esp32-master 」フォルダーの名前を「esp32」に変更。
_ 「esperssif」という名前の新規フォルダーを作る:
_ 「esperssif」フォルダーの中に「esp32」フォルダーを入れる。
2. macOS用の 「xtensa-esp32-elf」をダウンロードする:
_ 詳細:espressif / esp-idf:Set up of Toolchain for Mac OS
_ 「xtensa-esp32-elf」ファイルが入手できました。
_ 「xtensa-esp32-elf」フォルダーを「esperssif」フォルダーの中
_ esperssif / esp32 / Contents / hardware / tools に入れます。
_ これで ESP32用フォルダーの準備ができました。
_
3. Arduino IDE 本体に 「esperssif」フォルダーをインストールする:
_ Arduino IDE アプリへ マウスを当てて右クリックします。
_ 「パッケージの内容を表示」され 選択すると中が開きます。
_
_ 「Contents」フォルダーの中の「Java」を開きます。
_ 「hardware」フォルダーの中に「esperssif」フォルダーを入れる。
_ Arduino IDE を閉じて終了です。
_ 他の方法としてターミナル操作でインストールする方法もあります。
2016.12.25 追記:ターミナルで arduino-esp32 の Installation ができました。
これまでエラーで出来ませんでしたが git や他の物がインストールされて
いない為にエラーが起きました。
手順は省きますが 幾つかの入っていない物をインストールしました。
結果 arduino-esp32 の Installation の指示通りにインストールできました。
4. Arduino IDE を起動。ボードマネージャ…に ESP32 が3つ表示される。
_ Flash Frequency は 80MHz と 40MHz。CPU Frequency の表示は無し。
ESP32 ( Nano32 ) 初めのメモ:
1. スケッチの起動:スケッチを書込みした後は そのままでは動きません。
_ 書込み後に 基板の EN ( Reset ) スイッチを押します。
_ 注:ESP8266 とは異なり書込み後に自動的に起動しない為 慌てない事。
2. 命令の違い:ESP8266 での エラー や GPIOを高速操作時の不具合である
_ Wdt Error は発生しない為 以下の3つの命令は不要です。
_ ESP32 では以下の命令はエラーが出ます。
_ -1:extern “C” { #include “user_interface.h” }
_ -2:ESP.wdtDisable();
_ -3:yield()
_ これはどういう事を示すか。つまり ESP8266 はハードに問題があった
_ のではないか?と想像してしまいます。
_ ESP8266 は Wdtエラーの為にスケッチやライブラリーに yield() を入れ
_ て解決していますが ESP32 では エラーが出る為に 削除が必要です。
_ これまでの スケッチは おおよそ直ぐは動きません。
3. LED:LED は GPIO 16 に接続されており 16 でLチカができます。
_ NodeMCU-32S は GPIO 2 , Sparkfun ESP32 は GPIO 5 です。
4. ピン配置:Nano32のピン配置は都合良く 左上は I2Cの GND,SCL,SDA
_ と並び I2C OLED を直付可能。ただし VCC 3V は線を引く必要がある
_ のでもう一工夫欲しかったと思う。配線が少ない事は楽になります。
_ NodeMCU-32S, Sparkfun ESP32 のそれぞれのピン配置は異なります。
5. 速度:3D Cube の回転速度は ESP8266 とほぼ同じでした。
6. I/Oの数:ピン数が多いので気が楽になります。
7. Arduino IDE での書込み速度:速いです。
8. 消費電流:この回路のUSB 5V の消費電流は 61mAでした。
9. 書込み後に ENスイッチを押す件は 別な方法がある事を期待します。
10. ESP32の現状:
_ sparkfun esp32-thing-hockup-guide の説明によると 未実装が有ると
_ の事。Bluetooth, Analog Input (analogRead([pin])),Analog Ouptut
_ (analogWrite([pin], [value])), WiFi Server and WiFI UDP,Real-Time
_ Clock, Touch-controller interface で 確かにエラーがでます。
11. Nano32のCPU Crystal Frequency:40MHzです。(Nano32の説明書)。
_
_ Sparkfun の CPU Crystal Frequency は 26MHzです。
_ CNXSoft – EMBEDDED SYSTEMS NEWS には 160MHz と記載あり。
_ Nano32 の board.txt は「nano32.build.f_cpu=160000000L」と書かれている。
_ ESP32 Technical Reference Manual の 3.2.3 CPU Clock に最高160MHz とある。
_ Espressif :ESP32 hardware Design Guideline に 40MHz+-10ppm とある。
_ page 3:40MHz, 26MHz, 24MHz サポートと書かれています。
_ Crystal は 40MHz で 内部はPLL回路で 160MHz動作していると判断します。
_ Espressif ESP32 Core Board:40MHz です。
_
12. AUTO PROGRAM CIRCUIT (書込み自動化) が組み込まれています。
13. ESP32の資料。Espressif Systems:ESP32 Documentation
_ ESP-WROOM-S2 Datasheet や ESP32 Technical Reference Manual がある。
14. HACKADY:HOW TO GET STARTED WITH THE ESP32:開始の手順。
ESP8266とNano32の I2C OLED表示速度比較:
_ 結論:たいして速度は変わりませんでした。
_ 条件:LibraryはAdafruitのESP Adafruit SSD1306とAdafruit GFX。
_ ESP8266のCPU Frequency選択は 160MHz。ESP32(nano32)は
_ 表示が無く Flash Frequency 80MHz を選択。
_ ESP8266(160MHz)(左) と Nano32(Flash 80MHz)(右)
ピンアサイン:nano32
感想:
1. Nano32 は価格が高いですが調査の為に購入しました。NodeMCU-32S も高い
_ ですが調査の為に注文しておきました。
2. Lチカは 基板にある LED が GPIO 16 ですので 16 を指定し動きました。
_ ESP8266 で動いていたスケッチは おおよそエラーがでて動きません。
_ OLED の 3D Cube は 動きました。理由は Adafurit の Library の為で ESP8266
_ への対応が低い為と思われます。
3. ESP32 は開発中ですので espressif の「arduino-esp32」は変わります。
_ 初期のボードは「ESP Dev Module」しかありませんでした。
_ そして 各PC用の 「xtensa-esp32-elf」が必要です。
4. 疑問点:
_ 速度は現Arduino IDE ESP32環境での結果ですので疑問を持っています。
_ 1. Nano32 や NodeMCU-32S のCPUクロック周波数は幾つなのか?
_ EspressifSystem の John Lee氏が 160MHz と述べている。2016.11.11 追記
_ ともの技術メモ:ESP32のβ版がもうすぐリリース!?
_ 2. Arduino IDE ESP32 のボードに CPU Frequency の表示が無いのは何故か?
5. 解らない事や不明な点 記載ミスもあるかと思いますがご了承ください。
0.95″ 96×64 Color OLED in ESP8266
9.5″ 96×64 Color OLEDを ESP8266 で使用しました。 2016.10.30
65K Color OLED Display 3.3v 5v Serial SPI Small LCM Module:928円。
Resolution:96×64、Color:65K、Drive:SSD1331、外形:27.3 x 30.7 mm
端子:
GND:GND、VCC:2.8 – 5.6V ( U2 LDO 662K 3.3V)
SCL : Clock、SDA:MOSI、RES:Reset、DC:data/command、CS:chip-select signal
max mc costa の sumotoy氏による SSD_13XX のサンプルです。
SSD_13XX の examples順に 並べてあります |
準備:費用総計:1255円。 価格は 円レート等で変わります。
No | Nomen | Link | Price(円) | memo |
1 | D1 mini or D1 mini Pro * | ebay | 327 | |
2 | 9.5″ 96×64 Color OLED Module | ebay | 928 | |
3 | Library:sumotoy / SSD_13XX | SSD_13XX | – | |
4 | Resistor 10KΩ | – | – |
* WiFi.mode(WIFI_OFF);:この命令で送信電波を停止し without TELEC にします。
配線:基本は sumotoy / SSD_13XX に書かれています。
_ OLED と ESP8266 に7本配線します。
_ OLED:ESP8266
1. GND : GND
2. VCC : 3.3V
3. SCL:GPIO=14 ( D5 ):10KΩ Pull-uP:14は固定。
4. SDA : GPIO=13 ( D7 ):10KΩ Pull-uP:13は固定。
5. RES : 3.3V:できれば 10KΩ Pull Up にする。
6. DC : GPIO= 2 ( D4 ):空いているポートでスケッチで指定する。
7. CS : GPIO= 0 ( D3 ):空いているポートでスケッチで指定する。
スケッチ:GPIO端子の基本的な記述。
_ CS は GPIO=0、DCは GPIO=2、SSD1331 OLED の名前は tft とする。
#include <SSD_13XX.h> #define CS 0 // D3 #define DC 2 // D4 SSD_13XX tft = SSD_13XX(CS, DC);
感想:
1. 価格:96×64 と小さく 安い所でもTFTの3倍で 930円程 になり高いです。
_ 他のColor OLED:SSの1.5インチ 16ビット色のOLEDディスプレイは 5756円
_ で論外の買う値段ではない。
_ Aliexpress や ebay では 128×128 Color OLED Mudule は 300円台の低価格の
_ 128×128 TFT に変わっている。
_ ebayに 1.8″ Serial:UART/I2C/SPI True Color OLED 160×128 Display Module
_ があるが価格が 2850円($27.2) と高いので論外。
2. 表示速度:画面の小ささもありますが SPI は速いです。
3. SDA と SCL の端子:ライブラリー内で固定(13,14)で この番号で動作します。
_ SSD_13XXの説明とライブラリー内の記述を調べると 私の理解不足なのか
_ 何故この番号なのかよくわかりません。
4. 画像データー:ファイルや SD から読み込む方法がありライブラリーの中に
_ 構成されていますので読むと参考になるかと思います。画像データの作り
_ 方は CD-Image-Converter で作る様ですが詳細は調べていません。
_ フォントも LCD_Font_Converter があるようです。
5. 他の SSD1331 のライブラリー:幾つか試しましが動きませんでした。
6. ピクセル:SSD1331 は 96×64、SSD1351 は 128×128の様です。
7. ライブラリー;max mc costa の sumotoy氏に感謝致します。TFTにも感謝。
_ ESP8266のフォルダーだけでなく他のスケッチも動きました。
_ 1つだけ「image_eyeAnimation」はエラーで動きませんでした。
8. 課題:電源投入時に画面が乱れたり動かなくなる事があります。USBケーブル
_ や電源を変えると正常に起動する事もあり 電源起動時のリセット
_ シーケンスではないかと予想していますが 課題です。
9. 注意:電源を入れたまま OLED を抜き差ししない事。動かなくなります。
_ ただし、何度か電源を入れ直すとなんとか戻ります。
OLEDについて:
_ OLED(有機発光ダイオード)は、バックライトを必要としません。
_ 高輝度で軽量で薄く、広視野角、低動作電圧と低消費電力です。
_ 図の破線部は TFT の場合に必要な構成で OLED では不要になりました。
1.8″ 128×160 Color TFT in ESP8266
1.8″ 128×160 Color TFT ST7735B と ESP8266 でアナログ時計を作る。 2016.10.23
ケースのサイズは 60 x 51 x 17mm。費用は 総計859円です。
1.8″ 128×160 Color TFT |
1.44″ 128×128 Color TFT |
1.44″ 128×128 Color TFT in ESP8266 :2016.10.07 から 今回は
1.8″ 128×160 TFT + SD Slot を使用。価格は 317円 と低価格です。
詳細は上記の記事を参照願います。
1.44″ より少し大きくなりますが SD SLOT があり用途が広がります。
準備:費用総計:859円。 :基板とピンを使用しなければ(直付け) 719円で出来ます。
No. | Nomen | Link | Price(円) | Memo |
01 | 1.8″ 128X160 SPI Color TFT | 1.8″ Color TFT | 317 | 1個 GBP 2.50 |
02 | I2C DS3231 RTC Module | DS3231 RTC | 89 | 1個 USD 0.91 |
03 | WeMos D1 mini 又は Pro * | D1 Mini | 313 | 1個 USD 2.47 |
04 | 0.3mm厚基板 | 秋月 | 60 | 1個 |
05 | シングルピンソケット(低メス) | 秋月 | 60 | 1個 |
06 | ロー ピンヘッダ(低オス) | 秋月 | 40 | 1個 |
07 | Resistor 10KΩ | – | – | 5個 |
08 | ケース(3Dプリンターで製作) | – | – | 1個 |
09 | RTClib Library | RTClib | – | RTC |
10 | Adafrui-GFX Library | Adafruit-GFX Library | – | TFT |
11 | Adafruit-ST7735-Library | Adafruit-ST7735-Library | – | TFT |
* WiFi.mode(WIFI_OFF);:この命令で送信電波を停止し without TELEC にします。
配線:
1 :TFT MODULE:
_ 裏にロー ピンヘッダ(低オス:黒)を取り付けます。(左)
_ 黄色のピンは D1 mini が接触しない様に幾つかのピンを外す。(理由:USB端子側)
_ J1 端子(U1 LDOの左)はハンダ・ジャンパーをします。(理由:電源は3Vで使用)
_ 基板の裏に「 Vin : VCC = 3V:J1 SHORT 」と書かれている。
_ (詳細:電源を3.3Vで使用する場合は U1 LDO(AMS1117-33)をパスします。
2 :基板表: 0.3mm基板 + WeMos D1 mini 又は D1 mini Pro + RTC を取り付ける。
_ 低メスコネクターピンを使用する。(理由:厚さを薄くする為)
_ 部品の位置は厚さが薄くなる様に配置します。
_ 接触しやすい部分はカプトンテープ等で絶縁します。
3 :基板裏:
_ 10KΩチップ抵抗 5個を基板に取り付けます。
_ 電源+TFT SPI+SD+RTC 16本の配線をします。
_ SD Slot は 動作確認をしていませんので使用しない場合は配線不要です。
_
_ 配線は極力平行になるようにしました。これにより2回目以降も楽に配線できます。
_ 直付け方式:基板とコネクターを使用しない為 製作の簡略化と費用削減ができます。
_ RTC と D1 mini Pro は両面テープで固定。
_ チップパーツは耐熱(カプトン)テープの上でハンダ付けする。
_ 厚さは 9.6mm 。費用は 合計 984円 ( D1 mini Pro=582円 )。製作時間は 2時間20分。
4 :TFT + 基板 を ケースに入れる。(裏側)
TFT 2.4インチ タイプの改修:過去に製作した 2.4″ TFT LCD も同様に行いました。
_ 2.4″ 320×240 TFT ILI9341 Display に RTC(中央) を取り付け4本配線します。
_ スケッチは 記載しませんが ほぼ同じで位置やサイズを変えます。
_ この 2.4″ は ESP8266をTFT基板に両面テープで直づけし配線しています。
_ 直付けは手間と費用が省け(基板とコネクターが不要)ます。
TFT ディスプレーを並べてみました。
_ 1.44″ 128×128、1.44″ 128×128。(上)。同じ物です。
_ 2.4″ 320×240、1.8″ 128×160。(下)
他の 1.8″ 128×160 SPI TFT ST7735 Color Display
1.8″ TFT LCD Display module ST7735S 128×160:449円
1.8″ SPI TFT Color LCD Module Display Screen128 x 160:419円
1.8″ 128×160 TFT LCD Shield Module SPI serial interface:622円
感想:
サイズ:1.44″ は手の平に入る「可愛い」大きさです。
_ 1.8″ も手の平に入る「ピッタリ」の大きさです。この感触はかなり良いです。
厚さ:ケースの厚さを薄くするトライをしていますが今の所 最薄は 17mmです。
LEDの輝度:基板にある抵抗(30Ωや100Ω)を変更無く使用しています。
_ 比較すると 1.44″ は 1.8″ より少し暗めです。
_ 電流を流し過ぎたり 5V を加えるとLEDが破損しますので注意してください。
価格と容易さ:「千円以内」で「簡単に出来る」事で この物を沢山用意できます。
_ 思いついた時や プログラムに集中して 直ぐ完成品が出来る様になります。
_ さらに費用を減らすには TFT基板に部品を直接接着すれば 719円で出来ます。
基板が欲しい:パターンは簡単です。どなたか基板を作って頂けると良いかも知れません。
_ 条件は基板が薄くできる事と低価格、そしてもう一捻りの案です。
GPIO端子:ESP8266はGPIO端子が少ない為に端子の割り振りはパズルの様になります。
_ TFTのCSはLowにしておけば正常に動きます。つまりGPIOに接続しなく
_ とも動作します。これは少ないGPIO端子を有効に使用できます。
_ RSTもそのはずで端子の使用方法として検討課題です。
スケッチ:アナログ時計。
// D1 mini + 1.8" 128x160 SPI TFT + DS3231 RTC // 2016.10.19 macsbug // https://github.com/adafruit/RTClib // RTClib // https://github.com/adafruit/Adafruit-ST7735-Library // https://github.com/pkourany/Adafruit_ST7735_mfGFX // https://cdn-learn.adafruit.com/downloads/pdf/adafruit-gfx-graphics-library.pdf // https://github.com/sumotoy/TFT_ILI9163C/tree/Pre-Release-1.0p7/examples // http://www.barth-dev.de/online/rgb565-color-picker/ #include <ESP8266WiFi.h> // WIFI #include <Wire.h> // #include <RTClib.h> // RTC RTC_DS3231 rtc; // RTC DS3231 #include <Adafruit_GFX.h> // #include <Adafruit_ST7735.h> // TFT 128x128 ST7735 #define TFT_CS 15 // TFT CS : D8 = 15 #define TFT_RST 16 // TFT RST : D0 = 16 #define TFT_DC 14 // TFT DC : D5 = 14 #define TFT_SCLK 13 // TFT SCK : D7 = 13 * #define TFT_MOSI 12 // TFT SDA : D6 = 12 ** #define RTC_SDA 5 // RTC D : D1 = 5 #define RTC_SCL 4 // RTC C : D2 = 4 #define SD_CS 2 // SD CS : D4 = 2 #define SD_MOSI 0 // SD MOSI: D3 = 0 #define SD_MISO 4 // SD MISO: D6 = 12 ** #define SD_CLK 13 // SD CLK : D7 = 13 * Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, // TFT_DC, TFT_MOSI, TFT_SCLK, TFT_RST); // uint16_t ctrx, ctry; // center x,y of the clock const uint16_t rad = 63; // radius of the clock const float scosConst = 0.0174532925; float sx=0, sy=1, mx=1, my=0, hx= -1, hy=0; float sdeg = 0, mdeg = 0, hdeg = 0; uint16_t osx, osy, omx, omy, ohx, ohy; uint16_t x0 = 0, x1 = 0, yy0 = 0, yy1 = 0; uint16_t xd = 0, yd = 0; uint32_t targetTime = 0; // for next 1 second timeout uint8_t hh, mm, ss; // containers for current time const char* wk[] = { // week "Sun","Mon","Tru","Wed","Thu","Fri","Sat"}; // const char* tm[] = { "12","1","2","3","4","5", // dial "6","7","8","9","10","11","12"}; // void drawClockFace() { tft.fillCircle(ctrx,ctry,rad,0x3CDF); // BLUE tft.fillCircle(ctrx,ctry,rad-4,0x0000); // BLACK for (int i = 0; i < 360; i += 30) { // Draw 12 lines sx = cos((i - 90) * scosConst); sy = sin((i - 90) * scosConst); x0 = sx * (rad - 4) + ctrx; yy0 = sy * (rad - 4) + ctry; x1 = sx * (rad - 11) + ctrx; yy1 = sy * (rad - 11) + ctry; xd = sx * (rad - 8) + ctrx - 2; // dial pos x yd = sy * (rad - 9) + ctry - 3; // dial pos y //tft.drawLine(x0, yy0, x1, yy1, 0x3CDF); // scale tft.drawPixel(x0, yy0, 0xFFFF); // scale String dial = "12"; // dial if ( i > 0 ){ dial = String(i/30);} if ( dial == "12" ){ xd = xd - 3;} tft.setTextColor(0x3CDF); // BLUE tft.setCursor(xd, yd); tft.println(dial); // dial } } void setup(void) { //Serial.begin(115200); WiFi.mode(WIFI_OFF); // without TELEC Wire.begin(RTC_SDA, RTC_SCL); delay(10); // RTC : SDA,SCL,D6,D1 //--------------------------------------------// tft.initR(INITR_BLACKTAB); // 1.8" TFT setup tft.fillScreen(ST7735_BLACK); // tft.setTextColor(0x5FCC); // GREEN tft.setRotation(1); // tft.setTextSize(1); // //--------------------------------------------// ctrx = tft.width()/2; ctry = tft.height()/2; osx = ctrx; osy = ctry; omx = ctrx; omy = ctry; ohx = ctrx; ohy = ctry; drawClockFace(); // Draw clock face //--------------------------------------------// int px = 0; int py = 0; // apple icon tft.drawLine(6+px, 1+py,7+px, 1+py,0x07E0); tft.drawLine(5+px, 2+py,6+px, 2+py,0x07E0); tft.drawLine(5+px, 3+py,5+px, 3+py,0x07E0); tft.drawLine(2+px, 4+py,8+px, 4+py,0xFFE0); tft.drawLine(1+px, 5+py,9+px, 5+py,0xFFE0); tft.drawLine(1+px, 6+py,7+px, 6+py,0xFD24); tft.drawLine(1+px, 7+py,7+px, 7+py,0xFD24); tft.drawLine(1+px, 8+py,9+px, 8+py,0xF800); tft.drawLine(1+px, 9+py,9+px, 9+py,0xF800); tft.drawLine(2+px,10+py,8+px,10+py,0x3CDF); tft.drawLine(3+px,11+py,4+px,11+py,0x3CDF); tft.drawLine(6+px,11+py,7+px,11+py,0x3CDF); //--------------------------------------------// DateTime now = rtc.now(); // time geting from RTC hh = now.hour(); mm = now.minute(); ss = now.second(); targetTime = millis() + 1000; } void drawClockHands(uint8_t h, uint8_t m, uint8_t s) { // Pre-compute hand degrees, x & y coords for a fast screen update sdeg = s * 6; // 0-59->0-354 mdeg = m * 6 + sdeg * 0.01666667; // 0-59->0-360:inc sec hdeg = h * 30 + mdeg * 0.0833333; // 0-11->0-360:inc min & sec hx = cos((hdeg - 90) * scosConst); hy = sin((hdeg - 90) * scosConst); mx = cos((mdeg - 90) * scosConst); my = sin((mdeg - 90) * scosConst); sx = cos((sdeg - 90) * scosConst); sy = sin((sdeg - 90) * scosConst); //--------------------------------------------// yyyy.mm.dd DateTime now = rtc.now(); // read String yd = String(now.year()); // year String md = String(now.month()); // month String dd = String(now.day()); // day String we = String(wk[now.dayOfTheWeek()]); // Week tft.setTextColor(0x5FCC); // tft.setCursor(135, 1); tft.println(yd); // year if(now.month()<10){ md = "0" + md;} // month add 0 if(now.day() <10){ dd = "0" + dd;} // day add 0 tft.setCursor( 1, 120); tft.println(md+dd); // month,day tft.setCursor(135, 120); tft.println(we); // week //--------------------------------------------// tft.drawLine(ohx,ohy,ctrx+1,ctry+1,0x0000); // Erase old positions tft.drawLine(omx,omy,ctrx+1,ctry+1,0x0000); tft.drawLine(osx,osy,ctrx+1,ctry+1,0x0000); //--------------------------------------------// tft.drawLine(hx*(rad-28)+ctrx+1,hy*(rad-28) // Draw new hand positions +ctry+1,ctrx+1,ctry+1,0xFFFF); tft.drawLine(mx*(rad-17)+ctrx+1,my*(rad-17) +ctry+1,ctrx+1,ctry+1,0xFFFF); tft.drawLine(sx*(rad-14)+ctrx+1,sy*(rad-14) +ctry+1,ctrx+1,ctry+1,0xFA06); tft.fillCircle(ctrx+1,ctry+1,3,0xFA06); //-------------------------------------------- osx = sx * (rad - 14) + ctrx + 1; // Update x & y coords osy = sy * (rad - 14) + ctry + 1; omx = mx * (rad - 17) + ctrx + 1; omy = my * (rad - 17) + ctry + 1; ohx = hx * (rad - 28) + ctrx + 1; ohy = hy * (rad - 28) + ctry + 1; } void loop() { if (targetTime < millis()) { targetTime = millis() + 1000; ss++; if (ss == 60) { ss = 0; mm++; if (mm > 59) { mm = 0; hh++; if (hh > 23) hh = 0; } } drawClockHands(hh, mm, ss); } }
1.44″ 128×128 Color TFT in ESP8266
1.44″ 128×128 SPI Color TFT LCD Display を ESP8266 で動かす。 2016.10.07
この TFT Display は ESP8266 へ接続でき 1個278円という最強の低価格品です。
サイズは 45 x 33 x 4.4 mm で WeMos D1 mini にピッタリの大きさです。
アナログ時計を表示しました。時刻情報は DS3231 RTC を使用しています。
スケッチは max mc costa : sumo toy氏の (Clock_exsample)を使用し
文字盤やデジタル表示、アイコンを追加しました。sumotoy氏 に感謝致します。
機能:
アナログ部は 時、分、秒。デジタル部は 年、月日、曜日 を表示します。
WiFi出力は送信停止 ( WiFi.mode(WIFI_OFF); ) にする事により 技適(TELEC)は非該当となります。
構成:
1. ディスプレーは 1.44″ 128×128 SPI Color TFT ST7735。 信号は3.3V動作です。
_ TFTの電源(VCC) は 3V〜5V です。LDO U1 は Marking が662Kで3.3V出力です 。
_ VCC:3.3V を接続し LDO を介しても正常に動作します。(確認済み)
_ VCC:3.3V を使用し LDO をパスする時は U1 隣の J1 をジャンパーします。(確認済み)
_ LED の電源:3.3V を接続し動作しますが 5Vを接続すると LEDが破損します。(確認済み)
_ ELECROW:1.44” 128x 128 TFT LCD with SPI Interface
_ ELECROW:TFT 1.44 SPI 配線図:このモジュールの回路図です。
2. リアルタイムクロックは I2C DS3231 RTC ( 右のIC [ DS3132 ] と 黄色の電池 )
3. 厚さ:WeMos D1 mini は 13.2mm。D1 mini pro は 11.6mm になります。
4. USB 5V の消費電流は 約130mAです。
準備:費用総計:822円。
No | Nomen | Link | Price(円) | Memo |
1 | 1.44″ 128×128 SPI Color TFT * | 1.44″ Color TFT | 278 | 1個 $2.85 |
2 | I2C DS3231 RTC Module | DS3231 RTC | 89 | 1個 $0.91 |
3 | WeMos D1 mini | D1 Mini | 335 | 1個 $3.41 |
4 | 0.3mm厚基板 | 秋月 | 60 | 1個 |
5 | シングルピンソケット(低メス) | 秋月 | 60 | 1個 |
6 | Resistor 10KΩ | – | – | 5個 |
7 | RTClib Library | RTClib | – | RTC |
8 | Adafrui-GFX Library | Adafruit-GFX Library | – | TFT |
9 | Adafruit-ST7735-Library | Adafruit-ST7735-Library | – | TFT |
* ST7735S(V1.1),ST7735R(V1.4),ST7735(V2.1)の3つの Ver がある。
** ebay の価格は円レートで変動します。円高の時にお買い求めください。
配線:
手順:
1. 基板にコネクターと配線 ( SPI 5本、I2C 2本、電源 2本 ) を実施します。
_ プルアップ抵抗 10KΩ 5個を取り付けます。(無いと動作しません)
2. スケッチ1: RTCの初期化 は NTPを使用しない設定方法としました。
_ PC へ接続し RTC に PC の時刻を設定します。
_ PC の日付と時刻を RTC へ保存します。
_ 今回 NTP (WiFi による時刻の通信)は使用しません。
_ NTP(WiFi) を使用する場合 ESP8266 は with TELEC を使用ください。
3. スケッチ2: アナログ時計。
_ アナログ時計を実行すると RTC の時刻で 時,分,秒,年,月日,曜日 を表示します。
補足: 2016.11.10 追記
1.44″ Color TFT には バージョンがあり 画像表示の違い が判明しました。
_ 結果:購入に於いて選択が出来ない為に 今回の修正方法としました。
ネットで論議があり 3つのタイプが述べられています。
ライブラリー制作者もかなり苦労された様です。
_ 1. ST7735S:V1.1:初回購入したもの。
_ 2. ST7735R:V1.4
_ 3. ST7735 :V2.1:追加購入したもので 追記のお話です。
_ 経緯:当初 基板に v1.1 と書かれた物を試用し 以下のスケッチで動いた。
_ その後 他の業者から購入し V2.1 が来た。販売画面に違いの表示はない。
_ 現象:画像の位置ずれが起きました。
_ V1.2 の スケッチの修正:
_ TFT の選択変更:
_ tft.initR(INITR_144GREENTAB); から tft.initR(INITR_18GREENTAB);
_ tft.setRotation(1); から tft.setRotation(3); に変更します。
_ 補正追加: ctrx = tft.width()/2; ctry = tft.height()/2; の後に以下を記述。
_ ctrx = ctrx – 18; ctry = ctry -1; // 1.44 v2.1 center
_ tft.fillRect(-2,-4,127,127,ST7735_BLACK); // 1.44 v2.1 screen clear
参考:
RTClib。 Adafruit-ST7735-Library。 Adafruit_ST7735_mfGFX。
adafruit-gfx-graphics-library:グラフィックの使用方法が書かれています。
TFTのサンプル:アナログ時計は「Clock_example」を使用し幾つかの追加をしました。
カラーピッカーの値算出:名前が定義されていない色の値を取得します。(例:0xFFFF)
Arduino topic:1.44 inch TFT 128×128 GLCD ILI9163:TFTを使用する為の情報
奇麗なフォントを組み込む方法:
_ Adafuruit のフォントは奇麗でないです。
_ Squix TechBlog の Daniel Eichhorn氏は Adafuruit GFX Font 用の Font Converter
_ を作られました。以下の手順で奇麗なフォントを組み込む事が出来ます。
_ FONT CREATOR NOW CREATES ADAFRUIT GFX FONTS
_ Font Converter Daniel Eichhorn氏に感謝致します。
感想:
1. アナログ時計(Clock_exsample)は max mc costa : sumotoy氏に感謝致します。
2. 価格:TFT Display は 278円 という超低価格品です。
_ 理由は Nokia 5110 に使用された大量生産品の恩恵です。
3. サイズ:1.44″ 128×128 TFT LCD Display は 45 x 33 x 4.4 mm。
_ TFT + D1 mini で13mm厚、バッテリ(6mm) + ケースで 24mm厚です。
4. TELEC:テーマによっては WiFi を必要としないものが多数あります。
_ WiFiを使用しない( WiFi.mode(WIFI_OFF); ) 事で消費電力を押さえられます。
_ ESP8266 はこれでも かなりの電流を使用するチップである事は変わりません。
5. sumotoy氏のスケッチ:アナログ表示やメーターの円形表示は sumotoy氏の方法
_ が大変参考になります。高速化の為に 全体を消去せず 針の部分のみの消去
_ と抽画を繰り返し実行しています。
6. Adafuruit のライブラリーと速度: Adafuruit のライブラリは遅いです。
_ これに挑戦した mgo-tec電子工作 の mgo-tec氏の記事は大変参考になります。
_ 「ESP8266 ( ESP-WROOM-02 ) SPI 通信の高速化に挑戦」
_ 衝撃の高速化:是非 記事にある 動画 を見てください。
_ 更に SPISSFファイル方法よりも高速な SDの高速化 も実現されています。
_ mgo-tec氏の素晴らしい挑戦と実現に感謝致します。
7. Adafruit-ST7735-Library-master の graphics test はSPI接続により速いです。
8. TFT に SD Card Socket 付きの製品が 356円という格安で販売されています。
_ 1.8″ 128×160 SPI TFT LCD ST7735B with SD。 現在、調査発注中です。
スケッチ1:RTC に PC の時刻を設定する。
// DS1307 TIME SET #include <ESP8266WiFi.h> #include <Wire.h> #include "RTClib.h" RTC_DS1307 rtc; void setup(void) { WiFi.mode(WIFI_OFF); // TX OFF, without TELEC Serial.begin(115200); Wire.begin(D3,D4); delay(10); // I2C, SDA,SCL rtc.begin(); rtc.adjust(DateTime(__DATE__, __TIME__)); // PCの時刻を設定 } void loop(){ DateTime now = rtc.now(); Serial.print (now.year(), DEC);Serial.print("."); Serial.print (now.month(), DEC);Serial.print("."); Serial.print (now.day(), DEC);Serial.print(" "); Serial.print (now.hour(), DEC);Serial.print(":"); Serial.print (now.minute(),DEC);Serial.print(":"); Serial.println(now.second(),DEC); delay(1000); }
スケッチ2:アナログ時計
// D1 mini + 1.44" 128x128 SPI TFT + DS3231 RTC // 2016.10.03 macsbug // https://github.com/adafruit/RTClib // RTClib // https://github.com/adafruit/Adafruit-ST7735-Library // https://github.com/pkourany/Adafruit_ST7735_mfGFX // https://cdn-learn.adafruit.com/downloads/pdf/adafruit-gfx-graphics-library.pdf // https://github.com/sumotoy/TFT_ILI9163C/tree/Pre-Release-1.0p7/examples // http://www.barth-dev.de/online/rgb565-color-picker/ #include <ESP8266WiFi.h> // WiFi #include <Wire.h> // #include <RTClib.h> // RTC RTC_DS3231 rtc; // RTC DS3231 #include <Adafruit_GFX.h> // #include <Adafruit_ST7735.h> // TFT 128x128 ST7735 #define TFT_CS 16 // TFT CS : D2 = 16 #define TFT_RST 4 // TFT RST : D0 = 4 #define TFT_DC 5 // TFT DC : D5 = 5 #define TFT_SCLK 14 // TFT SCK : D7 = 14 #define TFT_MOSI 13 // TFT MOSI: D6 = 13 Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, // TFT_DC, TFT_MOSI, TFT_SCLK, TFT_RST); // uint16_t ctrx, ctry; // center x,y of the clock const uint16_t rad = 63; // radius of the clock const float scosConst = 0.0174532925; float sx=0, sy=1, mx=1, my=0, hx= -1, hy=0; float sdeg = 0, mdeg = 0, hdeg = 0; uint16_t osx, osy, omx, omy, ohx, ohy; uint16_t x0 = 0, x1 = 0, yy0 = 0, yy1 = 0; uint16_t xd = 0, yd = 0; uint32_t targetTime = 0; // for next 1 second timeout uint8_t hh, mm, ss; // containers for current time const char* wk[] = { // week "Sun","Mon","Tru","Wed","Thu","Fri","Sat"}; // const char* tm[] = { "12","1","2","3","4","5", // dial "6","7","8","9","10","11","12"}; // void drawClockFace() { tft.fillCircle(ctrx,ctry,rad,0x3CDF); // BLUE tft.fillCircle(ctrx,ctry,rad-4,0x0000); // BLACK for (int i = 0; i < 360; i += 30) { // Draw 12 lines sx = cos((i - 90) * scosConst); sy = sin((i - 90) * scosConst); x0 = sx * (rad - 4) + ctrx; yy0 = sy * (rad - 4) + ctry; x1 = sx * (rad - 11) + ctrx; yy1 = sy * (rad - 11) + ctry; xd = sx * (rad - 8) + ctrx - 2; // dial pos x yd = sy * (rad - 9) + ctry - 3; // dial pos y //tft.drawLine(x0, yy0, x1, yy1, 0x3CDF); // scale tft.drawPixel(x0, yy0, 0xFFFF); // scale String dial = "12"; // dial if ( i > 0 ){ dial = String(i/30);} if ( dial == "12" ){ xd = xd - 3;} tft.setTextColor(0x3CDF); // BLUE tft.setCursor(xd, yd); tft.println(dial); // dial } } void setup(void) { WiFi.mode(WIFI_OFF); // TX OFF, without TELEC Wire.begin(D3, D4); delay(10); // I2C RTC : SDA,SCL //--------------------------------------------// tft.initR(INITR_144GREENTAB); // TFT setup tft.fillScreen(ST7735_BLACK); // tft.setTextColor(0x5FCC); // GREEN tft.setRotation(1); // tft.setTextSize(1); // //--------------------------------------------// ctrx = tft.width()/2; ctry = tft.height()/2; osx = ctrx; osy = ctry; omx = ctrx; omy = ctry; ohx = ctrx; ohy = ctry; drawClockFace(); // Draw clock face //--------------------------------------------// int px = 0; int py = 0; // apple icon tft.drawLine(6+px, 1+py,7+px, 1+py,0x07E0); tft.drawLine(5+px, 2+py,6+px, 2+py,0x07E0); tft.drawLine(5+px, 3+py,5+px, 3+py,0x07E0); tft.drawLine(2+px, 4+py,8+px, 4+py,0xFFE0); tft.drawLine(1+px, 5+py,9+px, 5+py,0xFFE0); tft.drawLine(1+px, 6+py,7+px, 6+py,0xFD24); tft.drawLine(1+px, 7+py,7+px, 7+py,0xFD24); tft.drawLine(1+px, 8+py,9+px, 8+py,0xF800); tft.drawLine(1+px, 9+py,9+px, 9+py,0xF800); tft.drawLine(2+px,10+py,8+px,10+py,0x3CDF); tft.drawLine(3+px,11+py,4+px,11+py,0x3CDF); tft.drawLine(6+px,11+py,7+px,11+py,0x3CDF); //--------------------------------------------// DateTime now = rtc.now(); // time geting from RTC hh = now.hour(); mm = now.minute(); ss = now.second(); targetTime = millis() + 1000; } void drawClockHands(uint8_t h, uint8_t m, uint8_t s) { // Pre-compute hand degrees, x & y coords for a fast screen update sdeg = s * 6; // 0-59->0-354 mdeg = m * 6 + sdeg * 0.01666667; // 0-59->0-360:inc sec hdeg = h * 30 + mdeg * 0.0833333; // 0-11->0-360:inc min & sec hx = cos((hdeg - 90) * scosConst); hy = sin((hdeg - 90) * scosConst); mx = cos((mdeg - 90) * scosConst); my = sin((mdeg - 90) * scosConst); sx = cos((sdeg - 90) * scosConst); sy = sin((sdeg - 90) * scosConst); //--------------------------------------------// yyyy.mm.dd DateTime now = rtc.now(); // read String yd = String(now.year()); // year String md = String(now.month()); // month String dd = String(now.day()); // day String we = String(wk[now.dayOfTheWeek()]); // Week tft.setTextColor(0x5FCC); // tft.setCursor(103, 1); tft.println(yd); // year if(now.month()<10){ md = "0" + md;} // month add 0 if(now.day() <10){ dd = "0" + dd;} // day add 0 tft.setCursor( 1, 120); tft.println(md+dd); // month,day tft.setCursor(108, 120); tft.println(we); // week //--------------------------------------------// tft.drawLine(ohx,ohy,ctrx+1,ctry+1,0x0000); // Erase old positions tft.drawLine(omx,omy,ctrx+1,ctry+1,0x0000); tft.drawLine(osx,osy,ctrx+1,ctry+1,0x0000); // Draw new hand positions tft.drawLine(hx*(rad-28)+ctrx+1,hy*(rad-28) +ctry+1,ctrx+1,ctry+1,0xFFFF); tft.drawLine(mx*(rad-17)+ctrx+1,my*(rad-17) +ctry+1,ctrx+1,ctry+1,0xFFFF); tft.drawLine(sx*(rad-14)+ctrx+1,sy*(rad-14) +ctry+1,ctrx+1,ctry+1,0xFA06); tft.fillCircle(ctrx+1,ctry+1,3,0xFA06); //-------------------------------------------- osx = sx * (rad - 14) + ctrx + 1; // Update x & y coords osy = sy * (rad - 14) + ctry + 1; omx = mx * (rad - 17) + ctrx + 1; omy = my * (rad - 17) + ctry + 1; ohx = hx * (rad - 28) + ctrx + 1; ohy = hy * (rad - 28) + ctry + 1; } void loop() { if (targetTime < millis()) { targetTime = millis() + 1000; ss++; if (ss == 60) { ss = 0; mm++; if (mm > 59) { mm = 0; hh++; if (hh > 23) hh = 0; } } drawClockHands(hh, mm, ss); } }
DS3231 RTC in ESP8266
ESP8266 + DS3231 RTC + OLED でデジタル時計を作る。 2016.10.07
ラズベリーパイ用の DS3231 For PI RTC は 小型で 約90円 という低価格です。
部品について:
これまでの DS1307 や DS3231 RTC は 電池が大きく小型化に難がありました。(左)
又 国内での価格は千円以上という高い状態。
ラズベリーパイ用の RTC Module は電池の直径が 9.4mmと小型です。
価格は 1個94円と低価格です。ebay。今回は10個単位の販売を購入。
10個もあると いろいろな形の物を気楽に作れるので便利になります。
国内販売価格:以下は円安(103.8円)時の価格です。購入時は1個85円でした。
No | 名前 | 単価(円) | 送料,代引 | 価格(円) |
1 | ebay:DS3231 10個 ( 939円) | 94 | 0 | 94 |
2 | ebay:DS3231 1個 | 102 | 0 | 102 |
3 | アマゾン:DS3231 (Paspberry pi) * | 197 | 0 | 197 |
4 | アマゾン:DS1307 * | 295 | 0 | 295 |
5 | aitendo:DS3231 | 245 | 790 | 1035 |
6 | aitendo:DS1307 | 395 | 790 | 1185 |
7 | スイッチサイエンス:DS1307 | 1112 | 150 | 1262 |
8 | 秋月:DS1307 | 750 | 800 | 1550 |
9 | スイッチサイエンス:Sparkfun RTC | 1868 | 150 | 2018 |
.
* :アマゾンの格安品:この業者の取り寄せ先は ebay や Aliexpress と同じですが
_ 価格は ebay より高めです。,,2個買える。
メモ:ebay や Aliexpress は Free Shipping が多く送料は無料です。
_ 輸送期間は 通常30日ですが物により2週間で届く物もあります。
動作:
時間調整は電源オン時に NTP(JST) で設定します。
WiFi が無い場合は RTCモジュールに保存された日時を使用します。
準備:費用総計:1416円。
_ NTP( WiFi ) を使用しなければ ( WiFi.mode(WIFI_OFF); で送信オフにする)
_ この場合 No.2 のTELECは不要で 990円となります。
No | Nomen | Link | Price(円) | memo |
1 | D1 mini | ebay | 327 | |
2 | ESP-WROOM-02 with TELEC | ebay | 426 | TELEC |
3 | OLED 128×64(3.3V) | ebay | 569 | |
4 | DS3231 RTC (3.3V)( 電池付き ) | ebay | 94 |
3. 配線:D1 mini の 3.3V, D8, D7, D6 の 並んだ端子を使用する。
_ D1 mini 3.3V = DS3231 +(Vcc) = OLED Vcc。
_ D1 mini D8 = D1 mini GND = DS3231 GND = OLED GND。
_ D1 mini D7(ESP8266-13) = DS3231 C(SCL) = OLED SCL。
_ D1 mini D6(ESP8266-12) = DS3231 D(SDA) = OLED SDA。
4. 組立:D1 mini、DS3231、OLED を3段重ねにする。
5. 箱 :3D Printer にて制作。38mm x 38mm x 38mm
6. スケッチ:リストに示す。
7. 予備知識:ESP8266 + I2C DS1307 RTC + OLED。
8. 予備知識:DS1307 RTC を ESP8266 + UTC(JST)で初期化する。
加工:薄くする為の加工。
_ コネクターとバッテリーを取り除く。バッテリは平行に付けるか他の場所へ付けます。
_
メモ:
電池は使用せず USB電源を使用。
USB 5V ラインでの 消費電流は、USB式電流計にて 約50〜70mA。
電源と I2C 配線のみで簡単です。
NTPのデーター取得:udp.read(buff, NTP_PACKET_SIZE);
RTCのデーター取得:DateTime now = RTC.now();
PCの時刻を設定 :rtc.adjust(DateTime(__DATE__, __TIME__));
感想:
1. RTCの価格:最安値は97円から最高が2018円という、驚く程の価格差があります。
_ ebayで10個購入(939円)でも aitendo や SS の1個より遥かに安いという訳です。
_ 価格が安い事と配線が4本で済みますので 全てのESP8266 に取り付けると便利です。
2. ebayの注意:RTCモジュールの写真で電池がないものがありますので注意してください。
3. ESP8266 に RTC が内蔵していれば このような事をする必要がないんですがね。
4. 最小サイズのの RTC と D1 mini を組み合わせて小型化ができました。
_ 厚さは 10mm でバッテリー(6mm)とケース(4mm)を付けると 約20mm になります。
スケッチ:
// Watch : ESP, I2C DS1307 RTC, I2C OLED, NTP, Timeset : 2016.06.30 #include <ESP8266WiFi.h> // WIFI #include <WiFiUdp.h> // WIFI #include <Wire.h> // #include <SPI.h> // #include <RTClib.h> // RTC RTC_DS3231 RTC; // RTC #include <Adafruit_GFX.h> // OLED #include <ESP_Adafruit_SSD1306.h> // OLED #define OLED_RESET 4 // OLED Adafruit_SSD1306 display(OLED_RESET); // OLED char ssid[] = "xxxx"; // your network SSID char pass[] = "xxxx"; // your network password unsigned int localPort = 2390; // local port to listen IPAddress timeServer(129, 6, 15, 28); // time.nist.gov NTP server const int NTP_PACKET_SIZE = 48; // NTP time : first 48byte byte buff[NTP_PACKET_SIZE]; // incoming & out packets WiFiUDP udp; // UDP:send & rx packets const char* y[] = {"Sun","Mon","Tru","Wed","Thu","Fri","Sat"}; void setup(){ //Serial.begin(115200); //---------------------------------------------// Wire.begin(0, 2); delay(10); // ESP I2C : SDA,SCL display.begin(SSD1306_SWITCHCAPVCC,0x78>>1); // OLED I2C_ADDRESS display.clearDisplay();display.setTextSize(1); // all off, font size=1 display.setCursor(0,0); // location 0,0 display.setTextColor(WHITE);display.display(); // WHITE, display //---------------------------------------------// display.println("Mac Address"); // display.println(WiFi.macAddress()); // Mac Address display display.display(); // //---------------------------------------------// WiFi WiFi.begin(ssid, pass); // WiFi SSID,PASS int w = 32; // WiFi count while (WiFi.status() != WL_CONNECTED){ // WiFI Status delay(500);display.print(WiFi.status()); // wifi status display.display(); w--; if (w<0){ break;} // wifi check/break } // //---------------------------------------------// with wiFi udp.begin(localPort); delay(1000); // UDP sendNTPpacket(timeServer); delay(1000); // send NTP time server int cb = udp.parsePacket(); // if (!cb) {display.println("no packet yet"); // display.display();} // else { // udp.read(buff, NTP_PACKET_SIZE); // read packet buffer unsigned long hW = word(buff[40],buff[41]); // HiWord unsigned long lW = word(buff[42],buff[43]); // loWord unsigned long secsSince1900 = hW << 16 | lW; // const unsigned long seventyYears=2208988800UL;// Convert NTP time unsigned long t = secsSince1900-seventyYears; // Unix time t = t + 32400; // JST=UTC+9(9*60*60) RTC.begin(); RTC.adjust(DateTime(t)); // RTC init & JST SETUP } // } // void loop(){ // DateTime now = RTC.now(); // time geting from RTC //---------------------------------------------// display.clearDisplay();display.setCursor(0,0); // disp Clear,loc 0,0 display.setTextSize(2); // Font Size = 2 //---------------------------------------------// yyyy.mm.dd display.print(now.year()); display.print(".");// year display if(now.month()<10){ display.print(0);} // mon add 0 display.print(now.month()); display.print(".");// mon display if(now.day() <10){ display.print(0);} // day add 0 display.print(now.day()); // day display //---------------------------------------------// Week uint8_t w=now.dayOfWeek(); String Week=y[w]; // Weak Read display.println(Week);display.println(); // Week //---------------------------------------------// Time 12:34:56 if(now.hour() <10){ display.print(0);} // hour add 0 display.print(now.hour()); display.print(":");// hour display if(now.minute()<10){ display.print(0);} // min add 0 display.print(now.minute());display.print(":");// min display if(now.second()<10){ display.print(0);} // sec add 0 display.println(now.second()); // sec display display.display(); // //---------------------------------------------// delay(1000); // 1 sec } // unsigned long sendNTPpacket(IPAddress & adrs){ // send an NTP request memset(buff, 0, NTP_PACKET_SIZE); // buff[ 0]=0b11100011;buff[ 1]=0; buff[ 2]=6; // buff[ 3]=0xEC; buff[12]=49;buff[13]=0x4E; // buff[14]=49; buff[15]=52; // udp.beginPacket(adrs, 123); // udp.write(buff, NTP_PACKET_SIZE); // udp.endPacket(); // }