WiFi Sync Clock-個人專題

Shih Jiun Lin Lv4

WiFi Sync Clock

功能及運作

  • 透過Esp32連結WiFi。
  • 從NTP Server接收資料(字串)。
  • 將接收到的字串做處理。
  • 在8*32的LED矩陣做顯示。
  • 並每過一分鐘時,顯示一次日期。

什麼是NTP and NTP Server?

  • NTP全名為NetWork Time Protocol,透過這個協議我們可以將伺服器實踐做同步。
  • NTP Server,中文稱作時間伺服器,是一種專門用來提供時間資訊的伺服器,可以Request日期、時間...等相關資料。

材料準備

  • ESP32 開發板 *1
  • 杜邦線(母對母) *n
  • 配有 max7219 的 LED 832 矩陣(FC-16) 2

電路連接

  • max7219 腳位連接
    • DIN(Data in): 23
    • CLK(Clock): 18
    • CS(Load): 5

程式編寫

  • 需要先安裝以下函式庫
    • NTPClient
    • MD_MAX72XX
    • MD_Parola
  • 需要先設定連接的wifi
    • ssid,改成你要連接的WiFi名稱。
    • password,改成你要連接的WiFi名稱。
1
2
3
//wifi設定
const char* ssid = "WiFi_Name";
const char* password = "WiFi_Password";
  • 程式碼:

程式碼下載

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#include <WiFi.h>
#include <NTPClient.h>
#include <WiFiUdp.h>
#include <MD_MAX72xx.h>
#include <MD_Parola.h>
#include <SPI.h>

#define HARDWARE_TYPE MD_MAX72XX::FC16_HW
#define MAX_DEVICES 4
#define CLK_PIN 18
#define DATA_PIN 23
#define CS_PIN 5

//wifi設定
const char* ssid = "OmaeWaMou";
const char* password = "19690824";

WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP);
MD_Parola Display = MD_Parola(HARDWARE_TYPE, DATA_PIN, CLK_PIN, CS_PIN, MAX_DEVICES);

String main_info;
String hour;
String minute;
String year;
String month;
String day;
String sec;

//wifi 連接
void wifiConnection(){
Serial.print("正在嘗試連線至");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("WiF已連接");
}

void setTime(){
main_info=timeClient.getFormattedDate(); //回傳的資料形態 ex:2023-01-19T23:59:59Z
int find_T=main_info.indexOf('T'); //找出T的位置
//做字串處理
hour=main_info.substring(find_T+1, find_T+3);
minute=main_info.substring(find_T+4, find_T+6);
sec=main_info.substring(find_T+7, find_T+9);
year=main_info.substring(find_T-10, find_T-6);
month=main_info.substring(find_T-5, find_T-3);
day=main_info.substring(find_T-2, find_T);
}

void timeDisplay(){
Display.setIntensity(5);
Display.setTextAlignment(PA_CENTER);
//顯示":"在閃的特效
Display.print(hour+":"+minute);
delay(500);
Display.print(hour+" "+minute);
delay(500);
//當second==00時,代表一分鐘過去,即顯示日期
if(sec=="00"){
Display.print(year);
delay(1000);
Display.print(month);
delay(1000);
Display.print(day);
delay(1000);
}
}
void setup(){
Serial.begin(115200);
delay(10);
wifiConnection();

timeClient.begin();
timeClient.setTimeOffset(28800); //調整時區,台灣時區為GMT+8,故function內的值為28800s(8 hrs)。

Display.begin();
Display.setIntensity(0);
Display.displayClear();
}
void loop(){
//當接收到ntp資料時,執行字串處理function和顯示function
while(timeClient.update()){
setTime();
timeDisplay();
}
}

外觀設計

  • 主要以塑膠瓦楞紙板透過熱熔膠拼接而成。
  • 一個上下未封蓋的三角柱體為主體。
    • 正面:
      • 挖出一個3.3*16公分的長形來放置LED矩陣。
    • 側面
      • 右: 放置ESP32、相關線材及訊號接收線。

      • 左: 放置電源供應線。

功能展示

  • Title: WiFi Sync Clock-個人專題
  • Author: Shih Jiun Lin
  • Created at : 2023-01-20 01:18:01
  • Updated at : 2023-01-24 01:33:04
  • Link: https://shih-jiun-lin.github.io/2023/01/20/WiFi Sync Clock/
  • License: This work is licensed under CC BY-NC-SA 4.0.