為了盡量減少硬件要求,我們將在不使用RTC模塊的情況下制作互聯(lián)網(wǎng)時(shí)鐘。與RTC時(shí)鐘相比,這更準(zhǔn)確。ESP32 是一個(gè) Wi-Fi 模塊,可以輕松連接到互聯(lián)網(wǎng),因此我們將使用 NTP(網(wǎng)絡(luò)時(shí)間協(xié)議)和 UDP(用戶數(shù)據(jù)報(bào)協(xié)議)使用 Wi-Fi 從互聯(lián)網(wǎng)上獲取時(shí)間。
什么是 NTP??
網(wǎng)絡(luò)時(shí)間協(xié)議(NTP) 是一種網(wǎng)絡(luò)協(xié)議,用于在系統(tǒng)和數(shù)據(jù)網(wǎng)絡(luò)之間同步時(shí)間。NTP 框架依賴于 Internet Time 服務(wù)器。NTP 具有精確調(diào)整一天中時(shí)間的算法。NTP 服務(wù)器具有使用 UDP端口 123 將時(shí)鐘的時(shí)間發(fā)送到客戶端計(jì)算機(jī)的軟件。因此,在本項(xiàng)目中,我們將使用 ESP32 從 NTP 服務(wù)器獲取時(shí)間,并將其顯示在 OLED 顯示屏上。
所需材料:
ESP32
128*64 OLED顯示屏
面包板
公母線
電路圖:
在這里,我們使用SPI 模式將 128×64 OLED 顯示模塊 (SSD1306) 連接到 ESP32。因此,它將使用 7 個(gè)引腳。與 ESP32 的連接方式如下:
OLED 的 CS(片選)引腳 -ESP32 的 > 引腳 D5
OLED 的直流引腳 -ESP32 的 > 引腳 D4
OLED 的 RES 引腳 -ESP32 的 > 引腳 D2
OLED 的 SDA 引腳 -> 引腳 D23 即 ESP32 的 MOSI
OLED 的 SCK 引腳 -> 引腳 D18 即 ESP32 的 SCK
OLED 的 Vdd -ESP32 的 > Vcc
OLED 的 GND -ESP32 的 GND >
我們包含了所有庫和定義的變量,用于輸入Wi-Fi名稱和密碼。
#include
#include
#include
#include
#include
#include
const char* ssid = "*******"; //WiFi Name
const char* password = "*********"; // WiFi Password
這里NTPClient.h庫用于連接時(shí)間服務(wù)器。NTP 服務(wù)器需要時(shí)間并保持同步。HhreWiFiUdp.h庫用于發(fā)送和接收UDP消息。UDP 是一種從我們的系統(tǒng)向 NTP 服務(wù)器發(fā)送和接收短消息的協(xié)議。
因此,為了從互聯(lián)網(wǎng)上獲取時(shí)間,我們必須在程序中為 NTP 定義三個(gè)變量。
NTP_OFFSET哪個(gè)是您所在國(guó)家/地區(qū)的時(shí)區(qū),即對(duì)于印度,它是+5:30小時(shí)。所以它是 19800 秒。
NTP_INTERVAL這是 NTP 更新時(shí)間所花費(fèi)的時(shí)間間隔。它是60-64秒。
NTP_ADDRESS是您所在國(guó)家/地區(qū)的 NTP 服務(wù)器。對(duì)于印度,您可以使用“in.pool.ntp.org”。
#define NTP_OFFSET 19800 // In seconds
#define NTP_INTERVAL 60 * 1000 // In miliseconds
#define NTP_ADDRESS "1.asia.pool.ntp.org"
WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, NTP_ADDRESS, NTP_OFFSET, NTP_INTERVAL);
在設(shè)置功能中,初始化 Wi-Fi 設(shè)置以連接互聯(lián)網(wǎng)。
void setup()
{
display.begin();
Serial.begin(9600);
Serial.println();
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected.");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
timeClient.begin();
然后初始化顯示函數(shù)以在OLED上顯示時(shí)間。
display.begin(SSD1306_SWITCHCAPVCC);
在循環(huán)函數(shù)中,我們使用了timeClient.update(),這個(gè)函數(shù)以字符串的形式從NTP獲取更新的時(shí)間,并將其存儲(chǔ)在formattedTime變量中。然后使用 display.println() 函數(shù)在 OLED 上顯示它。
void loop()
{
timeClient.update();
String formattedTime = timeClient.getFormattedTime();
display.clearDisplay();
display.setTextSize(2); // set these parameters according to your need..
display.setCursor(0, 0);
display.println(formattedTime);
-
互聯(lián)網(wǎng)
+關(guān)注
關(guān)注
54文章
11076瀏覽量
102631 -
wi-fi
+關(guān)注
關(guān)注
14文章
2098瀏覽量
124247 -
ESP32
+關(guān)注
關(guān)注
17文章
952瀏覽量
16994
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論