การพัฒนา GUI สำหรับหน้าจอสัมผัสบน Raspberry Pi Pico โดยใช้จอแสดงผล ILI9488, หน้าจอสัมผัสแบบ Capacitive GT911 และ LVGL-9.x

เปลี่ยน Raspberry Pi Pico ของคุณให้เป็นศูนย์กลางระบบสัมผัสที่ทันสมัยด้วยจอแสดงผล ILI9488 และกราฟิก LVGL-9.x อันทรงพลัง

การพัฒนา GUI สำหรับหน้าจอสัมผัสบน Raspberry Pi Pico โดยใช้จอแสดงผล ILI9488, หน้าจอสัมผัสแบบ Capacitive GT911 และ LVGL-9.x

โครงการนี้แสดงให้เห็นถึงการรวมจอ LCD TFT ขนาด 4 นิ้ว ความละเอียด 480×320 พิกเซล รุ่น ILI9488 เข้ากับฟังก์ชันสัมผัสแบบ capacitive โดยใช้ไมโครคอนโทรลเลอร์ Raspberry Pi Pico (RP2040) โค้ดถูกพัฒนาโดยใช้ Arduino IDE โดยใช้ไลบรารี TFT_eSPI ที่ใช้งานกันอย่างแพร่หลายเพื่อการสื่อสาร SPI ที่มีประสิทธิภาพกับตัวควบคุมจอแสดงผล ILI9488 สำหรับอินเทอร์เฟซสัมผัส แผงสัมผัสแบบ capacitive รุ่น GT911 เชื่อมต่อผ่าน I²C และจัดการผ่านโค้ดที่เขียนขึ้นเองเพื่อตีความเหตุการณ์การสัมผัส 

โครงการนี้ใช้ LVGL (Light and Versatile Graphics Library) เพื่อสร้างส่วนติดต่อผู้ใช้แบบกราฟิกเชิงโต้ตอบ LVGL เป็นไลบรารี GUI แบบฝังตัวโอเพนซอร์สที่มีประสิทธิภาพสูงและได้รับการปรับให้เหมาะสมสำหรับไมโครคอนโทรลเลอร์ โปรเซสเซอร์ RP2040 แบบดูอัลคอร์ของ Raspberry Pi Pico มีประสิทธิภาพเพียงพอสำหรับการจัดการการแสดงผลและการโต้ตอบแบบสัมผัสแบบเรียลไทม์

จอ LCD ILI9488 ขนาด 4 นิ้ว

Z400IT005-DCT-TN เป็นโมดูลจอ LCD TFT ขนาด 4.0 นิ้ว ที่รวมแผงสัมผัสแบบ capacitive ไว้ด้วย โดยใช้ตัวควบคุมสัมผัส GT911 มีความละเอียด 480×320 พิกเซล ใช้รูปแบบสี RGB565 รองรับสีได้มากถึง 65,000 สี เพื่อการแสดงภาพที่สดใสและละเอียด จอแสดงผลใช้ไอซีไดรเวอร์ ILI9488 ซึ่งเข้ากันได้กับอินเทอร์เฟซต่างๆ รวมถึง SPI แบบ 3 สาย, SPI แบบ 4 สาย และอินเทอร์เฟซ MCU แบบขนาน 8/16 บิต ในโครงการนี้ การกำหนดค่าจอแสดงผลคือ SPI แบบ 4 สาย 8 บิต (โดยการดึงขึ้นที่ขา IM0, IM1 และ IM2) สำหรับใช้กับบอร์ด Raspberry Pi Pico (RP2040)

แผง TFT ใช้โหมดการแสดงผลแบบส่งผ่านแสงอย่างสมบูรณ์ ซึ่งหมายความว่าต้องเปิดไฟแบ็คไลท์เพื่อให้มองเห็นภาพได้ ประกอบด้วยแผงไฟแบ็คไลท์ LED สีขาว 8 ดวง ต่อแบบขนาน โดยมีกระแสไฟใช้งานทั่วไป 120 mA ที่แรงดันประมาณ 3.1 V แนะนำให้ใช้ตัวต้านทานจำกัดกระแสเพื่อป้องกันความร้อนสูงเกินไปและความเสียหายต่อไฟแบ็คไลท์ในระยะยาว

ภาพที่ 1 แสดงรูปร่างทางกายภาพของจอ LCD และภาพที่ 2 แสดงการจัดเรียงขาเชื่อมต่อของจอ LCD

