GPIO Dashboard

Lab 5: GPIO Dashboard

1. ΰΉ‚ΰΈ„ΰΈ£ΰΈ‡ΰΈͺΰΈ£ΰΉ‰ΰΈ²ΰΈ‡ΰΈ ΰΈ²ΰΈžΰΈ£ΰΈ§ΰΈ‘ΰΈ‚ΰΈ­ΰΈ‡ Lab

Why? - ΰΈ—ΰΈ³ΰΉ„ΰΈ‘ΰΈ•ΰΉ‰ΰΈ­ΰΈ‡ΰΉ€ΰΈ£ΰΈ΅ΰΈ’ΰΈ™ΰΈ£ΰΈΉΰΉ‰ΰΉ€ΰΈ£ΰΈ·ΰΉˆΰΈ­ΰΈ‡ΰΈ™ΰΈ΅ΰΉ‰

GPIO Dashboard ΰΉ€ΰΈ›ΰΉ‡ΰΈ™ Lab ΰΈͺΰΈΈΰΈ”ΰΈ—ΰΉ‰ΰΈ²ΰΈ’ΰΈ‚ΰΈ­ΰΈ‡ Part I ΰΈ—ΰΈ΅ΰΉˆΰΈ£ΰΈ§ΰΈ‘ΰΈ—ΰΈΈΰΈ concept:

  • Real-world Application: ΰΈͺΰΈ£ΰΉ‰ΰΈ²ΰΈ‡ Dashboard ΰΈͺΰΈ³ΰΈ«ΰΈ£ΰΈ±ΰΈšΰΈ„ΰΈ§ΰΈšΰΈ„ΰΈΈΰΈ‘ΰΈ«ΰΈ₯ΰΈ²ΰΈ’ GPIO

  • Multi-widget Integration: ΰΈ£ΰΈ§ΰΈ‘ LED, Switch, Button ไว้ด้วฒกัน

  • Data Structure: ΰΉƒΰΈŠΰΉ‰ struct ΰΈˆΰΈ±ΰΈ”ΰΈΰΈ²ΰΈ£ΰΈ‚ΰΉ‰ΰΈ­ΰΈ‘ΰΈΉΰΈ₯ΰΈ«ΰΈ₯ΰΈ²ΰΈ’ channel

  • Grid Layout: ΰΈˆΰΈ±ΰΈ”ΰΈ§ΰΈ²ΰΈ‡ widgets แบบ grid ΰΈ­ΰΈ’ΰΉˆΰΈ²ΰΈ‡ΰΉ€ΰΈ›ΰΉ‡ΰΈ™ΰΈ£ΰΈ°ΰΉ€ΰΈšΰΈ΅ΰΈ’ΰΈš

  • Batch Operations: ΰΈ„ΰΈ§ΰΈšΰΈ„ΰΈΈΰΈ‘ΰΈ—ΰΈΈΰΈ GPIO ΰΈžΰΈ£ΰΉ‰ΰΈ­ΰΈ‘ΰΈΰΈ±ΰΈ™ΰΈ”ΰΉ‰ΰΈ§ΰΈ’ΰΈ›ΰΈΈΰΉˆΰΈ‘ΰΉ€ΰΈ”ΰΈ΅ΰΈ’ΰΈ§

What? - ΰΈˆΰΈ°ΰΉ„ΰΈ”ΰΉ‰ΰΉ€ΰΈ£ΰΈ΅ΰΈ’ΰΈ™ΰΈ£ΰΈΉΰΉ‰ΰΈ­ΰΈ°ΰΉ„ΰΈ£

  1. Container Widget: ΰΈͺΰΈ£ΰΉ‰ΰΈ²ΰΈ‡ container ΰΈͺΰΈ³ΰΈ«ΰΈ£ΰΈ±ΰΈšΰΈˆΰΈ±ΰΈ”ΰΈΰΈ₯ุ่ฑ widgets

  2. Struct Array: ΰΉƒΰΈŠΰΉ‰ array ΰΈ‚ΰΈ­ΰΈ‡ struct ΰΈˆΰΈ±ΰΈ”ΰΈΰΈ²ΰΈ£ΰΈ«ΰΈ₯ΰΈ²ΰΈ’ items

  3. User Data Pattern: ΰΈͺΰΉˆΰΈ‡ context ΰΉ„ΰΈ›ΰΈ’ΰΈ±ΰΈ‡ callback ΰΈ”ΰΉ‰ΰΈ§ΰΈ’ user_data

  4. Grid Positioning: ΰΈ„ΰΈ³ΰΈ™ΰΈ§ΰΈ“ΰΈ•ΰΈ³ΰΉΰΈ«ΰΈ™ΰΉˆΰΈ‡ widgets แบบ grid

  5. State Synchronization: ΰΈ‹ΰΈ΄ΰΈ‡ΰΈ„ΰΉŒ state ΰΈ£ΰΈ°ΰΈ«ΰΈ§ΰΉˆΰΈ²ΰΈ‡ Switch กับ LED

