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.pyboot/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 Kitsec3_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 importpotsbuttonsrgbmatrixซึ่ง 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
หัวข้อที่มีชื่อว่า “กติกาการถอดจาก C”- จอ C 800×480 → พื้นที่ของ
ui792×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 ต่อหน้าจอ · อักขระ “·” ไม่มีในฟอนต์ของจอ ให้ใช้ “-” ในข้อความที่แสดงผล
ความเที่ยงตรงเทียบต้นฉบับ C (ex12–ex18)
หัวข้อที่มีชื่อว่า “ความเที่ยงตรงเทียบต้นฉบับ C (ex12–ex18)”| ตัวอย่าง | ความเที่ยงตรง |
|---|---|
| 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