รูปที่ 1: จอ LCD ขนาด 4 นิ้ว รุ่น ILI9488 พร้อมระบบสัมผัสแบบ Capacitive รุ่น GT911 (แบบสัมผัสจริง)
รูปที่ 2: จอ LCD ขนาด 4 นิ้ว รุ่น ILI9488 พร้อมระบบสัมผัสแบบ Capacitive รุ่น GT911 (แผนผังขาต่อ)

RP2040 MCU (RP Pico)

RP2040 เป็นไมโคร คอนโทรลเลอร์ที่พัฒนาโดย Raspberry Pi และวางจำหน่ายในเดือนมกราคม 2021 ออกแบบมาเพื่อมอบประสิทธิภาพสูงในราคาประหยัด ทำให้เป็นตัวเลือกที่ยอดเยี่ยมสำหรับระบบฝังตัว โครงการสำหรับผู้ที่ชื่นชอบงานอดิเรก และแอปพลิเคชันระดับมืออาชีพ บริษัทต่างๆ ได้พัฒนาบอร์ด Pico หลายรุ่น (ที่ใช้MCU RP2040 ) แต่บอร์ด Pico รุ่นแรกอย่างเป็นทางการแสดงในรูปที่ 3 คุณสามารถใช้บอร์ด Pico รุ่นใดก็ได้เพื่อทำตามบทความนี้ ศึกษาเอกสารของผู้ผลิตเพื่อค้นหาแผนภาพ I/O และแก้ไขไฟล์การกำหนดค่า

รูปที่ 3: บอร์ด Raspberry Pi Pico อย่างเป็นทางการ พัฒนาโดยมูลนิธิ Raspberry Pi (หน่วยความจำแฟลช 2MB)

ข้อมูลจำเพาะของไมโครคอนโทรลเลอร์ RP2040

  • ซีพียู: อาร์มิโอคอร์ Cortex-M0+ (ความเร็วสูงสุด 133 เมกะเฮิร์ตซ์)
  • SRAM: 264 KB (แบ่งเป็นแบงค์)
  • หน่วยความจำ: ไม่มีหน่วยความจำแฟลชในตัว ต้องใช้หน่วยความจำแฟลช QSPI ภายนอก (รองรับสูงสุด 16 MB)
  • GPIO: 30 พิน (4 พินสามารถใช้เป็น ADC ได้)

อินเทอร์เฟซอินพุต/เอาต์พุต

  • 2 × SPI, 2 × I²C, 2 × UART
  • ช่อง PWM 16 ช่อง
  • 8 × PIO (Programmable I/O) สำหรับอุปกรณ์ต่อพ่วงแบบกำหนดเอง
  • USB: USB 1.1 รองรับทั้งโหมด Host และ Device
  • กำลังไฟ: ใช้งานได้ตั้งแต่ 1.8V ถึง 3.3V
  • คุณสมบัติอื่นๆ: ตัวคูณ/ตัวหารฮาร์ดแวร์, หน่วยประมวลผลทศนิยม, ตัวจับเวลาเฝ้าระวัง และนาฬิกาเรียลไทม์ (RTC)

รหัส

รูปที่ 4 แสดงฟังก์ชัน flush ของ LVGL ซึ่งเป็นหนึ่งในฟังก์ชันที่สำคัญที่สุดของ LVGL ที่ผู้เริ่มต้นหลายคนมักประสบปัญหา อ็อบเจ็กต์ “tft” ถูกสร้างขึ้นจากคลาส “TFT_eSPI” เพื่อเขียนฟังก์ชัน “my_disp_flush”:

TFT_eSPI tft = TFT_eSPI(TFT_HOR_RES, TFT_VER_RES);

รูปที่ 4: ฟังก์ชันการล้างของ LVGL-9

รูปที่ 5 แสดงฟังก์ชันสำคัญอีกฟังก์ชันหนึ่งคือ “my_touchpad_read” ซึ่งเป็นฟังก์ชันที่ท้าทายที่สุดในการอ่านเหตุการณ์สัมผัสของ GT911 และรายงานพิกัด (x และ y) ไปยัง LVGL ฟังก์ชัน “Serial.println()” ทั้งสองฟังก์ชันมีไว้เพื่อการดีบัก คุณสามารถคอมเมนต์หรือลบออกได้

รูปที่ 5: ฟังก์ชัน “my_touchpad_read”

รูปที่ 6 แสดงฟังก์ชันการตั้งค่า การเริ่มต้นใช้งาน I²C และ LVGL นั้นชัดเจน รูปที่ 7 แสดงการลงทะเบียนอุปกรณ์อินพุต LVGL และฟังก์ชันที่แนบมาด้วย (LV_INDEV_TYPE_POINTER และ “my_touchpad_read”)

รูปที่ 6: ฟังก์ชัน “setup” ของ Arduino
รูปที่ 7: อุปกรณ์ป้อนข้อมูล LVGL

