สารบัญ:

นาฬิกาอินเทอร์เน็ต: แสดงวันที่และเวลาด้วย OLED โดยใช้ ESP8266 NodeMCU พร้อมโปรโตคอล NTP: 6 ขั้นตอน
นาฬิกาอินเทอร์เน็ต: แสดงวันที่และเวลาด้วย OLED โดยใช้ ESP8266 NodeMCU พร้อมโปรโตคอล NTP: 6 ขั้นตอน

วีดีโอ: นาฬิกาอินเทอร์เน็ต: แสดงวันที่และเวลาด้วย OLED โดยใช้ ESP8266 NodeMCU พร้อมโปรโตคอล NTP: 6 ขั้นตอน

วีดีโอ: นาฬิกาอินเทอร์เน็ต: แสดงวันที่และเวลาด้วย OLED โดยใช้ ESP8266 NodeMCU พร้อมโปรโตคอล NTP: 6 ขั้นตอน
วีดีโอ: EP.7 การใช้ฟังก์ชั่น วัน-เวลา จาก NTP กับ NodeMCU - แบบเรียนรู้ออนไลน์รายวิชา IoT 2024, มิถุนายน
Anonim
นาฬิกาอินเทอร์เน็ต: แสดงวันที่และเวลาด้วย OLED โดยใช้ ESP8266 NodeMCU พร้อมโปรโตคอล NTP
นาฬิกาอินเทอร์เน็ต: แสดงวันที่และเวลาด้วย OLED โดยใช้ ESP8266 NodeMCU พร้อมโปรโตคอล NTP

สวัสดีทุกคนในคำแนะนำนี้ เราจะสร้างนาฬิกาอินเทอร์เน็ตซึ่งจะได้รับเวลาจากอินเทอร์เน็ต ดังนั้นโครงการนี้จึงไม่ต้องการ RTC ใด ๆ เพื่อทำงาน เพียงเชื่อมต่ออินเทอร์เน็ตที่ใช้งานได้

และสำหรับโครงการนี้ คุณต้องมี esp8266 ซึ่งจะมี wifi เพื่อเข้าถึงอินเทอร์เน็ตและหน้าจอแสดงเวลาบนนั้น และ esp8266 จะดึงเวลาจากอินเทอร์เน็ตโดยใช้โปรโตคอล NTP ntp หมายถึงโปรโตคอลเวลาเครือข่าย ดังนั้นโดยทั่วไปจะมีเซิร์ฟเวอร์ ntp บนเว็บที่ใช้ในการซิงโครไนซ์นาฬิกาคอมพิวเตอร์และเราจะใช้เซิร์ฟเวอร์เหล่านั้นเพื่อรับเวลาในโครงการของเรา

ขั้นตอนที่ 1: สิ่งที่คุณต้องการ

สิ่งที่คุณต้องการ
สิ่งที่คุณต้องการ
สิ่งที่คุณต้องการ
สิ่งที่คุณต้องการ
สิ่งที่คุณต้องการ
สิ่งที่คุณต้องการ

สำหรับโครงการนี้ คุณจะต้องมีสิ่งต่อไปนี้:

Esp8266/nodemcu

โอลด์ ssd1306 0.96"

สายจัมเปอร์

เขียงหั่นขนม

สาย USB

ขั้นตอนที่ 2: การเชื่อมต่อ

การเชื่อมต่อ
การเชื่อมต่อ

จอแสดงผล OLED แบบ 4 พินนี้สื่อสารกับโมดูล ESP8266 โดยใช้โปรโตคอล I2C ด้านล่างนี้คือแผนภาพวงจรและตารางการเชื่อมต่อเพื่อเชื่อมต่อหมุด OLED I2C กับ NodeMCU เพื่อแสดงเวลาอินเทอร์เน็ต

ขั้นตอนที่ 3: ดาวน์โหลดไลบรารี

ดาวน์โหลดห้องสมุด
ดาวน์โหลดห้องสมุด
ดาวน์โหลดห้องสมุด
ดาวน์โหลดห้องสมุด

ตรวจสอบให้แน่ใจว่าคุณได้ดาวน์โหลดไลบรารี SD1306 ใน Arduino ide ของคุณตามที่แสดงในภาพ และตรวจสอบให้แน่ใจว่าคุณเป็นไลบรารี Adafruit GFX ด้วยเช่นกัน หากไม่ได้ติดตั้งไลบรารีทั้งสองนี้

