บทเรียน 1.3 — โปรแกรมแรก: เขียนบนจอและเปิดไฟ

เขียน MicroPython ให้ข้อความขึ้นจอ และสั่งหลอด LED กะพริบเป็นจังหวะ

โมดูล 1 — รู้จักระบบสมองกลฝังตัวและเขียนโปรแกรมแรก

หลักสูตร Explorer: เปิดโลกระบบสมองกลฝังตัว · ต่อจากบทเรียน 1.2

TESA Open Knowledge · © 2026 สมาคมสมองกลฝังตัวไทย (TESA) · ดัดแปลงจาก AIoT in Action (รศ.วิรุฬห์ ศรีบริรักษ์, BUU) · CC BY-NC 4.0

เป้าหมาย

  1. วางป้ายข้อความบนจอด้วย ui.Label และพิมพ์ลงลิ้นชัก Console ด้วย lcd.print แล้วรันผ่าน
  2. สั่งหลอด LED กะพริบด้วย gpio.led(n).on() / off() และ time.sleep_ms() ให้ครบจำนวนรอบ
  3. ทำนายผลก่อนรัน และอธิบายได้ว่าทำไมโปรแกรมควรจบด้วย led.off()
TESA Open Knowledge · © 2026 สมาคมสมองกลฝังตัวไทย (TESA) · ดัดแปลงจาก AIoT in Action (รศ.วิรุฬห์ ศรีบริรักษ์, BUU) · CC BY-NC 4.0

ก่อนเริ่ม

  • จากบทที่แล้ว คำสั่งไหนที่ทำให้ป้ายขึ้นจอทันทีหลังสร้าง
  • ในอีมูเลเตอร์ ปุ่มไหนเปิดแผงฮาร์ดแวร์จำลองที่มีหลอดไฟ
TESA Open Knowledge · © 2026 สมาคมสมองกลฝังตัวไทย (TESA) · ดัดแปลงจาก AIoT in Action (รศ.วิรุฬห์ ศรีบริรักษ์, BUU) · CC BY-NC 4.0

ดูของจริงก่อน

ก่อนอ่านโค้ด ให้ ทำนาย ก่อน เปิด examples/02_blink.py อ่านแค่สามบรรทัดบนสุดที่ตั้งค่า ROUNDS ON_MS OFF_MS

เขียนลงกระดาษว่า "ไฟจะกะพริบกี่ครั้ง แต่ละครั้งนานเท่าไร"

จากนั้น รัน ใน BENTO Emulator (กด HW เปิดแผงฮาร์ดแวร์จำลองก่อน แล้วกด ▶ Run) หรือบนบอร์ดจริงด้วย Program to Device แล้วเทียบกับที่ทำนายไว้

TESA Open Knowledge · © 2026 สมาคมสมองกลฝังตัวไทย (TESA) · ดัดแปลงจาก AIoT in Action (รศ.วิรุฬห์ ศรีบริรักษ์, BUU) · CC BY-NC 4.0

ภาพจอจาก BENTO Emulator

จอของ examples/01_hello_screen.py ขณะรันใน BENTO Emulatorจอของ examples/02_blink.py ขณะรันใน BENTO Emulator

01_hello_screen.py · 02_blink.py

TESA Open Knowledge · © 2026 สมาคมสมองกลฝังตัวไทย (TESA) · ดัดแปลงจาก AIoT in Action (รศ.วิรุฬห์ ศรีบริรักษ์, BUU) · CC BY-NC 4.0

แนวคิด — ข้อความหนึ่งบรรทัดไปได้สามที่

คำสั่ง ข้อความไปที่ไหน ใครเห็น
ui.Label("...") บนจอ ตรงตำแหน่ง x, y คนที่มองจอ
lcd.print("...") ลิ้นชัก Console บนจอ คนที่เปิดลิ้นชัก
print("...") คอนโซลฝั่งคอมพิวเตอร์ คนที่นั่งหน้าคอม

สามที่นี้เป็นคนละที่กัน มือใหม่หลายคนรันแล้วบอกว่า "ไม่เห็นอะไรเลย" ทั้งที่ข้อความไปรออยู่อีกที่หนึ่ง