รูปที่ 8 แสดงการประกาศโค้ด การเริ่มต้นใช้งาน และการกำหนดค่าต่างๆ ได้แก่ ส่วนหัว ที่อยู่ I²C แผนผังขา I²C TFT_eSPI และ LVGL

รูปที่ 8: การเริ่มต้นโค้ด

รูปที่ 9 แสดงฟังก์ชันการอ่านและการเขียน I²C ซึ่งใช้ในการอ่านเหตุการณ์การสัมผัส

รูปที่ 9: ฟังก์ชันการอ่าน/เขียน I²C

การทดสอบ

ฉันได้ทดสอบโค้ดและฮาร์ดแวร์โดยใช้แผงวงจรทดลองและสายไฟ (รูปที่ 10) จอ LCD และหน้าจอสัมผัสทำงานได้อย่างไม่มีปัญหาและราบรื่น

รูปที่ 10: การทดสอบฮาร์ดแวร์และโค้ดบนแผงวงจรทดลอง

งานในอนาคต

โค้ดสามารถปรับใช้กับ RP2350 ได้อย่างง่ายดายโดยไม่ต้องแก้ไขหรือแก้ไขเพียงเล็กน้อย (รูปที่ 11) RP2350 เป็นไมโครคอนโทรลเลอร์รุ่นใหม่จาก Raspberry Pi Ltd. ออกแบบมาเพื่อทดแทน RP2040 ที่ใช้งานกันอย่างแพร่หลาย มันเป็นตัวขับเคลื่อน Raspberry Pi Pico 2 โดยยังคงความเข้ากันได้กับฟอร์มแฟคเตอร์ Pico เดิม ในขณะเดียวกันก็มีการปรับปรุงที่สำคัญหลายอย่าง RP2350 มีโปรเซสเซอร์ ARM Cortex-M0+ แบบ dual-core เช่นเดียวกับ RP2040 แต่เพิ่มความสามารถใหม่ๆ เช่น การเชื่อมต่อไร้สายในตัว หน่วยความจำ SRAM ที่มากขึ้น และศักยภาพในการปรับปรุงประสิทธิภาพการใช้พลังงานและการรวมอุปกรณ์ต่อพ่วง

มาพร้อมกับ SRAM ภายในขนาด 520KB ซึ่งเกือบสองเท่าของ RP2040 และรองรับหน่วยความจำแฟลชหรือ PSRAM ภายนอกได้สูงสุด 16MB ผ่านอินเทอร์เฟซ QSPI เฉพาะ บอร์ด Pico 2 มาตรฐานมีหน่วยความจำแฟลชขนาด 4MB

รูปที่ 11: การเลือก Raspberry Pi Pico 2 ใน Arduino Board Manager

บทความที่เกี่ยวข้อง

การพัฒนา GUI สำหรับหน้าจอสัมผัสบน Raspberry Pi Pico โดยใช้จอแสดงผล ILI9488, หน้าจอสัมผัสแบบ Capacitive GT911 และ LVGL-9.x

เปลี่ยน Raspberry Pi Pico ของคุณให้เป็นศูนย์กลางระบบสัมผัสที่ทันสมัยด้วยจอแสดงผล ILI9488 และกราฟิก LVGL-9.x อันทรงพลัง

นักเขียนบทความ
by 
นักเขียนบทความ
การพัฒนา GUI สำหรับหน้าจอสัมผัสบน Raspberry Pi Pico โดยใช้จอแสดงผล ILI9488, หน้าจอสัมผัสแบบ Capacitive GT911 และ LVGL-9.x

การพัฒนา GUI สำหรับหน้าจอสัมผัสบน Raspberry Pi Pico โดยใช้จอแสดงผล ILI9488, หน้าจอสัมผัสแบบ Capacitive GT911 และ LVGL-9.x

เปลี่ยน Raspberry Pi Pico ของคุณให้เป็นศูนย์กลางระบบสัมผัสที่ทันสมัยด้วยจอแสดงผล ILI9488 และกราฟิก LVGL-9.x อันทรงพลัง

โครงการนี้แสดงให้เห็นถึงการรวมจอ LCD TFT ขนาด 4 นิ้ว ความละเอียด 480×320 พิกเซล รุ่น ILI9488 เข้ากับฟังก์ชันสัมผัสแบบ capacitive โดยใช้ไมโครคอนโทรลเลอร์ Raspberry Pi Pico (RP2040) โค้ดถูกพัฒนาโดยใช้ Arduino IDE โดยใช้ไลบรารี TFT_eSPI ที่ใช้งานกันอย่างแพร่หลายเพื่อการสื่อสาร SPI ที่มีประสิทธิภาพกับตัวควบคุมจอแสดงผล ILI9488 สำหรับอินเทอร์เฟซสัมผัส แผงสัมผัสแบบ capacitive รุ่น GT911 เชื่อมต่อผ่าน I²C และจัดการผ่านโค้ดที่เขียนขึ้นเองเพื่อตีความเหตุการณ์การสัมผัส 

