Skip to content

lvgl_ports — ตัวอย่าง LVGL ภาษา C ที่ถอดเป็น MicroPython

This content is not available in your language yet.

ชุดนี้ถอดตัวอย่าง LVGL ภาษา C ของคอร์ส PSoC Edge E84 เดิม (AIC-EEC และ BiiL Centre มหาวิทยาลัยบูรพา) มาเป็น MicroPython โดยใช้เฉพาะความสามารถที่เฟิร์มแวร์ BENTO มีจริง ไม่แก้ค่าตั้งของบอร์ดใด ๆ หน้าตาและการแสดงข้อมูลตั้งใจให้เหมือนต้นฉบับ C เพื่อให้เทียบกันได้ทีละบรรทัด

ไม่ใช่เนื้อหาบังคับของหลักสูตร ใช้เป็นคลังอ่านเสริมและเป็นโจทย์ต่อยอด โมดูล 2 และโมดูล 3 อ้างถึงบางไฟล์ในสไลด์ (เช่น sec3_sensor_viz/eva/ex10_scale_pitch.py และ ex16_spectrum_analyzer.py)

boot/main_loader.py ส่งขึ้นบอร์ดเป็น /main.py: วนโหลดหน้าเลือกตอนจาก /menu.py
boot/menu_sections.py ส่งขึ้นบอร์ดเป็น /menu.py: หน้าเลือก "ตอน" (ตรงกับโมดูล 2 และ 3)
sec2_ui_to_hw/ ตอนที่ 2 · UI-to-Hardware Interfacing (ตรงกับโมดูล 2)
menu_sec2.py ส่งขึ้นบอร์ดเป็น /s2menu.py
devkit/ex01..ex11.py ฉบับ TESAIoT Dev Kit
eva/ex01..ex11.py ฉบับ Eva Kit
sec3_sensor_viz/ ตอนที่ 3 · Sensor Visualization on HMI (ตรงกับโมดูล 3)
menu_sec3.py ส่งขึ้นบอร์ดเป็น /s3menu.py (สองหน้า: Part 2 / Part 3)
{eva,devkit}/ex01-ex11 การแสดงผลเซนเซอร์
{eva,devkit}/ex12-ex18 ออสซิลโลสโคปและ DSP

ทุกไฟล์รันเดี่ยว ๆ ได้ วางลงหน้า BENTO Playground หรือเปิดใน BENTO IDE แล้วกด Program to Device ไม่จำเป็นต้องใช้เมนูชุดนี้ เมนูมีไว้สำหรับเปิดหลายตัวอย่างต่อกันบนบอร์ดเดียว

  • ทุกตัวอย่างมีสองฉบับ eva/ กับ devkit/ ให้อ่านโค้ดของบอร์ดตัวเองล้วน ๆ ไม่มี try/except ข้ามบอร์ด
  • ค่าประจำบอร์ดอยู่ในบล็อก # ==== BOARD: ... ==== / # ==== END BOARD ==== ต้นไฟล์ ส่วนที่เหลือของคู่ eva/devkit เหมือนกัน
  • BENTO Emulator ใช้ชุด eva/ (โปรไฟล์ของ Emulator คือ Eva Kit ส่วนชุด devkit import pots buttons rgbmatrix ซึ่ง Emulator ไม่มี)
Eva Kit TESAIoT Dev Kit
LED 3 ดวงแยก: ดัชนี 0 = แดง, 1 = เขียว, 2 = น้ำเงิน (ตารางชื่อในเฟิร์มแวร์เรียกดัชนี 2 ว่า “RGB_RED” อย่าเลือกด้วยชื่อ) RGB ดวงเดียว: ดัชนี 2 = แดง, 3 = น้ำเงิน, 4 = เขียว · LED1/2 สั่งได้แต่มองไม่เห็นจากด้านบน
ลูกบิด 1 ตัว sensors.pot.read() 0–65535 (เลื่อนขวา 4 บิตให้ตรงสเกลของ C) 4 ตัว VR1–VR4 pots.read(0..3) 0–4095
ปุ่ม gpio.button(0) · SW4 มีบนเมนู Controls แต่ MicroPython ยังเรียกไม่ได้ จึงใช้ CapSense BTN0 แทน gpio.button(0) และ buttons.pressed(0/1) สำหรับปุ่มคู่บนฐาน
CapSense sensors.capsense.* เหมือนกัน
เซนเซอร์เพิ่ม — DPS368, SHT40, เรดาร์ (ตรวจด้วย hasattr(sensors, "dps368") ก่อนใช้)
เอาต์พุตเพิ่ม — RGB Matrix 16×8 (rgbmatrix.*) และ ui.Sprite