How? - ΰΈ—ΰΈ³ΰΈ­ΰΈ’ΰΉˆΰΈ²ΰΈ‡ΰΉ„ΰΈ£

ΰΈͺΰΈ£ΰΉ‰ΰΈ²ΰΈ‡ Dashboard ΰΈ—ΰΈ΅ΰΉˆΰΈ‘ΰΈ΅ 4 GPIO channels ΰΈžΰΈ£ΰΉ‰ΰΈ­ΰΈ‘ΰΈ›ΰΈΈΰΉˆΰΈ‘ All ON / All OFF


2. ΰΈ«ΰΈ₯ักการทำงานแΰΈ₯ΰΈ° Flowchart

2.1 Dashboard Architecture

2.2 Data Structure Design

2.3 Grid Positioning Calculation

2.4 Program Flowchart


3. ΰΈŸΰΈ±ΰΈ‡ΰΈΰΉŒΰΈŠΰΈ±ΰΈ™ΰΈͺำคัญ

3.1 Container Functions

Function
Description
Parameters

lv_obj_create(parent)

ΰΈͺΰΈ£ΰΉ‰ΰΈ²ΰΈ‡ Container (Base Object)

parent

lv_obj_set_size(obj, w, h)

กำหนดขนาด

obj, width, height

lv_obj_set_pos(obj, x, y)

ΰΈΰΈ³ΰΈ«ΰΈ™ΰΈ”ΰΈ•ΰΈ³ΰΉΰΈ«ΰΈ™ΰΉˆΰΈ‡ΰΉΰΈšΰΈš absolute

obj, x, y

lv_obj_clear_flag(obj, flag)

ΰΈ₯บ flag

obj, flag

lv_obj_invalidate(obj)

Force redraw

obj

3.2 State Control Functions

Function
Description
Parameters

lv_obj_add_state(obj, state)

ΰΉ€ΰΈžΰΈ΄ΰΉˆΰΈ‘ state

obj, state

lv_obj_clear_state(obj, state)

ΰΈ₯บ state

obj, state

lv_obj_has_state(obj, state)

ΰΈ•ΰΈ£ΰΈ§ΰΈˆΰΈͺอบ state

obj, state

3.3 Important Flags


4. Code Example

4.1 Complete Code

4.2 Code Breakdown

Part 1: Data Structure

Part 2: User Data Pattern

Part 3: Grid Position Calculation

Part 4: Batch Update with Invalidate


5. ΰΈ­ΰΈ‡ΰΈ„ΰΉŒΰΈ„ΰΈ§ΰΈ²ΰΈ‘ΰΈ£ΰΈΉΰΉ‰ΰΉΰΈ₯ΰΈ°ΰΉ€ΰΈ—ΰΈ„ΰΈ™ΰΈ΄ΰΈ„

5.1 Container as Layout Manager

5.2 Relative Alignment (align_to)

5.3 Programmatic State Changes

5.4 Array Initialization Patterns


6. ΰΉΰΈšΰΈšΰΈΰΈΆΰΈΰΈ«ΰΈ±ΰΈ”

Exercise 1: Enhanced Dashboard (Easy)

ΰΉ€ΰΈžΰΈ΄ΰΉˆΰΈ‘ΰΈŸΰΈ΅ΰΉ€ΰΈˆΰΈ­ΰΈ£ΰΉŒΰΉƒΰΈ«ΰΉ‰ Dashboard:

  • แΰΈͺΰΈ”ΰΈ‡ΰΈˆΰΈ³ΰΈ™ΰΈ§ΰΈ™ LED ΰΈ—ΰΈ΅ΰΉˆΰΉ€ΰΈ›ΰΈ΄ΰΈ”ΰΈ­ΰΈ’ΰΈΉΰΉˆ (Active: 2/4)

  • ΰΈ‘ΰΈ΅ΰΈ›ΰΈΈΰΉˆΰΈ‘ "Toggle All" ΰΈ—ΰΈ΅ΰΉˆΰΈͺΰΈ₯ับΰΈͺΰΈ–ΰΈ²ΰΈ™ΰΈ°ΰΈ—ΰΈ±ΰΉ‰ΰΈ‡ΰΈ«ΰΈ‘ΰΈ”

