โปรเจกต์ All In One Clock 2.0
นาฬิกา Alarm clock, ข้อมูล weather ครบถ้วน, time, timer และฟังก์ชันอื่นๆ รวมอยู่ใน All In One Clock เพียงเครื่องเดียว
นาฬิกา Alarm clock, ข้อมูล weather ครบถ้วน, time, timer และฟังก์ชันอื่นๆ รวมอยู่ใน All In One Clock เพียงเครื่องเดียว
นี่คือเวอร์ชันที่สองของโปรเจกต์เดิมของฉัน: All In One Clock 1.0 โปรเจกต์นี้จะมีฟังก์ชันที่คล้ายกัน แต่จะมีหน้าจอสัมผัส (touch screen) และให้ข้อมูลที่ละเอียดมากขึ้น
เพื่อให้สามารถทำฟังก์ชันทั้งหมดนี้ได้ เราจำเป็นต้องมีการเชื่อมต่อกับอินเทอร์เน็ต สำหรับโปรเจกต์นี้ฉันเลือกใช้ Arduino RP2040 Connect และในการใช้งาน RP2040 ฉันจะใช้ https://create.arduino.cc/iot ซึ่งเป็นเครื่องมือทางการของ Arduino ที่ใช้งานง่ายมาก และยอดเยี่ยมสำหรับการใช้งานอินเทอร์เน็ตผ่านอุปกรณ์ที่หลากหลาย
ตอนนี้เรามี Arduino ที่เชื่อมต่อกับอินเทอร์เน็ตแล้ว แต่เราจะดึงข้อมูลมาได้อย่างไร? เรามาแบ่งข้อมูลที่ต้องการออกเป็นสองหมวดหมู่กันครับ:
ข้อมูลทั้งหมดที่กล่าวมาข้างต้นจะถูกส่งผ่าน ISP โดย Arduino จะรับข้อมูลเหล่านั้นและทำการถอดรหัส (decode)
temperature = doc.containsKey("tw") ? doc["tw"] : temperature;
ในตัวอย่างนี้ Arduino จะอ่านข้อมูลที่ส่งเข้ามา และหากข้อมูลนั้นมี Keyword ว่า "tw" (ซึ่งถูกเข้ารหัสมาในรูปแบบ JSON) ข้อมูลดังกล่าวจะถูกบันทึกไว้ใน Variable ที่ชื่อว่า temperature
ฉันยังได้ส่งหมายเลขรูปภาพและสถานะ Day/Night มาด้วย แต่จะแสดงรูปภาพได้อย่างไร? ใน SD Card ที่เชื่อมต่อกับหน้าจอนั้น จะมีโฟลเดอร์สองโฟลเดอร์ที่เก็บรูปภาพทั้งหมดของช่วงกลางวันและกลางคืนในรูปแบบไฟล์ bmp (bit map images) ดังนั้นฉันจึงสั่งให้ไปดึงข้อมูลจาก SD Card และแสดงรูปภาพตามหมายเลขหรือเวลาที่กำหนด
ในโปรเจกต์นี้ ฉันแสดงไอคอนด้วยสองวิธี วิธีแรกคือการใช้สคริปต์ .h ซึ่งจะทำงานได้เร็วกว่า แต่ฉันไม่สามารถเก็บรูปภาพจำนวนมากด้วยวิธีนี้ได้เพราะมันใช้พื้นที่หน่วยความจำหลาย MB ส่วนวิธีที่สองคือการใช้ SD card
Arduino IoT Cloud ช่วยให้เราสามารถใช้งาน Dashboard ได้ แล้ว Dashboard คืออะไร? มันคือช่องทางที่ทำให้ฉันสามารถดูข้อมูลได้จากทุกที่และผ่านอุปกรณ์ใดก็ได้
ใน Dashboard จะมี Widget มากมาย โดยเราจะใช้บางส่วนเพื่อแสดงข้อมูล เช่น เราใช้ Widget แบบปุ่ม (button) เพื่อสร้างปุ่มสำหรับอัปเดตค่าอุณหภูมิ (ปกติใช้สำหรับการ Debug) และ Widget อื่นๆ อีกสองสามตัวเพื่อแสดงข้อมูล (อุณหภูมิ, ความชื้น, ความดันอากาศ และเวลา)

โปรดทราบว่าหาก Arduino ได้รับข้อมูลที่มีค่าเป็น null (0) หรือมีการ Restart มันอาจจะทำให้อัปเดตค่าในกราฟผิดเพี้ยนไปดังที่เห็น (ในอนาคตฉันจะเพิ่มวิธีป้องกันไม่ให้เกิดเหตุการณ์นี้)
ฉันได้ใช้ Font พิเศษเพิ่มเติมบางส่วนซึ่งได้รวมไว้ในไฟล์สำหรับดาวน์โหลดแล้ว
ฉันใช้หน้าจอ TFT ขนาด 3.5 นิ้ว ซึ่งเป็นหน้าจอสัมผัส (touch screen) และใช้ Library MCUFRIEND_kbv ในการควบคุมการทำงาน
เรามีหน้าจอที่แตกต่างกัน 5 หน้าจอ มาดูรายละเอียดกันทีละหน้าจอครับ:





ในโปรเจกต์นี้เราไม่ได้เชื่อมต่ออุปกรณ์หลายอย่างมากนัก แต่มีจุดที่ต้องเชื่อมต่อดังนี้:

มีโมเดล 3D เพิ่มเติมสำหรับกล่องที่ฉันใช้ใส่หน้าจอ
คุณสามารถดู Code และไฟล์ทั้งหมดได้ที่ GitHub ของฉัน
สนับสนุนเพื่อรับ Source Code หรือแอปพลิเคชันสำหรับโปรเจกต์นี้