ลองรัน examples/01_hello_screen.py แล้วตามหาข้อความให้ครบทั้งสามที่

TESA Open Knowledge · © 2026 สมาคมสมองกลฝังตัวไทย (TESA) · ดัดแปลงจาก AIoT in Action (รศ.วิรุฬห์ ศรีบริรักษ์, BUU) · CC BY-NC 4.0

แนวคิด — กะพริบหนึ่งครั้งคือสี่จังหวะ

สั่งติด → รอ → สั่งดับ → รอ

เวลาที่รอคือสิ่งที่กำหนดจังหวะ ไมโครคอนโทรลเลอร์ทำงานเร็วมาก ถ้าไม่มี time.sleep_ms() ไฟจะติดและดับเร็วเกินกว่าตาจะมองทัน

led.on() กับ led.off() สั่งค่าตรง ๆ อ่านบรรทัดเดียวก็รู้ว่าไฟจะเป็นอะไร นี่คือเหตุผลที่เราเลือกใช้สองคำสั่งนี้ก่อน

TESA Open Knowledge · © 2026 สมาคมสมองกลฝังตัวไทย (TESA) · ดัดแปลงจาก AIoT in Action (รศ.วิรุฬห์ ศรีบริรักษ์, BUU) · CC BY-NC 4.0

แนวคิด — โปรแกรมที่ดีบอกได้ว่าจบที่สถานะไหน

ถ้าโปรแกรมจบตอนไฟกำลังติด ไฟจะค้างติดต่อไปโดยไม่มีใครตั้งใจ งานจริงอย่างไฟเตือนในโรงงานจะทำให้คนเข้าใจผิดได้

ตัวอย่างทุกไฟล์ในหลักสูตรนี้จึง

  • เริ่ม ด้วย led.off() (เริ่มจากสถานะที่รู้แน่)
  • จบ ด้วย led.off() (จบที่สถานะที่รู้แน่)
TESA Open Knowledge · © 2026 สมาคมสมองกลฝังตัวไทย (TESA) · ดัดแปลงจาก AIoT in Action (รศ.วิรุฬห์ ศรีบริรักษ์, BUU) · CC BY-NC 4.0

ตัวอย่างสมบูรณ์

examples/02_blink.py ย่อมาจากตัวอย่างของหลักสูตร AIoT in Action

led = gpio.led(LED)
led.off()                  # ท่าที่ 2: เริ่มจากสถานะที่รู้แน่ว่าคืออะไร

rounds = 0
for k in range(ROUNDS):    # ท่าที่ 4: วนกะพริบ
    led.on()
    state.text("ติด")
    ui.poll()
    time.sleep_ms(ON_MS)

    led.off()
    rounds = rounds + 1
    seg.text(str(rounds))  # Seg7 รับข้อความ ไม่ใช่ตัวเลข จึงต้อง str()
    ui.poll()
    time.sleep_ms(OFF_MS)

led.off()                  # ท่าที่ 5: จบที่สถานะที่รู้แน่
TESA Open Knowledge · © 2026 สมาคมสมองกลฝังตัวไทย (TESA) · ดัดแปลงจาก AIoT in Action (รศ.วิรุฬห์ ศรีบริรักษ์, BUU) · CC BY-NC 4.0

ฝึกเติม