โครงการนี้ใช้ LVGL (Light and Versatile Graphics Library) เพื่อสร้างส่วนติดต่อผู้ใช้แบบกราฟิกเชิงโต้ตอบ LVGL เป็นไลบรารี GUI แบบฝังตัวโอเพนซอร์สที่มีประสิทธิภาพสูงและได้รับการปรับให้เหมาะสมสำหรับไมโครคอนโทรลเลอร์ โปรเซสเซอร์ RP2040 แบบดูอัลคอร์ของ Raspberry Pi Pico มีประสิทธิภาพเพียงพอสำหรับการจัดการการแสดงผลและการโต้ตอบแบบสัมผัสแบบเรียลไทม์

จอ LCD ILI9488 ขนาด 4 นิ้ว

Z400IT005-DCT-TN เป็นโมดูลจอ LCD TFT ขนาด 4.0 นิ้ว ที่รวมแผงสัมผัสแบบ capacitive ไว้ด้วย โดยใช้ตัวควบคุมสัมผัส GT911 มีความละเอียด 480×320 พิกเซล ใช้รูปแบบสี RGB565 รองรับสีได้มากถึง 65,000 สี เพื่อการแสดงภาพที่สดใสและละเอียด จอแสดงผลใช้ไอซีไดรเวอร์ ILI9488 ซึ่งเข้ากันได้กับอินเทอร์เฟซต่างๆ รวมถึง SPI แบบ 3 สาย, SPI แบบ 4 สาย และอินเทอร์เฟซ MCU แบบขนาน 8/16 บิต ในโครงการนี้ การกำหนดค่าจอแสดงผลคือ SPI แบบ 4 สาย 8 บิต (โดยการดึงขึ้นที่ขา IM0, IM1 และ IM2) สำหรับใช้กับบอร์ด Raspberry Pi Pico (RP2040)

แผง TFT ใช้โหมดการแสดงผลแบบส่งผ่านแสงอย่างสมบูรณ์ ซึ่งหมายความว่าต้องเปิดไฟแบ็คไลท์เพื่อให้มองเห็นภาพได้ ประกอบด้วยแผงไฟแบ็คไลท์ LED สีขาว 8 ดวง ต่อแบบขนาน โดยมีกระแสไฟใช้งานทั่วไป 120 mA ที่แรงดันประมาณ 3.1 V แนะนำให้ใช้ตัวต้านทานจำกัดกระแสเพื่อป้องกันความร้อนสูงเกินไปและความเสียหายต่อไฟแบ็คไลท์ในระยะยาว

ภาพที่ 1 แสดงรูปร่างทางกายภาพของจอ LCD และภาพที่ 2 แสดงการจัดเรียงขาเชื่อมต่อของจอ LCD

รูปที่ 1: จอ LCD ขนาด 4 นิ้ว รุ่น ILI9488 พร้อมระบบสัมผัสแบบ Capacitive รุ่น GT911 (แบบสัมผัสจริง)
รูปที่ 2: จอ LCD ขนาด 4 นิ้ว รุ่น ILI9488 พร้อมระบบสัมผัสแบบ Capacitive รุ่น GT911 (แผนผังขาต่อ)

RP2040 MCU (RP Pico)

RP2040 เป็นไมโคร คอนโทรลเลอร์ที่พัฒนาโดย Raspberry Pi และวางจำหน่ายในเดือนมกราคม 2021 ออกแบบมาเพื่อมอบประสิทธิภาพสูงในราคาประหยัด ทำให้เป็นตัวเลือกที่ยอดเยี่ยมสำหรับระบบฝังตัว โครงการสำหรับผู้ที่ชื่นชอบงานอดิเรก และแอปพลิเคชันระดับมืออาชีพ บริษัทต่างๆ ได้พัฒนาบอร์ด Pico หลายรุ่น (ที่ใช้MCU RP2040 ) แต่บอร์ด Pico รุ่นแรกอย่างเป็นทางการแสดงในรูปที่ 3 คุณสามารถใช้บอร์ด Pico รุ่นใดก็ได้เพื่อทำตามบทความนี้ ศึกษาเอกสารของผู้ผลิตเพื่อค้นหาแผนภาพ I/O และแก้ไขไฟล์การกำหนดค่า