ชุดนี้ใช้ ui.Led, ui.Scale, ui.Line, ui.Tabview และค่าตั้ง PROP_CHART_POINTS / PROP_SCALE_NEEDLE ซึ่งต้องใช้เฟิร์มแวร์ BENTO รุ่นตั้งแต่ 2026-08-20 ขึ้นไป ถ้าบอร์ดขึ้น AttributeError ที่ชื่อเหล่านี้ ให้อัปเดตเฟิร์มแวร์ก่อน

  • จอ C 800×480 → พื้นที่ของ ui 792×398 (แกน y คูณราว 0.83) · ฟอนต์ value= ใช้ 14/16/20/24/28
  • timer ของ LVGL → ลูปที่จับเวลาด้วย time.ticks_ms()
  • ui.Chart ค่าปริยาย 50 จุด 4 series ตั้งได้ถึง 400 จุดด้วย ch.prop(ui.PROP_CHART_POINTS, n)
  • dsp.fft_mag() ทำ FFT ในภาษา C บนบอร์ด (ราว 1 ms ที่ N = 256) ส่วน mic.raw() กับ dsp.s16() ย้ายงานเสียงไปจบใน C
  • การวาด 200 จุดคือ 200 ข้อความข้ามคอร์ จึงต้องเว้นจังหวะ (หลับ 6 ms ทุก 16 จุด) กันคิวข้อความล้น
  • ปุ่มนำทาง (< Menu) อยู่มุมล่างซ้าย เพราะมุมบนซ้ายชนกับปุ่ม < Home ของหน้า Playground
  • เป้าสัมผัสขั้นต่ำ: ปุ่มสูงอย่างน้อย 44 px, Slider สูง 22 px, Dropdown สูง 44 px, Switch อย่างน้อย 70×36 px
  • เพดาน 64 widget ต่อหน้าจอ · อักขระ “·” ไม่มีในฟอนต์ของจอ ให้ใช้ “-” ในข้อความที่แสดงผล
ตัวอย่าง ความเที่ยงตรง
ex12 waveform gen ตรงต้นฉบับ (200 จุด dropdown 5 รูปคลื่น)
ex13 noise gen ประมาณ: C วาด 20 Hz ที่นี่ราว 2 Hz เพราะคอขวดการส่งข้อความข้ามคอร์
ex14 mic waveform ใช้ไมโครโฟน PDM จริงแทนสัญญาณจำลอง และปรับอัตราขยายอัตโนมัติ
ex15 oscilloscope ตรงต้นฉบับ (Vpp ความถี่ RMS คำนวณจริง)
ex16 spectrum ประมาณ: กราฟแท่งของ C เป็นเส้น เพราะ ui.Chart วาดได้แต่เส้น · FFT คำนวณจริง
ex17 scope panels ตรงโครงสามหน้า ซ่อน/แสดงได้ ไม่มีพื้นที่ไล่เฉด
ex18 hw scope ลูกบิดคุม duty และ PWM ของ LED จริง ยุบสามแท็บเป็นจอเดียว

ทั้งเจ็ดไฟล์ผ่านการรันบน Emulator แล้ว ส่วนบนบอร์ด Dev Kit ยังไล่ตรวจไม่ครบทุกตัว

ที่มา: examples/lvgl_ports/ ของ AIoT in Action (AIC มหาวิทยาลัยบูรพา) · โค้ดสัญญาอนุญาต MIT

TESA Open Knowledge · © 2026 สมาคมสมองกลฝังตัวไทย (TESA) · CC BY-NC 4.0

Content is licensed CC BY-NC 4.0. Reuse it non-commercially and credit the Thai Embedded Systems Association (TESA) every time. · How to cite TESA