ใช้งาน ESPino32 กับ Library TFT_eSPI

การใช้งาน ESPino32 กับจอ TFT LCD โดยใช้ Library TFT_eSPI

        บทความนี้จะพูดถึงการใช้งานบอร์ด ESPino32 หรือ บอร์ดอื่นๆที่ใช้ ESP32 เป็นตัวประมวลผลหลัก เชื่อมต่อกับจอ TFT LCD เพื่อแสดงผล และ ใช้เป็น User Interface โดยใช้ Library TFT_eSPI 

Libraly TFT_eSPI

        TFT_eSPI คือ Library สำหรับเชื่อมต่อกับจอ TFT LCD ผ่านทาง พอร์ดอนุกรม SPI และ พอร์ตขนาน(parallel) โดยที่ ผู้พัฒนา TFT_eSPI (https://github.com/Bodmer/TFT_eSPI) ได้เขียน Library ให้สามารถรองรับการใช้งานของจอ TFT LCD ในหลายๆรุ่นเช่น ILI9341, ST7735, ST7789, ILI9488 และ รองรับการใช้งาน Touch Screen Controller เบอร์ XPT2046 เป็นต้น ทำให้ผู้ใช้งานสามารถเลือกใช้กับจอ LCD ได้หลากหลายโดยไม่ต้องติดตั้ง Library และ รูปแบบคำสั่งใหม่ เมื่อต้องใช้งานกับจออื่นที่ TFT_eSPI support

เริ่มต้นการใช้งาน

1 สำหรับผู้ที่ยังไม่เคยใช้ หรือ พึ่งเริ่มต้นใช้งาน ESPIno32 บน Platform Arduino แนะนำให้ติดตั้งให้พร้อมใช้งานก่อน โดยศึกษาได้จาก บทความ ESPino32

2 ติดตั้ง Library  TFT_eSPI 

– Download TFT_eSPI จาก https://github.com/Bodmer/TFT_eSPI

1 คลิก Clone or download

2 คลิก Download ZIP

3 เปิด Arduino IDE ไปที่เมนู Sketch > Include Library > Add .ZIP Library…

4 Browse File  ไปที่  TFT_eSPI-master.zip ที่ Download มาจาก Github แล้วกด Open

5 ตรวจเช็คว่า สามารถ ติดตั้ง Library ได้สำเร็จแล้ว โดยไปที่ เมนู File > Examples  จะปรากฎ ตัวอย่างการใช้งานของ Library TFT_eSPI ขึ้นมา

วิธีตั้งค่า TFT_eSPI เพื่อใช้งานกับ  จอ 3.5inch RPi LCD (B)

        ในการทดลองนี้เราจะยกตัวอย่างการใช้งานกับ จอ 3.5inch RPi LCD (B), 320×480, IPS with Resistive Touch (Rev 2.0) รหัส EFDV688

จอ 3.5inch RPi LCD ออกแบบมาให้ใช้กับ บอร์ด Raspberry PI ซึ่งใช้ ชิพ LCD control เบอร์ ILI9486 ซึ่งใช้การเชื่อมต่อกับ แบบ Parallel แต่ผู้ผลิตได้เพิ่มเติมวงจรแปลงให้เปลี่ยนการเชื่อมต่อเป็นแบบ SPI ทำให้ใช้จำนวน pin ในการเชื่อมต่อน้อยลง และ สามารถใช้งานร่วมกับ ESP32 ได้เช่นกัน 

– ตั้งค่า Library ให้ใช้งานร่วมกับ เข้าไปยัง Folder Library ของ Arduino IDE ที่เก็บ Library  TFT_eSPI ที่ถูกติดตั้งเสร็จแล้วภายใน Arduino IDE ซึ่งโดยมากจะอยู่ใน

Path  C:\Users\[ชื่อ User ของเรา]\Documents\Arduino\libraries  หรือ ตรวจเช็ค Path ได้โดยเปิด Arduino IDE เข้าไปที่ File > Preferences > Sketchbook location.

 – เมื่อเข้าไปยัง Folder libraries\TFT_eSPI-master  แล้วให้เปิด File User_Setup.h ขึ้นมา และแก้ไข ค่าไฟล์ตามการใช้งานจอในรุ่นที่ใช้งานดังนี้

– Section 1. Call up the right driver file and any options for it

เลือก Driver ตามรุ่นของจอที่ใช้ บรรทัดที่ 18-31

– Comment บรรทัดที่รุ่นของจอที่ไม่ได้ใช้

– Uncomment รุ่นของจอที่ใช้งาน ในที่นี้จอ  3.5inch RPi LCD (B) จะตรงกับ บรรทัดที่ 23 >   #define RPI_ILI9486_DRIVER

– ตั้งค่า Invert ค่าสี ที่บรรทัดที่ 77-78 ในกรณีที่สีกลับกันเช่น สั่งให้เป็นสีขาวแต่จอแสดงผลเป็นสีดำ

– Section 2. Define the pins that are used to interface with the display here

ตั้งค่า Pin ที่ใช้เชื่อมตอระหว่าง Microcontroller กับ จอ LCD ซึ่งในส่วนนี้มีส่วนที่ให้เลือก Define ทั้งของ ESP8266 และ ESP32 แต่ในการทดลองใช้งานนี้เราจะใช้กับ ESP32 ซึ่งการตั้งค่าในส่วนของ ESP32 จะเริ่มต้นที่ บรรทัดที่ 157

– Uncomment บรรทัดที่ 160-165 ซึ่งเป็นการกำหนดขาที่ใช้เชื่อมต่อ SPI (ผู้ใช้สามารถ เปลี่ยนแปลงแก้ไข Pin สำหรับเชื่อมต่อตามความเหมาะสมของผู้ใช้งานได้ที่จุดนี้)

– Uncomment บรรทัดที่ 170 เพื่อกำหนดค่า Pin CS ของ Touch Screen และ เปลี่ยนเป็น Pin 17 (เนื่องจาก Pin 21,22 อาจใช้เชื่อมต่อกับโมดูลอื่นที่เป็น I2C ในอนาคค)

– Section 3. Define the fonts that are to be used here

กำหนดเลือก Font เข้ามาใช้งานโดยการ Uncomment หน้า Define ชื่อ Font ที่ต้องการใช้งาน และ Comment หน้า Define ชื่อ Font ที่ไม่ไต้องการใช้งาน

     ในการทดลองนี้จะไม่ได้ปรับแก้ Comment หรือ Uncomment อะไร  

– Section 4. Other options

การปรับค่า Option อื่น เช่น ความ SPI Clock ที่ใช้จ่ายให้กับจอ LCD ซึ่ง Default แล้วจะถูกตั้งค่าไว้ที่ 27000000 hz จากการทดลองในบางจอสามารถ ปรับเพิ่ม และลดลงได้ตามความเหมาะสม โดย ค่า SPI_FREQUENCY มีค่ามากขึ้นก็จะยิ่งทำให้ จอ LCD สามารถแสดงผลได้เร็วมากยิ่งขึ้นแต่สำหรับการทดลองนี้ ที่นี้จอ  3.5inch RPi LCD (B)  

ในบรรทัดที่ 23 #define RPI_ILI9486_DRIVER // 20MHz maximum SPI  

ได้มีการแนะนำเอาไว้ต่อท้ายเอาไว้ว่า สามารถใช้ SPI Clock ได้สูงสุดเพียง 20MHz เท่านั้น ในส่วนนี้เราจึงต้องปรับลง เหลือ 20000000 Hz

3.5inch RPi LCD (B)  Interface Pin

การเชื่อมต่อ 3.5inch RPi LCD (B)   กับ ESPIno32

การเชื่อมต่ออ้างอิง จากการ File User_Setup.h ใน Section 2. Define the pins that are used to interface with the display here ที่ได้กำหนดเอาไว้

ทดลอง โปรแกรมตัวอย่าง

เปิดโปรแกรม Arduino > File>Examples > TFT_eSPI > 480×320 > UTFT_Demo_480x320 และ Flash Program ลงบนบอร์ด