กลับไปหน้ารวมไฟล์
wemos-d1r1-procedural-gfx-clocks-43d64d.md

การใช้อาร์เรย์บิตแมปสำเร็จรูป (pre-determined bitmaps) แม้จะทำให้สร้างนาฬิกาได้เร็วดี แต่เป้าหมายของรุ่นพี่คืออยากทำนาฬิกาที่ดูตื่นเต้นเร้าใจและมีเอกลักษณ์มากกว่านั้น ในระหว่างที่กำลังเรียนรู้เรื่องกราฟิกแบบโพรซีเจอรัล (procedural GFX) อยู่

HyperClock Raycaster เวอร์ชันเบต้าจากการทดสอบครั้งแรกแบบสดๆ

1.44 TFT Hyperclock Firmware Raycaster

เฟิร์มแวร์สำหรับบอร์ด LOLIN/Wemos/NodeMCU D1 R1 ESP8266 จอ 1.44 นิ้ว SPI TFT 128*128 ST7735 (GREENTAB) ที่ใช้บัฟเฟอร์สำหรับแสดงข้อความและกราฟิกโดยเฉพาะ เพื่อเรนเดอร์ภาพ 2.5D แบบ Ray Casted แบบโพรซีเจอรัล เป็นอนิเมชันลูปของนาฬิกา

ทดสอบรันบน D1 R1 ต่อเนื่องหลายวันไม่มีปัญหาเลยจ้า งานนี้จัดไปวัยรุ่น!

ภาพรวมโปรเจค

"Hyper-Raster" นี่คือการลงมือทำจริงจังกับเรื่อง Asynchronous GFX-Forensics และ Procedural Math-Orchestration เลยนะน้อง ออกแบบมาเพื่อหลีกเลี่ยงการเรนเดอร์ด้วยบิตแมปแบบ static ที่กินทรัพยากร โปรเจคนี้บังคับให้ WeMos D1 R1 (ESP8266) ทำงานเป็นเครื่องคำนวณกราฟิกโดยเฉพาะ มันคือการสำรวจการแมปอัลกอริทึมตรีโกณมิติขั้นสูงให้กลายเป็นภาพนามธรรมสวยงามแบบ 2.5D Ray-Casted ซึ่งผลักดันจอ ST7735 TFT ไปถึงขีดจำกัดของมันเลยล่ะ บิลด์นี้เน้นไปที่การวินิจฉัยการเชื่อมต่อ SPI ความเร็วสูง, ฮิวริสติกส์การเรนเดอร์แบบ "สกปรก" (dirty-rendering) สำหรับฟอนต์เวลาที่ "พังได้" และลูปทางคณิตศาสตร์ที่กินทรัพยากรโปรเซสเซอร์สุดๆ

HyperClock Raycaster เวอร์ชันปล่อยจริง