ใน Arduino IDE ของคุณ ให้ไปที่ตัวจัดการ Libraries และค้นหา NTP และเพียงดาวน์โหลดไลบรารีไคลเอนต์ NTP เมื่อฉันดาวน์โหลด โปรดดูรูปภาพสำหรับความช่วยเหลือเพิ่มเติม

ขั้นตอนที่ 4: NTP.คืออะไร

NTP.คืออะไร
NTP.คืออะไร

NTP เป็นหนึ่งในเครือข่ายอินเทอร์เน็ตโปรโตคอล (IP) ที่เก่าแก่ที่สุดสำหรับการซิงโครไนซ์นาฬิการะหว่างเครือข่ายคอมพิวเตอร์ ออกแบบโดย David L. Mills แห่ง University of Delaware ในปี 1981 โปรโตคอลนี้สามารถใช้เพื่อซิงโครไนซ์เครือข่ายจำนวนมากกับ Coordinated Universal Time (UTC) ภายในไม่กี่มิลลิวินาที UTC เป็นมาตรฐานเวลาหลักที่โลกควบคุมนาฬิกาและเวลา UTC จะไม่เปลี่ยนแปลงและแตกต่างกันไปตามสถานที่ทางภูมิศาสตร์ที่ต่างกัน NTP ใช้ UTC เป็นเวลาอ้างอิงและให้เวลาที่ถูกต้องและตรงกันทางอินเทอร์เน็ต

NTP ทำงานบนโมเดลไคลเอนต์-เซิร์ฟเวอร์แบบลำดับชั้น รุ่นท็อปมีนาฬิกาอ้างอิงที่เรียกว่า “stratum0” เช่น นาฬิกาอะตอม, คลื่นวิทยุ, GPS, GSM ซึ่งรับเวลาจากดาวเทียม เซิร์ฟเวอร์ที่ได้รับเวลาจาก stratum0 เรียกว่า "stratum1" และเซิร์ฟเวอร์ที่ได้รับเวลาจาก stratum1 จะเรียกว่า "stratum2" เป็นต้น สิ่งนี้ดำเนินต่อไปและความแม่นยำของเวลาลดลงหลังจากแต่ละด่าน NTP จะเลือกแหล่งเวลาที่ดีที่สุดจากหลายแหล่งโดยอัตโนมัติเพื่อซิงโครไนซ์ ซึ่งทำให้โปรโตคอลสามารถทนต่อข้อผิดพลาดได้ ในโครงการนี้ เราได้รับเวลาจากเซิร์ฟเวอร์ NTP โดยใช้ ESP8266 NodeMCU และแสดงบนจอแสดงผล OLED นาฬิกาอินเทอร์เน็ตชนิดเดียวกันนี้สร้างขึ้นโดยใช้ ESP32 ในบทช่วยสอนก่อนหน้า

ขั้นตอนที่ 5: ส่วนการเข้ารหัส

ส่วนการเข้ารหัส
ส่วนการเข้ารหัส

หากต้องการขอวันที่และเวลา ให้เริ่มต้นไคลเอนต์เวลาด้วยที่อยู่ของเซิร์ฟเวอร์ NTP เพื่อความแม่นยำที่ดียิ่งขึ้น ให้เลือกที่อยู่ของเซิร์ฟเวอร์ NTP ซึ่งอยู่ใกล้กับพื้นที่ทางภูมิศาสตร์ของคุณ ที่นี่เราใช้ “pool.ntp.org” ซึ่งให้บริการเซิร์ฟเวอร์จากทั่วโลก หากคุณต้องการเลือกเซิร์ฟเวอร์จากเอเชีย คุณสามารถใช้ “asia.pool.ntp.org” timeClient ยังใช้เวลาชดเชย UTC ในหน่วยมิลลิวินาทีของเขตเวลาของคุณ ตัวอย่างเช่น ออฟเซ็ต UTC สำหรับอินเดียคือ +5:30 ดังนั้นเราจึงแปลงออฟเซ็ตนี้เป็นมิลลิวินาที ซึ่งเท่ากับ 5*60*60+30*60 = 19800

พื้นที่. ออฟเซ็ตเวลา UTC (ชั่วโมงและนาที) ออฟเซ็ตเวลา UTC (วินาที)

อินเดีย +5:30 น. 19800

ลอนดอน 0:00. 0