รูปที่ 3: บอร์ด Raspberry Pi Pico อย่างเป็นทางการ พัฒนาโดยมูลนิธิ Raspberry Pi (หน่วยความจำแฟลช 2MB)

ข้อมูลจำเพาะของไมโครคอนโทรลเลอร์ RP2040

  • ซีพียู: อาร์มิโอคอร์ Cortex-M0+ (ความเร็วสูงสุด 133 เมกะเฮิร์ตซ์)
  • SRAM: 264 KB (แบ่งเป็นแบงค์)
  • หน่วยความจำ: ไม่มีหน่วยความจำแฟลชในตัว ต้องใช้หน่วยความจำแฟลช QSPI ภายนอก (รองรับสูงสุด 16 MB)
  • GPIO: 30 พิน (4 พินสามารถใช้เป็น ADC ได้)

อินเทอร์เฟซอินพุต/เอาต์พุต

  • 2 × SPI, 2 × I²C, 2 × UART
  • ช่อง PWM 16 ช่อง
  • 8 × PIO (Programmable I/O) สำหรับอุปกรณ์ต่อพ่วงแบบกำหนดเอง
  • USB: USB 1.1 รองรับทั้งโหมด Host และ Device
  • กำลังไฟ: ใช้งานได้ตั้งแต่ 1.8V ถึง 3.3V
  • คุณสมบัติอื่นๆ: ตัวคูณ/ตัวหารฮาร์ดแวร์, หน่วยประมวลผลทศนิยม, ตัวจับเวลาเฝ้าระวัง และนาฬิกาเรียลไทม์ (RTC)

รหัส

รูปที่ 4 แสดงฟังก์ชัน flush ของ LVGL ซึ่งเป็นหนึ่งในฟังก์ชันที่สำคัญที่สุดของ LVGL ที่ผู้เริ่มต้นหลายคนมักประสบปัญหา อ็อบเจ็กต์ “tft” ถูกสร้างขึ้นจากคลาส “TFT_eSPI” เพื่อเขียนฟังก์ชัน “my_disp_flush”:

TFT_eSPI tft = TFT_eSPI(TFT_HOR_RES, TFT_VER_RES);

รูปที่ 4: ฟังก์ชันการล้างของ LVGL-9

รูปที่ 5 แสดงฟังก์ชันสำคัญอีกฟังก์ชันหนึ่งคือ “my_touchpad_read” ซึ่งเป็นฟังก์ชันที่ท้าทายที่สุดในการอ่านเหตุการณ์สัมผัสของ GT911 และรายงานพิกัด (x และ y) ไปยัง LVGL ฟังก์ชัน “Serial.println()” ทั้งสองฟังก์ชันมีไว้เพื่อการดีบัก คุณสามารถคอมเมนต์หรือลบออกได้

รูปที่ 5: ฟังก์ชัน “my_touchpad_read”

รูปที่ 6 แสดงฟังก์ชันการตั้งค่า การเริ่มต้นใช้งาน I²C และ LVGL นั้นชัดเจน รูปที่ 7 แสดงการลงทะเบียนอุปกรณ์อินพุต LVGL และฟังก์ชันที่แนบมาด้วย (LV_INDEV_TYPE_POINTER และ “my_touchpad_read”)

รูปที่ 6: ฟังก์ชัน “setup” ของ Arduino
รูปที่ 7: อุปกรณ์ป้อนข้อมูล LVGL

รูปที่ 8 แสดงการประกาศโค้ด การเริ่มต้นใช้งาน และการกำหนดค่าต่างๆ ได้แก่ ส่วนหัว ที่อยู่ I²C แผนผังขา I²C TFT_eSPI และ LVGL

รูปที่ 8: การเริ่มต้นโค้ด

รูปที่ 9 แสดงฟังก์ชันการอ่านและการเขียน I²C ซึ่งใช้ในการอ่านเหตุการณ์การสัมผัส

รูปที่ 9: ฟังก์ชันการอ่าน/เขียน I²C

การทดสอบ

ฉันได้ทดสอบโค้ดและฮาร์ดแวร์โดยใช้แผงวงจรทดลองและสายไฟ (รูปที่ 10) จอ LCD และหน้าจอสัมผัสทำงานได้อย่างไม่มีปัญหาและราบรื่น

รูปที่ 10: การทดสอบฮาร์ดแวร์และโค้ดบนแผงวงจรทดลอง

งานในอนาคต