ลึกลงไปในรายละเอียดทางเทคนิค

  • อัลกอริทึมแบบโพรซีเจอรัล & GFX Forensics:
    • สภาพแวดล้อม 2.5D Ray-Casted: สร้างกราฟิกไดนามิกทั้งหมดผ่านสูตรคณิตศาสตร์ล้วนๆ แทนที่จะอ้างอิงจากอาร์เรย์รูปภาพที่คอมไพล์ไว้ล่วงหน้า งาน Forensics เกี่ยวข้องกับการวัด "ความหน่วงในการคำนวณเฟรม (Frame-Compute Latency)" โดย ESP8266 ความเร็ว 80MHz/160MHz จะคำนวณเวกเตอร์จุดตัดแบบเรียลไทม์ ประมวลผลการแปลงค่า sine/cosine เพื่อสร้างเมทริกซ์มุมมองที่เปลี่ยนไปอย่างต่อเนื่อง การวินิจฉัยเน้นไปที่ "การลดรอบการทำงานของ FPU (Floating-Point Unit)" เพื่อปรับปรุงการคำนวณทางคณิตศาสตร์ ป้องกันการฉีกขาดของเฟรม (frame-tearing) หรือการรีเซ็ตจาก WDT (Watchdog Timer)
    • Dirty-Rendering & การทำลายอนุภาค (Particle Destructibility): สำรวจแนวคิดจาก "Game-of-Life" (GoL) และ "Pong" สำหรับการเปลี่ยนตัวเลขบนนาฬิกา งาน Forensics รวมถึงการตรวจสอบ "การอัปเดตบัฟเฟอร์เฉพาะจุด (Localized Buffer-Updates / Dirty Rectangles)" แทนที่จะล้างและวาดใหม่ทั้งหน้าจอ $128\times128$ (ซึ่งต้องส่งข้อมูล 32,768 ไบต์ต่อเฟรมผ่าน SPI) MCU จะคำนวณการ "สลายตัว" ของโครงสร้างผ่านเอฟเฟกต์อนุภาค โดยเขียนทับเฉพาะพิกเซลที่เปลี่ยนสถานะจริงๆ เพื่อรักษาอัตรา FPS ให้ลื่นไหล
  • การวิเคราะห์การเชื่อมต่อ SPI & บัสข้อมูล:
    • การใช้งาน SPI อย่างเต็มที่ (Hardware-SPI Saturation): ขับคอนโทรลเลอร์ ST7735 งาน Forensics เน้นที่ "การปรับความถี่สัญญาณนาฬิกาให้เหมาะสม (Clock-Frequency Optimization)" ผลักดันสัญญาณ SCK (Serial Clock) ไปใกล้ขีดจำกัดทางทฤษฎีสูงสุด การวินิจฉัยทำให้แน่ใจว่าเส้น MOSI (Master Out Slave In) ปราศจากสัญญาณรบกวน เพื่อรับประกันว่าข้อมูลสีจำนวนมหาศาลในรูปแบบฐานสิบหกจะถูกส่งไปโดยไม่มีภาพผิดเพี้ยนหรือพิกเซลกลับด้าน
    • การจัดการความหลากหลายของชิปจอแสดงผล: แก้ไขลำดับการเริ่มต้น (initialization sequences) ที่แตกต่างกันระหว่าง Greentab กับ Blacktab การวินิจฉัยเน้นที่ "การแก้ไขออฟเซ็ตรีจิสเตอร์ (Register-Offset Correction)" โดยใช้คำสั่งเริ่มต้นฐานสิบหกที่แม่นยำ เพื่อให้แน่ใจว่าพิกัด $(x, y)$ บนจอแสดงผลตรงกับขอบทางกายภาพของหน้าจอพอดี โดยไม่มีภาพฉีกขาดหรือล้นขอบ ห้ามช็อตนะตัวนี้!

วิศวกรรมและการลงมือทำ (Engineering & Implementation)

  • นิติวิทยาศาสตร์ฮาร์ดแวร์-โทโพโลยี และสถานะไฟเลี้ยง (Hardware-Topology & Power-State Forensics):

    • สุนทรียะของการแยกวงจรเรลลอจิก (Logic-Rail Decoupling Aesthetics): รุ่นพี่บังคับให้รักษาความสะอาดของบัสไฟเลี้ยงอย่างเคร่งครัด โดยใส่ตัวเก็บประจุบายพาส (Bypass Capacitors) ขนาด 10$\mu$F ไปเลย การตรวจสอบเน้นไปที่การวัด "ประสิทธิภาพการกำจัดสไปค์ไฟชั่วขณะ (Transient Voltage-Spike Nullification)" ซึ่งจำเป็นมากเพื่อป้องกันไม่ให้สัญญาณรบกวนความถี่สูงจากการสลับสาย SPI ไปสร้างความปั่นป่วน (jitter) ให้กับวงจรปั๊มประจุ (charge-pump) ภายในของจอ TFT ที่บอบบาง
    • การวิเคราะห์การทำงานต่อเนื่อง (Continuous-Uptime Analytics): ฟิร์มแวร์นี้ผ่านการทดสอบแล้วว่าสามารถรันต่อเนื่องได้หลายวันโดยไม่เกิดปัญหาเมมโมรีลีก (Memory Leak) การตรวจสอบเน้นไปที่ "การตรวจสอบการแตกกระจายของฮีป (Heap-Fragmentation Checking)" เพื่อให้มั่นใจว่าการจองหน่วยความจำแบบอาร์เรย์ต่างๆ ถูกทำลายและเก็บกวาด (Garbage Collected) อย่างสมบูรณ์แบบ ทุกชั่วโมง
  • ตรรกะระบบและฮิวริสติกของเวิร์กโฟลว์ (System-Logic & Workflow Heuristics):

    • การนำไปใช้งานนี้แสดงให้เห็น "สุนทรียะแบบเดโมสีน (Demo-Scene Aesthetic)" โดยใช้พลังคำนวณทางคณิตศาสตร์แบบถึกๆ (Brute-Force) บนชิปฝังตัวราคาประหยัด เพื่อสร้างภาพแสดงข้อมูล (Data Visualizations) ที่น่าตื่นตาตื่นใจ การตรวจสอบรวมถึงการวัด "กระบวนการสร้างจากขั้นตอนวิธีไปสู่พิกเซล (Procedural-to-Pixel Synthesis)" ซึ่งเป็นสิ่งจำเป็นสำหรับการยกระดับนาฬิกาธรรมดาๆ ให้กลายเป็นศิลปะเชิงคำนวณแบบอินเทอร์แอคทีฟ