นิวยอร์ก -5:00 -18000

โปรดคัดลอกรหัสต่อไปนี้ & ป้อน wifi & รหัสผ่านของคุณในรหัส & ป้อนเวลาชดเชยในรหัส จากนั้นอัปโหลดไปยังบอร์ด esp8266 ของคุณ:

#include "NTPClient.h"#include "ESP8266WiFi.h" // ให้รูทีน Wi-Fi เฉพาะของ ESP8266 ที่เราเรียกเพื่อเชื่อมต่อกับเครือข่าย #include "WiFiUdp.h" // จัดการการส่งและรับแพ็คเกจ UDP

#include "SPI.h" // SPI สำหรับเชื่อมต่อ OLED กับ NodeMCu

#รวม "Adafruit_GFX.h"

#รวม "Adafruit_SSD1306.h"

#define SCREEN_WIDTH 128 // ความกว้างของจอแสดงผล OLED ในหน่วยพิกเซล

#define SCREEN_HEIGHT 64 // ความสูงของจอแสดงผล OLED ในหน่วยพิกเซล

#define OLED_RESET -1

จอแสดงผล Adafruit_SSD1306 (SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

constchar *ssid = "yourwifissid";

const char *password = "yourwifipass";

WiFiUDP ntpUDP;

NTPClient timeClient(ntpUDP, "pool.ntp.org", 19800, 60000);

สตริง arr_days={"วันอาทิตย์", "วันจันทร์", "วันอังคาร", "วันพุธ", "วันพฤหัสบดี", "วันศุกร์", "วันเสาร์"};

สตริง date_time; // คุณสามารถระบุพูลเซิร์ฟเวอร์เวลาและออฟเซ็ตได้ (ในหน่วยวินาที สามารถเปลี่ยนได้ในภายหลังด้วย setTimeOffset()) นอกจากนี้ คุณสามารถระบุ // ช่วงการอัปเดต (ในหน่วยมิลลิวินาที สามารถเปลี่ยนได้โดยใช้ setUpdateInterval())

การตั้งค่าเป็นโมฆะ ()

{

Serial.begin(115200);

WiFi.begin(ssid, รหัสผ่าน);

ในขณะที่ (WiFi.status() != WL_CONNECTED)

{

ล่าช้า (500);

Serial.print (".");

}

if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C))

{

Serial.println(F("การจัดสรร SSD1306 ล้มเหลว"));

สำหรับ(;;); //อย่าไปต่อ วนลูปตลอดไป

}

display.clearDisplay();

display.setTextSize(2); // วาดข้อความมาตราส่วน 2X

display.setTextColor(สีขาว);

display.setCursor(5, 2);

display.println("ยินดีต้อนรับ");

display.println("instructables");

display.println("โครงการ");

display.display();

ล่าช้า (3000);

timeClient.begin();

}

วงเป็นโมฆะ ()

{

timeClient.update();

display.clearDisplay();

Serial.println(timeClient.getFormattedTime());

display.setTextSize(2); // วาดข้อความมาตราส่วน 2X

display.setTextColor(สีน้ำเงิน);

display.setCursor(0, 2);

int hh = timeClient.getHours();

int มม. = timeClient.getMinutes();

int ss = timeClient.getSeconds();

ถ้า(hh>12)

{

hh=hh-12;

display.print(hh);

display.print(":");

display.print(mm);

display.print(":");

display.print(ss);

display.println("PM");

}

อื่น

{

display.print(hh);

display.print(":");

display.print(mm);

display.print(":");

display.print(ss);

display.println("น");

}

วัน int = timeClient.getDay();

display.println("'"+arr_days[วัน]+"'");

date_time = timeClient.getFormattedDate();

int index_date = date_time.indexOf ("T");

วันที่สตริง = date_time.substring(0, index_date);

Serial.println (วันที่);

display.println (วันที่);

display.display();

// แสดงข้อความเริ่มต้น }

ขั้นตอนที่ 6: รับวันที่ & เวลา

รับวันที่ & เวลา
รับวันที่ & เวลา

หากคุณเชื่อมต่อทุกอย่างถูกต้องและอัปโหลดโค้ดอย่างถูกต้องด้วย คุณจะเห็นนาฬิกา ntp ของคุณทำงานบนจอแสดงผล oled เป็นของฉันในการทำงานในจอแสดงผล oled โปรดดูภาพสำหรับการส่งออก

แนะนำ: