สร้างนาฬิกาดิจิตอลที่แตกต่างจากนาฬิกาทั่วไป ด้วยการใช้ป้ายไฟ LED Matrix P4/P5 แสดงผลขนาดใหญ่ มองเห็นได้ชัดเจนแม้ระยะไกล ที่สำคัญคือนาฬิกานี้ดึงเวลาจากอินเตอร์เน็ตผ่าน NTP Server ทำให้เวลาแม่นยำตลอดเวลาโดยอัตโนมัติ ไม่ต้องตั้งเวลาเองเหมือนนาฬิกาธรรมดา ปรับเวลาตามเขตเวลาของประเทศไทย
อุปกรณ์ที่ใช้ประกอบด้วยบอร์ด IOXESP32 ที่มี WiFi ในตัว, อุปกรณ์เสริมชุด IOXESP32 HUB75 shield, ป้ายไฟ P4 หรือ P5, และ Power Supply 5V หลักการทำงานคือ ESP32 จะเชื่อมต่อ WiFi เพื่อดึงเวลาจาก NTP Server ผ่านอินเตอร์เน็ต แล้วนำมาแสดงผลบนหน้าจอ LED Matrix ซิงค์เวลาอัตโนมัติเป็นระยะ เหมาะสำหรับติดตั้งในร้านค้า สำนักงาน หรือใช้เป็นโปรเจกต์เรียนรู้ IoT และการควบคุม LED Matrix
ป้ายไฟ LED Matrix หรือ LED Panel เป็นจอแสดงผลที่ประกอบด้วยหลอด LED จำนวนมากเรียงกันเป็นตาราง (Matrix) สามารถควบคุมให้แสดงผลข้อความ รูปภาพ หรือวิดีโอได้ มักเห็นตามป้ายโฆษณา สนามกีฬา หรือป้ายประกาศต่างๆ ที่มีขนาดใหญ่และมองเห็นได้ชัดเจนแม้ในที่โล่ง โดยตัวเลข P4 และ P5 หมายถึงระยะห่างระหว่างจุดไฟ LED (Pixel Pitch) แต่ละดวงที่วัดเป็นมิลลิเมตร โดย P4 หมายถึง ระยะห่างระหว่าง LED แต่ละดวง 4 มิลลิเมตร และ P5 หมายถึง ระยะห่างระหว่าง LED แต่ละดวง 5 มิลลิเมตร
รูปที่ 1 ป้ายไฟ P4 ด้านหน้า
รูปที่ 2 ป้ายไฟ P4 ด้านหลัง
LED Matrix ใช้เทคนิค Multiplexing ในการควบคุม โดยจะสแกนแถว (Scan Rate) ทีละแถวอย่างรวดเร็ว เช่น 1/16 Scan หมายถึงสแกน 16 แถวสลับกัน ตาเรามองเห็นเป็นภาพเต็มจอเพราะความเร็วในการสแกนสูงมาก (มากกว่า 50-60 Hz) การควบคุมความสว่างทำได้ด้วยเทคนิค BCM (Binary Code Modulation)
P4/P5/P10 ใช้ขั้วต่อ HUB75 เป็นมาตรฐาน โดยประกอบด้วยสายสัญญาณหลัก ดังนี้
การควบคุมการแสดงผล ทำผ่านการป้อนสัญญาณควบคุมเข้า HUB75
รูปที่ 3 ขั้วต่อ HUB75 ด้านขาเข้า
การควบคุม LED Matrix ด้วยการส่งสัญญาณแบบปกติผ่าน GPIO มีปัญหาหลายประการ
การใช้ ESP32 สั่งงานจอ P4/P5 จึงต้องใช้เทคนิคพิเศษในการแก้ปัญหานี้โดยใช้วงจร I2S (Inter-IC Sound) ร่วมกับ DMA (Direct Memory Access) ซึ่งแต่เดิม I2S ออกแบบมาสำหรับส่งสัญญาณเสียง แต่ ESP32 ออกแบบวงจรนี้ให้ยืดหยุ่นพอที่จะสามารถนำมาใช้ส่งสัญญาณดิจิตอลแบบขนาน (Parallel) ความเร็วสูงได้
NTP (Network Time Protocol) คือโปรโตคอลสำหรับซิงโครไนซ์เวลาผ่านเครือข่ายอินเตอร์เน็ต โดย NTP Server คือเซิร์ฟเวอร์ที่ให้บริการแจกจ่ายเวลามาตรฐานแก่อุปกรณ์ต่างๆ ที่เชื่อมต่อเข้ามาขอข้อมูลเวลา
NTP ทำงานอยู่บนโปรโตคอล UDP (User Datagram Protocol) เมื่อมีการร้องขอเวลาเข้ามาที่ NTP Server ก็จะมีการตอบเวลาปัจจุบันกลับไปทันที เมื่อหักเวลาที่ใช้ในการรับ-ส่งข้อมูล ก็จะได้เวลาแท้จริงออกมา
NTP Server มีระดับความแม่นยำหลายระดับ เรียกว่า Stratum Level โดย Stratum 0 ใช้แหล่งเวลาจากนาฬิกาอะตอม (Atomic Clock) หรือ GPS ซึ่งเป็นแหล่งเวลาที่แม่นยำที่สุด ถัดมาเป็น Stratum 1 เซิร์ฟเวอร์ NTP ที่เชื่อมต่อโดยตรงกับ Stratum 0 มีแม่นยำมาก และ Stratum ถัด ๆ มา มีควาแม่นยำน้อยลงเรื่อย ๆ
ในบทความนี้ใช้ NTP Server ระดับ Stratum 2 ที่เปิดให้ใช้งานสาธาณะ ความแม่นยำ ±10-100 ms ถือว่าเพียงพอสำหรับงานแสดงเวลาทั่วไป
1) IOXESP32+ บอร์ดพัฒนา ESP32 รุ่นอัพเลเวล (กดที่รูปเพื่อสั่งซื้อสินค้า)
2) IOXESP32 HUB75 Matrix Panel shield โมดูลเสริม ESP32 ต่อจอ P4/P5 (กดที่รูปเพื่อสั่งซื้อสินค้า)
3) IOXESP32 Dual Base บัดกรีขาแล้ว (กดที่รูปเพื่อสั่งซื้อสินค้า)
4) ป้ายไฟ P4 หรือ P5 แบบ RGB พร้อมสายข้อมูล และสายไฟเลี้ยง (กดที่รูปเพื่อสั่งซื้อสินค้า)
5) แหล่งจ่ายไฟ 5V 2A หรือมากกว่า
6) (ส่วนเสริม หากต้องการให้ใช้ได้แม้ไม่มีอินเตอร์เน็ต) AS-RTC2 RX8130CE โมดูลนับเวลา RTC I2C Modules (กดที่รูปเพื่อสั่งซื้อสินค้า)
7) (ส่วนเสริม หากต้องการให้ใช้ได้แม้ไม่มีอินเตอร์เน็ต) สาย Grove (กดที่รูปเพื่อสั่งซื้อสินค้า)
เชื่อมต่ออุปกรณ์ทั้งหมดเข้าด้วยกันดังรูปต่อไปนี้
เปิดโปรแกรม Arduino IDE ขึ้นมา ติดตั้งไลบรารี่ ESP32 HUB75 LED MATRIX PANEL DMA Display ตามขั้นตอนต่อไปนี้
1) กดเปิด Libraly Manager (1) แล้วค้นหา ESP32 HUB75 LED MATRIX PANEL DMA Display (2) จากนั้นกด INSTALL (3)
2) เมื่อติดตั้งเสร็จ ด้านมุมขวาล่างจะมีข้อความแจ้งเตือน (ดังรูป)
คัดลอกโค้ดโปรแกรมต่อไปนี้ลงโปรแกรม Arduino IDE
แก้ไขชื่อ WiFi และรหัสผ่าน WiFi ในโค้ดโปรแกรม
เชื่อมต่อบอร์ด IOXESP32+ เข้ากับคอมพิวเตอร์ด้วยสาย USB-C จากนั้นเลือกบอร์ดเป็น IOXESP32 แล้วเลือกพอร์ต
กดอัพโหลดโปรแกรมลงบอร๋ด ผลที่ได้ ขณะเชื่อมต่อ WiFi แสดง WiFi Connact... เมื่อเชื่อมต่อ WiFi ได้แล้ว จะวันที่-เวลา แสดงขึ้นมา
การใช้งานจริง อาจมีบางช่วงที่อินเตอร์เน็ตใช้งานไม่ได้ หรือ WiFi ใช้งานไม่ได้ ซึ่งจะมีผลให้ ESP32 ดึงค่าเวลามาแสดงผลไม่ได้ แนวทางแก้ไขคือต่อโมดูลนับเวลาเพิ่มขึ้นมา เพื่อใช้เก็บค่าเวลา และนับเวลาต่อเนื่อง แม้ตอนที่ไม่มีเน็ต ก็สามารถดึงค่าเวลามาแสดงผลได้
ต่อโมดูล AS-RTC2 RX8130CE ด้วยสาย Grove เข้าที่ช่อง Grove ดังนี้
ติดตั้งไลบรารี่ ArtronShop_RX8130CE แล้วแก้ไขโค้ดโปรแกรมทั้งหมดเป็นดังนี้
แก้ไขชื่อและรหัสผ่าน WiFi ในโค้ดที่จุดเดิม เลือกบอร์ด เลือกพอร์ต กดอัพโหลดโปรแกรม ผลที่ได้คือ เมื่อ WiFi ยังเชื่อมต่อไม่เสร็จ ค่าเวลาจะยังไม่ถูกต้อง แต่เมื่อเชื่อมต่อ WiFi ได้ ค่าเวลาจะแสดงผลถูกต้องแล้ว
ป้ายไฟ P4/P5 ยังประยุกต์ใช้งานได้หลากหลาย บทความนี้นำมาทำนาฬิกาดิจิตอล ซึ่งต้องใช้องค์ความรู้หลากหลายมารวมกัน ผู้เขียนหวังว่าผู้อ่านน่าจะได้แนวคิด หรือตัวอย่างโค้ด แนวทางการเขียนโค้ดไม่มากก็น้อย สำหรับบทความนี้ก็มีเพียงเท่านี้ก่อน แล้วเจอกันในบทความหน้า
~สวัสดีครับ~