โค้ดสามารถปรับใช้กับ RP2350 ได้อย่างง่ายดายโดยไม่ต้องแก้ไขหรือแก้ไขเพียงเล็กน้อย (รูปที่ 11) RP2350 เป็นไมโครคอนโทรลเลอร์รุ่นใหม่จาก Raspberry Pi Ltd. ออกแบบมาเพื่อทดแทน RP2040 ที่ใช้งานกันอย่างแพร่หลาย มันเป็นตัวขับเคลื่อน Raspberry Pi Pico 2 โดยยังคงความเข้ากันได้กับฟอร์มแฟคเตอร์ Pico เดิม ในขณะเดียวกันก็มีการปรับปรุงที่สำคัญหลายอย่าง RP2350 มีโปรเซสเซอร์ ARM Cortex-M0+ แบบ dual-core เช่นเดียวกับ RP2040 แต่เพิ่มความสามารถใหม่ๆ เช่น การเชื่อมต่อไร้สายในตัว หน่วยความจำ SRAM ที่มากขึ้น และศักยภาพในการปรับปรุงประสิทธิภาพการใช้พลังงานและการรวมอุปกรณ์ต่อพ่วง

มาพร้อมกับ SRAM ภายในขนาด 520KB ซึ่งเกือบสองเท่าของ RP2040 และรองรับหน่วยความจำแฟลชหรือ PSRAM ภายนอกได้สูงสุด 16MB ผ่านอินเทอร์เฟซ QSPI เฉพาะ บอร์ด Pico 2 มาตรฐานมีหน่วยความจำแฟลชขนาด 4MB

รูปที่ 11: การเลือก Raspberry Pi Pico 2 ใน Arduino Board Manager

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse varius enim in eros elementum tristique. Duis cursus, mi quis viverra ornare, eros dolor interdum nulla, ut commodo diam libero vitae erat. Aenean faucibus nibh et justo cursus id rutrum lorem imperdiet. Nunc ut sem vitae risus tristique posuere.

การพัฒนา GUI สำหรับหน้าจอสัมผัสบน Raspberry Pi Pico โดยใช้จอแสดงผล ILI9488, หน้าจอสัมผัสแบบ Capacitive GT911 และ LVGL-9.x

การพัฒนา GUI สำหรับหน้าจอสัมผัสบน Raspberry Pi Pico โดยใช้จอแสดงผล ILI9488, หน้าจอสัมผัสแบบ Capacitive GT911 และ LVGL-9.x

เปลี่ยน Raspberry Pi Pico ของคุณให้เป็นศูนย์กลางระบบสัมผัสที่ทันสมัยด้วยจอแสดงผล ILI9488 และกราฟิก LVGL-9.x อันทรงพลัง

Lorem ipsum dolor amet consectetur adipiscing elit tortor massa arcu non.

โครงการนี้แสดงให้เห็นถึงการรวมจอ LCD TFT ขนาด 4 นิ้ว ความละเอียด 480×320 พิกเซล รุ่น ILI9488 เข้ากับฟังก์ชันสัมผัสแบบ capacitive โดยใช้ไมโครคอนโทรลเลอร์ Raspberry Pi Pico (RP2040) โค้ดถูกพัฒนาโดยใช้ Arduino IDE โดยใช้ไลบรารี TFT_eSPI ที่ใช้งานกันอย่างแพร่หลายเพื่อการสื่อสาร SPI ที่มีประสิทธิภาพกับตัวควบคุมจอแสดงผล ILI9488 สำหรับอินเทอร์เฟซสัมผัส แผงสัมผัสแบบ capacitive รุ่น GT911 เชื่อมต่อผ่าน I²C และจัดการผ่านโค้ดที่เขียนขึ้นเองเพื่อตีความเหตุการณ์การสัมผัส 

โครงการนี้ใช้ LVGL (Light and Versatile Graphics Library) เพื่อสร้างส่วนติดต่อผู้ใช้แบบกราฟิกเชิงโต้ตอบ LVGL เป็นไลบรารี GUI แบบฝังตัวโอเพนซอร์สที่มีประสิทธิภาพสูงและได้รับการปรับให้เหมาะสมสำหรับไมโครคอนโทรลเลอร์ โปรเซสเซอร์ RP2040 แบบดูอัลคอร์ของ Raspberry Pi Pico มีประสิทธิภาพเพียงพอสำหรับการจัดการการแสดงผลและการโต้ตอบแบบสัมผัสแบบเรียลไทม์

จอ LCD ILI9488 ขนาด 4 นิ้ว

