Arduino+ESP32 之 驅動GC9A01圓形LCD(一),基於Arduino_GFX庫


 

最近買了一塊圓形屏幕,驅動IC是GC9A01,自己參考淘寶給的stm32的驅動例程,

在ubuntu下使用IDF開發ESP32,也在windows的vscode內安裝IDF開發ESP32,雖然都做到了能顯示圖片,但是總有一塊暗紫色的偏差陰影,也嘗試了移植LVGL,都遇到了問題。

如上圖,在網上看到有Arduino的一個TFT LCD的驅動庫,已經包含了對該型號屏幕IC的驅動,所以轉戰Arduino環境,來驅動這塊圓形屏幕。

 

1. 下載Arduino_GFX庫

https://github.com/moononournation/Arduino_GFX

下載好該庫后,放置到Arduino的library目錄下,如下圖所示。這是Arduino的庫的默認路徑。

2.Arduino GFX庫測試

Arduino 的library目錄,這個路徑內的項目文件都是只讀的,不便於我們直接打開內部的示例項目燒錄和測試。

將Arduino GFX庫內的example文件夾內的HelloWorld文件夾復制到其他路徑下,我是復制到了桌面上的smart_screen_001文件夾內,然后打開項目工程HelloWorld.ino文件。

修改三處代碼,分別修改DC 以及SPI等腳位,以及RST腳,和背光腳DF_GFX_BL。

上述Arduino+ESP32,驅動GC9A01的源文件:

/******************************************************************************* * Start of Arduino_GFX setting * * Arduino_GFX try to find the settings depends on selected board in Arduino IDE * Or you can define the display dev kit not in the board list * Defalult pin list for non display dev kit: * Arduino Nano, Micro and more: CS: 9, DC: 8, RST: 7, BL: 6 * ESP32 various dev board : CS: 5, DC: 27, RST: 33, BL: 22 * ESP32-C3 various dev board : CS: 7, DC: 2, RST: 1, BL: 3 * ESP32-S2 various dev board : CS: 34, DC: 26, RST: 33, BL: 21 * ESP8266 various dev board : CS: 15, DC: 4, RST: 2, BL: 5 * Raspberry Pi Pico dev board : CS: 17, DC: 27, RST: 26, BL: 28 * RTL8720 BW16 old patch core : CS: 18, DC: 17, RST: 2, BL: 23 * RTL8720_BW16 Official core : CS: 9, DC: 8, RST: 6, BL: 3 * RTL8722 dev board : CS: 18, DC: 17, RST: 22, BL: 23 * RTL8722_mini dev board : CS: 12, DC: 14, RST: 15, BL: 13 * Seeeduino XIAO dev board : CS: 3, DC: 2, RST: 1, BL: 0 * Teensy 4.1 dev board : CS: 39, DC: 41, RST: 40, BL: 22 ******************************************************************************/ #include <Arduino_GFX_Library.h>

/* More dev device declaration: https://github.com/moononournation/Arduino_GFX/wiki/Dev-Device-Declaration */
#if defined(DISPLAY_DEV_KIT) Arduino_GFX *gfx = create_default_Arduino_GFX(); #else /* !defined(DISPLAY_DEV_KIT) */

/* More data bus class: https://github.com/moononournation/Arduino_GFX/wiki/Data-Bus-Class */
#if 0 Arduino_DataBus *bus = create_default_Arduino_DataBus(); #else Arduino_DataBus *bus = new Arduino_ESP32SPI(12 /* DC */, 15 /* CS */, 14 /* SCK */, 13 /* MOSI */, -1 /* MISO */, HSPI /* spi_num */); #endif

/* More display class: https://github.com/moononournation/Arduino_GFX/wiki/Display-Class */
#if 0 Arduino_GFX *gfx = new Arduino_ILI9341(bus, DF_GFX_RST, 0 /* rotation */, false /* IPS */); #else Arduino_GFX *gfx = new Arduino_GC9A01(bus, 2 /* RST */, 0 /* rotation */, true /* IPS */); #endif

#endif /* !defined(DISPLAY_DEV_KIT) */
/******************************************************************************* * End of Arduino_GFX setting ******************************************************************************/
#define DF_GFX_BL  16

void setup(void) { gfx->begin(); gfx->fillScreen(BLACK); #ifdef DF_GFX_BL pinMode(DF_GFX_BL, OUTPUT); digitalWrite(DF_GFX_BL, HIGH); #endif gfx->setCursor(10, 10); gfx->setTextColor(RED); gfx->println("Hello World!"); delay(5000); // 5 seconds
} void loop() { gfx->setCursor(random(gfx->width()), random(gfx->height())); gfx->setTextColor(random(0xffff), random(0xffff)); gfx->setTextSize(random(6) /* x scale */, random(6) /* y scale */, random(2) /* pixel_margin */); gfx->println("Hello World!"); delay(1000); // 1 second
}

實驗現象:

隨機彈出了很多不同大小,不同色彩的Hello world,符合示例代碼的實現。

這樣,Arduino_GFX庫就順利移植好了。

 

 

.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM