Board TTGO T-Display
เป็นรุ่นยอดนิยมตัวหนึ่ง ในไทยใช้กันเยอะแล้วเพราะราคาไม่แพง และมียี่ห้อสำหรับบอร์ดรุ่นนี้ต้องบัดกรีขาเองซึ่งมีมาให้มาให้ เวลาใส่ขาจะมีด้านหนึ่งใส่ไม่สนิดเพราะติดชิปบนบอร์ดนิดหนึ่ง ต้องใช้คัดเตอร์บากบางๆที่พลาสติกฐานของขาให้แหว่งนิดหน่อยจะได้ลงพอดี บอร์ดแคบเวลาต่อบอร์ดทดลองจะหลือช่องซ้ายขวาข้างละหนึ่งแถว จุดเด่นของรุ่นนี้คือ
- มี จอ IPS ขนาด 1.4 นิ้ว 135x240 พิกเซล ต่อแบบ SPI
- สามารถต่อแบ็ตเตอรี่ 3.7v สามารถชาร์ตได้ในตัว
- มีปุ่มให้ใช้สองปุ่ม
ฟังก์ชันที่มีเหมาะกับการทำอุปกรณ์แบบพกพาโดยไม่ต้องติดตั้งอุปกรณ์เพิ่ม ซึ่งลดต้นทุนได้มาก บอร์ดขนาดเล็กขาไม่เยอะ การใช้งานทั่วไปเหมือนกับ ESP32 ที่ต้องทำเพิ่มคือไดร์เวอร์หน้าจอ ซึ่งวิธีการมีการอัปเดตบ่อยอยู่เหมือนกัน ตั้งแต่เขียนบทความนี้ก็อัปเดตไปสองครั้งแล้ว ควรไปติดตามเวปหลักอีกทีด้วยให้ไปดูที่นี้
ทดสอบปุ่ม
บอร์ดนี้เป็นอีกตัวของ TTGO ที่ไม่มีให้เลือกตรงๆจาก Arduino IDE เวลาใช้งานให้เลือกบอร์ดเป็น ESP32 Dev Module เนื่องจากไม่มีหลอด LED ในตัวเลยใช้โปรแกรม Blink ทดสอบไม่ได้ ลองทดสอบด้วยโปรแกรม DigitalReadSerial แต่ต้องแก้ค่าปุ่มไปใช้ปุ่ม 0 หรือ 35 บนบอร์ดก็ได้ เปิดดูสถานะการกดปุ่มที่ Tools/Serial Monitor หรือ Tools/Serial Ploter เพื่อดูสถานะการกดปุ่ม (อย่าลืมตั้งค่าให้เป็น 9600 baud) ค่าที่อ่านได้จากปุ่ม1 ปล่อยปุ่ม
0 กดปุ่ม
int pushButton = 35; void setup() { Serial.begin(9600); pinMode(pushButton, INPUT); } void loop() { int buttonState = digitalRead(pushButton); Serial.println(buttonState); delay(1); }
![]() |
DigitalReadSerial แสดงใน Serial Plotter |
![]() |
DigitalReadSerial 2ปุ่ม แสดงใน Serial Plotter |
ทดสอบหน้าจอ
ต้องติดตั้งไลบารี่ TFT_eSPI เดิมต้องไปแก้โค้ดของไลบารี่ ในเวปอัปเดตล่าสุดให้ดาว์นโหลดมาไว้ในเครื่องและแตกไฟล์ออก ที่ Arduino IDE ให้เลือก Sketch/Include Library/Add Zip Library ให้เลือกไปที่โฟลเดอร์ TTGO-T-Display-master/TFT_eSPI ก็จะมี TFT_eSPI แค่นี้ก็ใช้หน้าจอได้แล้ว สามารถศึกษาจากตัวอย่างที่อยู่ใน Example ได้ ลองตัวอย่างง่ายๆกันก่อน จะเขียนคำว่า Hello ในขนาดต่างๆ (จอแนวตั้ง)1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | // ตัวอย่างอย่างง่ายในการเขียนตัวหนังสือบนหน้าจอ และใช้ปุ่มปิดเปิด Black light // ใช้ได้เฉพาะESP32 TTGO T-Display #include <TFT_eSPI.h> #include <SPI.h> #define ON_OFF_BT 35 //ปุ่มดับจอ TFT_eSPI tft = TFT_eSPI(); //จะใช้แบบนี้ก็ได้ TFT_eSPI(135, 240) void setup() { pinMode(TFT_BL, OUTPUT); // TFT_BL จะอยู่ GPIO4 pinMode(ON_OFF_BT, INPUT); // ปุ่มอยู่ GPIO35 tft.init(); } void loop() { tft.setCursor(0, 0, 2); //จุดเริ่มเขียน tft.fillScreen(TFT_RED); //ลงพื้นสีแดง tft.setTextColor(TFT_BLACK); //ตัวหนังสือดำ พื้นใส for(int i=1;i<8;i++) { tft.setTextSize(i); tft.println("Hello"); //พิมพ์เสร็๗ขึ้นใหม่จุดเริ่มจะไปอยู่ต้นบรรทัดใหม่ digitalWrite(TFT_BL, digitalRead(ON_OFF_BT)); //กดปุ่มเพื่อดับจอ delay(2000); } } |
ลองไปดูตัวอย่างที่ Examples/TFT_eSPI/160x128 จะลองเลือกตัวอย่างอื่นๆก็ได้แต่อาจจะล้นจอ
ด้านล่างเป็นตัวอย่างการเขียนตัวหนังสือด้วยวิธีต่างๆ และการวาดสามเหลี่ยมสี่เหลี่ยม วงกลม
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | //ตัวอย่างการเขียนหน้าจอของ T-Display #include <TFT_eSPI.h> // ค่าต่างๆกำหนดในไฟล์นี้ลองไปอ่านดูได้ #include <SPI.h> TFT_eSPI tft = TFT_eSPI(); // T-Display 135x240pixel int black_light = HIGH; // black light state void setup() { tft.init(); // -- Display tft.setRotation(1); //fillRect(x,y,width,hight,color) tft.fillRect(2,2,200,84,TFT_WHITE); tft.drawRect(2, 2, 238, 133, TFT_YELLOW); tft.fillScreen(TFT_RED); tft.setTextColor(TFT_BLACK); //ตัวอักษรดำพื้นใส //TL_DATUM=Top left(default), TC_DATUM 1=Top centre,TR_DATUM 2=Top right //drawString(String,x,y,font) tft.setTextDatum(TR_DATUM);//Right ใช้คู่กับ drawString() tft.drawString("Right",120,3,2); tft.setTextDatum(TL_DATUM);//Left tft.drawString("Left",120,13,2); tft.setTextDatum(TC_DATUM);//Center tft.drawString("Center",120,23,2); //setCursor(x, y, font) กำหนดพิกัดที่จะเขียน tft.setCursor(20, 30); tft.setTextFont(2); tft.setTextColor(TFT_RED,TFT_BLACK);//ตัวหนังสือแดงพื้นดำ tft.print("Hello ");//พิมพ์แบบไม่ขึ้นบรรทัดใหม่ tft.println("IT "); // พิมพ์แล้วขึ้นบรรทัดใหม่ //ถ้าใช้ setTextSize(size)จะเพิ่มขนาดตัวอักษรแบบซูมเข้าไป(ขอบหยัก)ขนาดปรกติเป็น 1 tft.setTextFont(4); //ตัวอักษรรูปแบบ 4 tft.println("Student");// พิมพ์แล้วขึ้นบรรทัดใหม่ tft.setCursor(3, 28, 4); tft.fillCircle(170,67, 20, TFT_OLIVE); tft.drawCircle(170,67, 15, TFT_ORANGE); tft.drawRoundRect(170,10, 40,30,4, TFT_PURPLE); //drawChar(x,y,char,color,blackground,size) tft.drawChar(120,70, 'A', TFT_BLUE, TFT_MAGENTA, 4); tft.fillTriangle(50, 100, 100, 130, 20, 115, TFT_CYAN); tft.drawLine(0, 135, 240, 0, TFT_BLUE); } void loop() { } |
ทดสอบตัวตัวอย่างที่มากับบอร์ด Factory Test
แต่เดิมต้อง ติดตั้ง Button2 ก่อน แต่ตัวอย่างใหม่จะรวม Button2.cpp Button2.h เอาไว้ใน Sketch ที่เหลือก็ต้องไปอ่านคู่มือของการใช้ TFT_eSPI ว่าทำอะไรได้บ้าง
ภาพที่แสดงบนหน้าจอจะเป็นไฟล์ภาพที่แปลงเป็นโค้ดโปรแกรมแล้ว อยู่ในไฟล์ bitmap.h ถ้าอยากลองเปลี่ยนรูปของโปรแกรมทดสอบก็ต้องสร้างไฟล์ bmp.h จากภาพขนาด 240x135 พิกเซล ผมไปเจอรูปลูกชายตอนเด็กๆ เอาเข้าโปรแกรม paint บนวินโดว์แล้วปรับขนาด ผมเซฟเป็นไฟล์ oom.png
ต่อไปจะทำการแปลงภาพให้กลายเป็นโค้ดโปรแกรมไปที่เวป http://www.rinkydinkelectronics.com/t_imageconverter565.php กดปุ่ม Choose File เลือกเป็น .c แล้วกด Make file เราจะได้ไฟล์ oom.c ให้ดาว์นโหลด
แก้ชื่อไฟล์เป็น bmp.h แล้วเปิดดูบรรทัดที่ 16 แก้คำว่า oom เป็น ttgo เพราะโปรแกรมตัวอย่างอ้างถึงตัวแปรนี้ จริงๆแล้วตอนแปลงไฟล์ถ้าใช้ไฟล์ชื่อ ttgo.png ก็ไม่ต้องแก้ตรงนี้
const unsigned short oom[32400] PROGMEM={
อัปโหลดโปรแกรมใหม่ก็จะได้ภาพขึ้นจอแล้ว โปรแกรมดูซับซ้อนไปหน่อยสำหรับมือใหม่ ผมตัดเอาเฉพาะโค้ดแสดงภาพกับตัวหนังสือจะได้เข้าใจง่าย เอาไฟล์ bmp.h ไว้ในโฟลเดอร์เดียวกัโปรเจ็กไฟล์แล้วเปิดใหม่ Arduino IDE
#include <TFT_eSPI.h> #include <SPI.h> #include "bmp.h" #define TFT_BL 4 // Display backlight control pin TFT_eSPI tft = TFT_eSPI(135, 240); // Invoke custom library void setup() { tft.init(); tft.setRotation(1); tft.setSwapBytes(true); tft.setTextDatum(MC_DATUM); tft.setTextSize(3); tft.setTextColor(TFT_WHITE, TFT_BLACK); } void loop() { tft.pushImage(0, 0, 240, 135, oom); delay(5000); tft.fillScreen(TFT_RED); delay(5000); tft.fillScreen(TFT_GREEN); tft.setTextColor(TFT_YELLOW, TFT_GREEN); tft.drawString("Hello Green", tft.width() / 2, tft.height() / 2 ); delay(5000); tft.fillScreen(TFT_BLUE); delay(5000); tft.fillScreen(TFT_BLACK); tft.setTextColor(TFT_WHITE, TFT_BLACK); tft.drawString("Hello Black", tft.width() / 2, tft.height() / 2 ); delay(5000); }
ไม่มีความคิดเห็น:
แสดงความคิดเห็น