ถ้าในเบรดบอร์ดมีแต่จอแสดงผลอย่างเดียว ไม่มีอะไรอื่นเพิ่มเติม ตัวต้านทานจำกัดกระแส (Limiting Resistor) และตัวเก็บประจุบายพาส (Decoupling Capacitor) ของวงจร/เบรดบอร์ดสามารถถอดออกหรือไม่ใช้ก็ได้นะ รุ่นพี่แนะนำให้ใช้ตัวเก็บประจุเซรามิก (Ceramic Capacitors) เสมอ ใช้ตัวอิเล็กโทรไลต์ (Electrolytics) เฉพาะตอนที่หาเซรามิกไม่ได้จริงๆ เท่านั้น รุ่นพี่ใส่แผนภาพวงจรแบบอื่นไว้ในส่วนคอมเมนต์เฮดเดอร์ของสเก็ตช์หลักแล้ว ไปดูได้

เลย์เอาต์ Fritzing ของฮาร์ดแวร์ที่ใช้

บอร์ดที่แสดงในแผนภาพ Fritzing ด้านบนคือรุ่น R2 แต่ว่ารุ่นพี่จัดตำแหน่งขา (Pin) ตามบอร์ดรุ่น R1 นะ เพราะเป็นบอร์ดที่ใช้ทดสอบฟิร์มแวร์จริงๆ ระวังให้ดี ถ้าน้องใช้บอร์ดรุ่น R2 ให้เช็คตำแหน่ง GPIO ให้ตรงกับของบอร์ดตัวเองอีกที ส่วนจอ TFT ที่แสดงในรูป (จากการ Export ของ Fritzing) เป็นขนาด 128x160 แต่ที่รุ่นพี่ใช้จริงคือ 128*128 แต่ว่าผู้ผลิตเดียวกัน (ไฟล์ Fritzing นี้ผู้ผลิตเป็นคนให้มาเอง) ดังนั้นการกำหนดขา (Pin Definitions) จึงตรงกันเป๊ะ (รุ่นพี่เช็คเองสองรอบ) น้องเชื่อตามนี้ได้เลย

ถ้าบอร์ดของน้องเป็นรุ่น R1 ให้ทำตามตำแหน่งขาจริงในรูปพร้อมกับป้ายช่วยสีแดง ก็จะปลอดภัยหายห่วง ถ้าบอร์ดเป็นรุ่น R2 ให้เปิดดาต้าชีตของบอร์ดดูตำแหน่งช่อง MOSI และ SCK ให้ดีๆ ด้านล่างนี้คือรูปบอร์ด R1 และ R2 วางคู่กันไว้ให้ดูเปรียบเทียบและอ้างอิง ต่อไปในบทความรุ่นพี่จะอ้างอิงฮาร์ดแวร์ของรุ่นพี่เองนะ ซึ่งก็คือรุ่น R1

ฟิร์มแวร์ตัวที่สองเกิดตอนที่รุ่นพี่กำลังคิดกันใหญ่ ว่าจะทำให้ตัวเลขดูเหมือนพังทลายได้ยังไง อย่างน้อยก็ในระดับภาพ ถ้าจะให้ทำจริงๆ ในนาฬิกาที่ทำงานอยู่คงหนักเกินไปสำหรับ ESP8266 แล้วรุ่นพี่ก็เจอวิธีที่สวยงามวิธีหนึ่ง ซึ่งคือการใช้การเรนเดอร์แบบสกปรก (Dirty Rendering) ร่วมกับเอฟเฟกต์อนุภาค (Particle Effects) (ไม่ต้องห่วงนะน้อง ตัวเลขมันจะสร้างใหม่ทุกนาที เลยไม่ต้องกลัวว่านาฬิกาจะพังจนใช้ไม่ได้)

ใช้การตั้งค่าฮาร์ดแวร์เหมือนกับด้านบนทุกประการ

สรุป

