ในบทช่วยสอนก่อนหน้านี้เราได้สร้างนาฬิกา RTC โดยใช้ DS3231 และ ESP32 เพื่อลดความต้องการของฮาร์ดแวร์เราจะทำให้นาฬิกาอินเทอร์เน็ตโดยไม่ต้องใช้โมดูล RTC มีความแม่นยำมากกว่าเมื่อเปรียบเทียบกับนาฬิกา RTC ESP32 เป็นโมดูล Wi-Fi และสามารถเชื่อมต่อกับอินเทอร์เน็ตได้อย่างง่ายดายดังนั้นเราจะใช้ NTP (Network Time Protocol) และ UDP (User Datagram Protocol) เพื่อดึงเวลาจากอินเทอร์เน็ตโดยใช้ Wi-Fi นาฬิกาอินเทอร์เน็ตนี้มีประโยชน์มากในขณะที่สร้างโครงการ IoT
NTP คืออะไร ??
Network Time Protocol (NTP) เป็นโปรโตคอลเครือข่ายที่ใช้สำหรับการซิงโครไนซ์เวลาระหว่างระบบ a0nd เครือข่ายข้อมูล กรอบงาน NTP ขึ้นอยู่กับเซิร์ฟเวอร์เวลาอินเทอร์เน็ต NTP มีอัลกอริทึมเพื่อปรับเวลาของวันอย่างแม่นยำ เซิร์ฟเวอร์ NTP มีซอฟต์แวร์ที่ส่งเวลาของนาฬิกาไปยังคอมพิวเตอร์ไคลเอนต์โดยใช้ UDPport 123 ดังนั้นในโครงการนี้เราได้รับเวลาจากเซิร์ฟเวอร์ NTP โดยใช้ ESP32 และแสดงบนจอแสดงผล OLED
วัสดุที่ต้องการ:
- ESP32
- 128 * 64 จอแสดงผล OLED
- เขียงหั่นขนม
- สายไฟตัวผู้ - ตัวเมีย
แผนภูมิวงจรรวม:
ที่นี่เรากำลังใช้ โหมด SPI เพื่อเชื่อมต่อโมดูลการแสดงผล OLED 128 × 64 (SSD1306) กับ ESP32 ดังนั้นจะใช้ 7 พิน การเชื่อมต่อกับ ESP32 กำหนดเป็น:
- CS (เลือกชิป) พินของ OLED -> PIN D5 ของ ESP32
- ขา DC ของ OLED -> PIN D4 ของ ESP32
- RES pin ของ OLED -> PIN D2 ของ ESP32
- SDA pin ของ OLED -> PIN D23 เช่น MOSI ของ ESP32
- SCK pin ของ OLED -> PIN D18 เช่น SCK ของ ESP32
- Vdd ของ OLED -> Vcc ของ ESP32
- GND ของ OLED -> GND ของ ESP32
คุณต้องการไฟล์บอร์ดสำหรับ ESP32 ของคุณ เมนูแบบเลื่อนลงผู้จัดการบอร์ดเช็คอินของ Arduino IDE สำหรับ ESP32 dev kit หากไม่มีให้ทำตามขั้นตอนที่ระบุในลิงค์ด้านล่าง:
circuitdigest.com/microcontroller-projects/getting-started-with-esp32-with-arduino-ide
คุณยังสามารถใช้ ESP12 สำหรับโครงการนี้เรียนรู้ที่นี่เพื่อใช้ ESP12
เราจะใช้ Arduino IDE เพื่อเขียนโปรแกรมของเราตามที่อธิบายไว้ในบทความข้างต้น
คำอธิบายรหัส:
รหัสที่สมบูรณ์สำหรับนาฬิกาอินเทอร์เน็ต ESP32 จะได้รับในตอนท้ายของบทความ เรากำลังอธิบายส่วนสำคัญบางส่วนของโค้ด
เราต้องการไลบรารีหลายแห่งเพื่อใช้ในรหัสของเราซึ่งสามารถดาวน์โหลดได้จากลิงค์ด้านล่าง:
1. Adafruit_SSD1306:
2. SPI:
3. Adafruit_GFX:
4. NTPClient:
5. WiFiUdp:
ดังนั้นเราจึงได้รวมไลบรารีทั้งหมดและตัวแปรที่กำหนดไว้สำหรับป้อนชื่อและรหัสผ่าน Wi-Fi
# รวม
ที่นี่ห้องสมุด NTPClient.h ใช้เพื่อเชื่อมต่อกับเซิร์ฟเวอร์เวลา ต้องใช้เวลาจากเซิร์ฟเวอร์ NTP และซิงค์อยู่เสมอ และไลบรารี Hhre WiFiUdp.hใช้ในการส่งและรับข้อความ UDP UDP เป็นโปรโตคอลที่ส่งและรับข้อความสั้นจากระบบของเราไปยังเซิร์ฟเวอร์ NTP
ดังนั้นเพื่อให้ได้เวลาจากอินเทอร์เน็ตเราต้องกำหนดตัวแปรสามตัวในโปรแกรมของเราสำหรับ NTP
NTP_OFFSET ซึ่งเป็นเขตเวลาของประเทศของคุณเช่นสำหรับอินเดียคือ +5:30 ชั่วโมง มันคือ 19800 วินาที
NTP_INTERVAL ซึ่งเป็นช่วงเวลาที่ NTP ใช้เพื่ออัปเดตเวลา เป็น 60-64 วินาที
NTP_ADDRESS คือเซิร์ฟเวอร์ NTP ของประเทศของคุณ สำหรับอินเดียคุณสามารถใช้“ in.pool.ntp.org ”
#define NTP_OFFSET 19800 // ในไม่กี่วินาที #define NTP_INTERVAL 60 * 1000 // ในหน่วยมิลลิวินาที #define NTP_ADDRESS "1.asia.pool.ntp.org" WiFiUDP ntpUDP; NTPClient timeClient (ntpUDP, NTP_ADDRESS, NTP_OFFSET, NTP_INTERVAL);
ในฟังก์ชัน การตั้งค่า เริ่มต้นการตั้งค่า Wi-Fi เพื่อเชื่อมต่อกับอินเทอร์เน็ต
การตั้งค่าเป็นโมฆะ () { display.begin (); Serial.begin (9600); Serial.println (); Serial.println (); Serial.print ("กำลังเชื่อมต่อกับ"); Serial.println (ssid); WiFi.begin (ssid รหัสผ่าน); ในขณะที่ (WiFi.status ()! = WL_CONNECTED) { ล่าช้า (500); Serial.print ("."); } Serial.println (""); Serial.println ("เชื่อมต่อ WiFi แล้ว"); Serial.println ("ที่อยู่ IP:"); Serial.println (WiFi.localIP ()); timeClient.begin ();
จากนั้นเริ่มต้นฟังก์ชันการแสดงผลเพื่อแสดงเวลาบน OLED
display.begin (SSD1306_SWITCHCAPVCC);
ในฟังก์ชันลูปเราได้ใช้ timeClient.update () ฟังก์ชันนี้ใช้เวลาอัปเดตจาก NTP ในรูปแบบของสตริงและเก็บไว้ในตัวแปร formattedTime จากนั้นแสดงบน OLED โดยใช้ฟังก์ชัน display.println ()
เป็นโมฆะ loop () { timeClient.update (); สตริง formattedTime = timeClient.getFormattedTime (); display.clearDisplay (); display.setTextSize (2); // ตั้งค่าพารามิเตอร์เหล่านี้ตามความต้องการของคุณ.. display.setCursor (0, 0); display.println (formattedTime);
โปรแกรมเต็มได้รับด้านล่าง ในที่สุดก็ตั้งโปรแกรม ESP32 ด้วย Arduino IDE และนาฬิกาอินเทอร์เน็ตของคุณก็พร้อมที่จะแสดงเวลา