เปิด practice/blink_count.py มีช่องให้เติม 2 จุด (บรรทัดที่ขึ้นต้นด้วย # เติม:)

  • เติมที่ 1 สั่งหลอดให้ติด
  • เติมที่ 2 เพิ่มตัวนับขึ้นหนึ่ง แล้วเขียนเลขใหม่ลงจอ

ถ้าอยากฝึกแบบไม่ต้องพิมพ์ ลองเรียงบรรทัดโค้ดใน quiz ข้อที่ 3 ให้ถูกลำดับก่อน (แบบฝึก Parsons) แล้วค่อยกลับมาเติมไฟล์จริง

ลองเองก่อนอย่างน้อย 15 นาที แล้วเปิด solution/blink_count.py เทียบ

TESA Open Knowledge · © 2026 สมาคมสมองกลฝังตัวไทย (TESA) · ดัดแปลงจาก AIoT in Action (รศ.วิรุฬห์ ศรีบริรักษ์, BUU) · CC BY-NC 4.0

เช็กความเข้าใจ

ตอบคำถามใน quiz.yaml ถูกตั้งแต่ 80% ขึ้นไปถือว่าผ่าน

  1. คำสั่ง lcd.print("สวัสดี") ทำให้ข้อความไปปรากฏที่ใด
  2. โค้ด ui.Label("สวัสดี", x=24, y=8, color=0xE8EAED, value=28) ตัวเลข value=28 หมายถึงอะไร
  3. เรียงบรรทัดในลูปกะพริบให้ถูกลำดับ (กะพริบหนึ่งครั้ง)
  4. ถ้า ROUNDS = 6, ON_MS = 250, OFF_MS = 250 โปรแกรมกะพริบใช้เวลาประมาณเท่าไร
  5. ทำไมตัวอย่างจึงเรียก led.off() อีกครั้งหลังจบลูป
TESA Open Knowledge · © 2026 สมาคมสมองกลฝังตัวไทย (TESA) · ดัดแปลงจาก AIoT in Action (รศ.วิรุฬห์ ศรีบริรักษ์, BUU) · CC BY-NC 4.0

แล็บ

แก้แล้วรันใหม่ (Modify): ตั้ง ON_MS = 50 และ OFF_MS = 950 ใน examples/02_blink.py ทำนายก่อนว่าไฟจะดูเป็นอย่างไร แล้วรันจริง

สร้างเอง (Make): เขียนโปรแกรมใหม่ที่กะพริบเป็นรหัสสั้น–ยาว เช่น สั้นสามครั้ง ยาวสามครั้ง สั้นสามครั้ง แล้วถ่ายภาพหน้าจอ (หรือคลิปสั้นถ้าใช้บอร์ดจริง) เก็บไว้เป็นหลักฐานใน portfolio ของคุณ

TESA Open Knowledge · © 2026 สมาคมสมองกลฝังตัวไทย (TESA) · ดัดแปลงจาก AIoT in Action (รศ.วิรุฬห์ ศรีบริรักษ์, BUU) · CC BY-NC 4.0

ไปต่อ

ไฟกะพริบคือ "Hello, World" ของโลกระบบฝังตัว ถ้าอยากเห็นว่าหลอดดวงเดียวหรี่ความสว่างได้อย่างไร ดูตัวอย่าง 03_led_brightness.py ในหลักสูตร AIoT in Action

บทถัดไปเข้าสู่โมดูล 2: บทเรียน 2.1 — อ่านเซนเซอร์แล้วดูค่าเปลี่ยน

TESA Open Knowledge · © 2026 สมาคมสมองกลฝังตัวไทย (TESA) · ดัดแปลงจาก AIoT in Action (รศ.วิรุฬห์ ศรีบริรักษ์, BUU) · CC BY-NC 4.0

แหล่งที่มาและเครดิต

"Explorer: เปิดโลกระบบสมองกลฝังตัว" จาก TESA Open Knowledge โดยสมาคมสมองกลฝังตัวไทย
(Thai Embedded Systems Association: TESA) https://github.com/tesaiot/tesa-qualification-program
สัญญาอนุญาต CC BY-NC 4.0

ดัดแปลงจาก AIoT in Action — Embedded Systems for AIoT Developer, © 2026 รศ.วิรุฬห์ ศรีบริรักษ์
วิศวกรรมระบบสมองกลฝังตัว มหาวิทยาลัยบูรพา (BUU) · Advance Innovation Centre (AIC) · BENTO & TESAIoT (CC BY 4.0 / MIT)

TESA Open Knowledge · © 2026 สมาคมสมองกลฝังตัวไทย (TESA) · ดัดแปลงจาก AIoT in Action (รศ.วิรุฬห์ ศรีบริรักษ์, BUU) · CC BY-NC 4.0