Z400IT005-DCT-TN เป็นโมดูลจอ LCD TFT ขนาด 4.0 นิ้ว ที่รวมแผงสัมผัสแบบ capacitive ไว้ด้วย โดยใช้ตัวควบคุมสัมผัส GT911 มีความละเอียด 480×320 พิกเซล ใช้รูปแบบสี RGB565 รองรับสีได้มากถึง 65,000 สี เพื่อการแสดงภาพที่สดใสและละเอียด จอแสดงผลใช้ไอซีไดรเวอร์ ILI9488 ซึ่งเข้ากันได้กับอินเทอร์เฟซต่างๆ รวมถึง SPI แบบ 3 สาย, SPI แบบ 4 สาย และอินเทอร์เฟซ MCU แบบขนาน 8/16 บิต ในโครงการนี้ การกำหนดค่าจอแสดงผลคือ SPI แบบ 4 สาย 8 บิต (โดยการดึงขึ้นที่ขา IM0, IM1 และ IM2) สำหรับใช้กับบอร์ด Raspberry Pi Pico (RP2040)

แผง TFT ใช้โหมดการแสดงผลแบบส่งผ่านแสงอย่างสมบูรณ์ ซึ่งหมายความว่าต้องเปิดไฟแบ็คไลท์เพื่อให้มองเห็นภาพได้ ประกอบด้วยแผงไฟแบ็คไลท์ LED สีขาว 8 ดวง ต่อแบบขนาน โดยมีกระแสไฟใช้งานทั่วไป 120 mA ที่แรงดันประมาณ 3.1 V แนะนำให้ใช้ตัวต้านทานจำกัดกระแสเพื่อป้องกันความร้อนสูงเกินไปและความเสียหายต่อไฟแบ็คไลท์ในระยะยาว

ภาพที่ 1 แสดงรูปร่างทางกายภาพของจอ LCD และภาพที่ 2 แสดงการจัดเรียงขาเชื่อมต่อของจอ LCD

รูปที่ 1: จอ LCD ขนาด 4 นิ้ว รุ่น ILI9488 พร้อมระบบสัมผัสแบบ Capacitive รุ่น GT911 (แบบสัมผัสจริง)
รูปที่ 2: จอ LCD ขนาด 4 นิ้ว รุ่น ILI9488 พร้อมระบบสัมผัสแบบ Capacitive รุ่น GT911 (แผนผังขาต่อ)

RP2040 MCU (RP Pico)

RP2040 เป็นไมโคร คอนโทรลเลอร์ที่พัฒนาโดย Raspberry Pi และวางจำหน่ายในเดือนมกราคม 2021 ออกแบบมาเพื่อมอบประสิทธิภาพสูงในราคาประหยัด ทำให้เป็นตัวเลือกที่ยอดเยี่ยมสำหรับระบบฝังตัว โครงการสำหรับผู้ที่ชื่นชอบงานอดิเรก และแอปพลิเคชันระดับมืออาชีพ บริษัทต่างๆ ได้พัฒนาบอร์ด Pico หลายรุ่น (ที่ใช้MCU RP2040 ) แต่บอร์ด Pico รุ่นแรกอย่างเป็นทางการแสดงในรูปที่ 3 คุณสามารถใช้บอร์ด Pico รุ่นใดก็ได้เพื่อทำตามบทความนี้ ศึกษาเอกสารของผู้ผลิตเพื่อค้นหาแผนภาพ I/O และแก้ไขไฟล์การกำหนดค่า

รูปที่ 3: บอร์ด Raspberry Pi Pico อย่างเป็นทางการ พัฒนาโดยมูลนิธิ Raspberry Pi (หน่วยความจำแฟลช 2MB)

ข้อมูลจำเพาะของไมโครคอนโทรลเลอร์ RP2040

  • ซีพียู: อาร์มิโอคอร์ Cortex-M0+ (ความเร็วสูงสุด 133 เมกะเฮิร์ตซ์)
  • SRAM: 264 KB (แบ่งเป็นแบงค์)
  • หน่วยความจำ: ไม่มีหน่วยความจำแฟลชในตัว ต้องใช้หน่วยความจำแฟลช QSPI ภายนอก (รองรับสูงสุด 16 MB)
  • GPIO: 30 พิน (4 พินสามารถใช้เป็น ADC ได้)

อินเทอร์เฟซอินพุต/เอาต์พุต

  • 2 × SPI, 2 × I²C, 2 × UART
  • ช่อง PWM 16 ช่อง
  • 8 × PIO (Programmable I/O) สำหรับอุปกรณ์ต่อพ่วงแบบกำหนดเอง
  • USB: USB 1.1 รองรับทั้งโหมด Host และ Device
  • กำลังไฟ: ใช้งานได้ตั้งแต่ 1.8V ถึง 3.3V
  • คุณสมบัติอื่นๆ: ตัวคูณ/ตัวหารฮาร์ดแวร์, หน่วยประมวลผลทศนิยม, ตัวจับเวลาเฝ้าระวัง และนาฬิกาเรียลไทม์ (RTC)