Hyper-Raster นี่แหละคือสุดยอดของ การวินิจฉัยฮาร์ดแวร์กราฟิกส์แบบอะซิงโครนัส เลยนะน้อง! ด้วยการเชี่ยวชาญ การพิสูจน์หลักฐานด้วยเรย์คาสติ้งเชิงกระบวนวิธี และ การวิเคราะห์ฮิวริสติกส์ของจอแสดงผลแบบ SPI ทำให้ sirronnie ส่งมอบเฟรมเวิร์กการประมวลผลระดับมืออาชีพที่เฉียบคมสุดๆ มันให้ความชัดเจนทางภาพแบบสุดขั้วผ่านการประสานงานของอัลกอริทึมที่จัดหนักจัดเต็ม


ความมุ่งมั่นเชิงคำนวณ: การเชี่ยวชาญการสังเคราะห์ภาพผ่านการพิสูจน์หลักฐาน 2.5D เชิงอัลกอริทึม

โปรเจคใหม่ๆ กำลังจะตามมาเร็วๆ นี้ (อยู่ระหว่างการทดสอบและเขียนเอกสาร)

สู้งานนะน้อง!

Core1D Automations Lab

หมายเหตุ: ตัวเก็บประจุวงจร 10μF และตัวต้านทาน (Resistor) 220 โอห์ม ต่อเข้ากับ VCC เป็นตัวเลือกเสริมนะ ถ้าแหล่งจ่ายไฟของน้องมาจากบอร์ดเองน่ะ น้องสามารถปรับความสว่างของ LED Display ได้ด้วยการเลือกค่าตัวต้านทานนี่แหละ เป็นการควบคุมความสว่างระดับฮาร์ดแวร์ไปเลย ลองเล่นกับตัวต้านทานแบบปรับค่าได้ (Variable Resistor) หรือจะควบคุมแบ็คไลต์แบบ PWM (Pulse Width Modulation) จากไมโครคอนโทรลเลอร์ก็ได้ (โดยใช้พินที่รองรับ PWM และต่อปลายสายระหว่างขา LED+/LED/BL กับตัวต้านทานจากแหล่งจ่าย VCC {ในกรณีนี้คือ 3v3}) การใช้ตัวต้านทานอาจขึ้นอยู่กับบอร์ดและขีดความสามารถทางกายภาพของ GPIO ด้วย อย่าลืมเช็คข้อมูลจาก datasheet ทางการหรือแหล่งข้อมูลที่เชื่อถือได้เพื่อความชัวร์นะจ๊ะ

อัพเดททดสอบ 08/08/25: ใช้แบตเตอรี่ประมาณ 25% จากแบตเตอรี่ 5000 mAh ในการรันต่อเนื่อง 6 ชั่วโมง อัพเดทแพตช์: เพิ่มมาตรการในการตรวจจับการชนและการอัพเดทโลก (world update) เพื่อป้องกันไม่ให้กล้องติดอยู่ในกรณีขอบ (edge cases) ของกระบวนวิธี

ข้อมูล Frontmatter ดั้งเดิม

title: "โปรเจคนาฬิกา WeMos D1R1 งานกราฟิกเทพๆ ไม่ง้อไฟล์ภาพ!"
description: "เฟิร์มแวร์นาฬิกาสุดตึงสำหรับบอร์ด WeMos D1R1 ที่วาดกราฟิกทุกอย่างแบบ Procedural ตรงๆ เลย งานง่ายแต่โคตรหล่อ วัยรุ่นสายช่างต้องจัดไป!"
author: "sirronnie"
category: "Screens & Displays"
tags:
  - "Embedded"
  - "Toys"
  - "Clocks"
views: 52
likes: 0
price: 1499
difficulty: "Easy"
components:
  - "1x Breadboard - 830 contacts"
  - "1x WEMOS D1 R1"
  - "1x ST7735 GREENTAB 128*128"
  - "1x Breadboard Jumper Wire Pack (200mm&100mm)"
tools: []
apps:
  - "1x Arduino IDE 2.0 (beta)"
  - "1x Adafruit"
downloadableFiles: []
documentationLinks: []
passwordHash: "cd701ef355ea53eb958593d7fcf6dd159be33454a4c5ad5d96f152dd1e79215b"
encryptedPayload: "U2FsdGVkX1+DLQdmUAuQHrUdhnXi0jAbcmPb4u3kexX2knjaVTxtL8An5NybxaJuDgwsq5xfwz4zM5+e4qLahWR0qHiF+29Vc0AxiPNOGgnvAfMOwzhkdLRs0a2UBtwT"
seoDescription: "Clock firmware for WeMos D1R1 featuring procedural GFX visual effects."
videoLinks: []
heroImage: "https://cdn.jsdelivr.net/gh/bigboxthailand/arduino-assets@main/images/projects/wemos-d1r1-procedural-gfx-clocks-43d64d_cover.jpg"
lang: "en"