Expected Output:


Exercise 2: GPIO Monitor (Medium)

ΰΈͺΰΈ£ΰΉ‰ΰΈ²ΰΈ‡ Dashboard แบบ read-only ΰΈ—ΰΈ΅ΰΉˆΰΉΰΈͺΰΈ”ΰΈ‡ΰΈͺΰΈ–ΰΈ²ΰΈ™ΰΈ° "Input GPIOs":

  • ΰΈ‘ΰΈ΅ 4 LEDs ΰΈ—ΰΈ΅ΰΉˆΰΉΰΈͺΰΈ”ΰΈ‡ΰΈͺΰΈ–ΰΈ²ΰΈ™ΰΈ°

  • ΰΈ‘ΰΈ΅ΰΈ›ΰΈΈΰΉˆΰΈ‘ "Refresh" ΰΉ€ΰΈžΰΈ·ΰΉˆΰΈ­ΰΈ­ΰΈ±ΰΈžΰΉ€ΰΈ”ΰΈ—ΰΈ„ΰΉˆΰΈ² (ΰΈͺΰΈΈΰΉˆΰΈ‘ΰΈ„ΰΉˆΰΈ² 0/1)

  • แΰΈͺΰΈ”ΰΈ‡ΰΉ€ΰΈ§ΰΈ₯ΰΈ²ΰΈ—ΰΈ΅ΰΉˆ refresh ΰΈ₯่าΰΈͺΰΈΈΰΈ”


Exercise 3: PWM Control Dashboard (Advanced)

ΰΈͺΰΈ£ΰΉ‰ΰΈ²ΰΈ‡ Dashboard ΰΈ—ΰΈ΅ΰΉˆΰΈ‘ΰΈ΅ 4 channels:

  • ΰΉΰΈ•ΰΉˆΰΈ₯ΰΈ° channel ΰΈ‘ΰΈ΅ LED + Slider (ΰΈ„ΰΈ§ΰΈšΰΈ„ΰΈΈΰΈ‘ brightness)

  • ΰΈ‘ΰΈ΅ Master slider ΰΈ„ΰΈ§ΰΈšΰΈ„ΰΈΈΰΈ‘ΰΈ—ΰΈ±ΰΉ‰ΰΈ‡ΰΈ«ΰΈ‘ΰΈ”

  • แΰΈͺΰΈ”ΰΈ‡ΰΈ„ΰΉˆΰΈ² duty cycle (0-100%)


7. ΰΈͺΰΈ£ΰΈΈΰΈ›

ΰΈ«ΰΈ₯ΰΈ±ΰΈ‡ΰΈˆΰΈ²ΰΈΰΈ—ΰΈ³ Lab 0-5 แΰΈ₯ΰΉ‰ΰΈ§ ΰΈ„ΰΈΈΰΈ“ΰΉ„ΰΈ”ΰΉ‰ΰΉ€ΰΈ£ΰΈ΅ΰΈ’ΰΈ™ΰΈ£ΰΈΉΰΉ‰:

Lab
Widget/Concept
Key Functions

0

Layout & Positioning

lv_obj_align(), lv_obj_set_pos()

1

Label

lv_label_create(), lv_label_set_text()

2

Button + Event

lv_button_create(), lv_obj_add_event_cb()

3

LED + Slider

lv_led_create(), lv_slider_create()

4

Switch

lv_switch_create(), LV_STATE_CHECKED

5

Dashboard

Container, Struct, User Data Pattern

ΰΈ•ΰΉˆΰΈ­ΰΉ„ΰΈ› Part II (Advance HMI Display) ΰΈˆΰΈ°ΰΉ€ΰΈ›ΰΉ‡ΰΈ™ΰΈΰΈ²ΰΈ£ΰΈ™ΰΈ³ΰΈͺΰΈ΄ΰΉˆΰΈ‡ΰΈ—ΰΈ΅ΰΉˆΰΉ€ΰΈ£ΰΈ΅ΰΈ’ΰΈ™ΰΈ‘ΰΈ²ΰΈ„ΰΈ§ΰΈšΰΈ„ΰΈΈΰΈ‘ Hardware ΰΈˆΰΈ£ΰΈ΄ΰΈ‡!


8. References


Previous Lab: Lab 4: Switch Toggle Next: Week 3 Part II - Hardware Integration

Last updated

Was this helpful?