รหัส

รูปที่ 4 แสดงฟังก์ชัน flush ของ LVGL ซึ่งเป็นหนึ่งในฟังก์ชันที่สำคัญที่สุดของ LVGL ที่ผู้เริ่มต้นหลายคนมักประสบปัญหา อ็อบเจ็กต์ “tft” ถูกสร้างขึ้นจากคลาส “TFT_eSPI” เพื่อเขียนฟังก์ชัน “my_disp_flush”:

TFT_eSPI tft = TFT_eSPI(TFT_HOR_RES, TFT_VER_RES);

รูปที่ 4: ฟังก์ชันการล้างของ LVGL-9

รูปที่ 5 แสดงฟังก์ชันสำคัญอีกฟังก์ชันหนึ่งคือ “my_touchpad_read” ซึ่งเป็นฟังก์ชันที่ท้าทายที่สุดในการอ่านเหตุการณ์สัมผัสของ GT911 และรายงานพิกัด (x และ y) ไปยัง LVGL ฟังก์ชัน “Serial.println()” ทั้งสองฟังก์ชันมีไว้เพื่อการดีบัก คุณสามารถคอมเมนต์หรือลบออกได้

รูปที่ 5: ฟังก์ชัน “my_touchpad_read”

รูปที่ 6 แสดงฟังก์ชันการตั้งค่า การเริ่มต้นใช้งาน I²C และ LVGL นั้นชัดเจน รูปที่ 7 แสดงการลงทะเบียนอุปกรณ์อินพุต LVGL และฟังก์ชันที่แนบมาด้วย (LV_INDEV_TYPE_POINTER และ “my_touchpad_read”)

รูปที่ 6: ฟังก์ชัน “setup” ของ Arduino
รูปที่ 7: อุปกรณ์ป้อนข้อมูล LVGL

รูปที่ 8 แสดงการประกาศโค้ด การเริ่มต้นใช้งาน และการกำหนดค่าต่างๆ ได้แก่ ส่วนหัว ที่อยู่ I²C แผนผังขา I²C TFT_eSPI และ LVGL

รูปที่ 8: การเริ่มต้นโค้ด

รูปที่ 9 แสดงฟังก์ชันการอ่านและการเขียน I²C ซึ่งใช้ในการอ่านเหตุการณ์การสัมผัส

รูปที่ 9: ฟังก์ชันการอ่าน/เขียน I²C

การทดสอบ

ฉันได้ทดสอบโค้ดและฮาร์ดแวร์โดยใช้แผงวงจรทดลองและสายไฟ (รูปที่ 10) จอ LCD และหน้าจอสัมผัสทำงานได้อย่างไม่มีปัญหาและราบรื่น

รูปที่ 10: การทดสอบฮาร์ดแวร์และโค้ดบนแผงวงจรทดลอง

งานในอนาคต

โค้ดสามารถปรับใช้กับ RP2350 ได้อย่างง่ายดายโดยไม่ต้องแก้ไขหรือแก้ไขเพียงเล็กน้อย (รูปที่ 11) RP2350 เป็นไมโครคอนโทรลเลอร์รุ่นใหม่จาก Raspberry Pi Ltd. ออกแบบมาเพื่อทดแทน RP2040 ที่ใช้งานกันอย่างแพร่หลาย มันเป็นตัวขับเคลื่อน Raspberry Pi Pico 2 โดยยังคงความเข้ากันได้กับฟอร์มแฟคเตอร์ Pico เดิม ในขณะเดียวกันก็มีการปรับปรุงที่สำคัญหลายอย่าง RP2350 มีโปรเซสเซอร์ ARM Cortex-M0+ แบบ dual-core เช่นเดียวกับ RP2040 แต่เพิ่มความสามารถใหม่ๆ เช่น การเชื่อมต่อไร้สายในตัว หน่วยความจำ SRAM ที่มากขึ้น และศักยภาพในการปรับปรุงประสิทธิภาพการใช้พลังงานและการรวมอุปกรณ์ต่อพ่วง

มาพร้อมกับ SRAM ภายในขนาด 520KB ซึ่งเกือบสองเท่าของ RP2040 และรองรับหน่วยความจำแฟลชหรือ PSRAM ภายนอกได้สูงสุด 16MB ผ่านอินเทอร์เฟซ QSPI เฉพาะ บอร์ด Pico 2 มาตรฐานมีหน่วยความจำแฟลชขนาด 4MB

รูปที่ 11: การเลือก Raspberry Pi Pico 2 ใน Arduino Board Manager

Related articles