如何將GreenWaves GAPuino AI開發板攝像頭顯示於顯示屏

前言

先前已經撰寫過一篇“Greenwaves GAP8 AI晶片開發環境建置(https://www.wpgdadatong.com/blog/detail?BID=B2357)”今天為大家介紹Greenwaves GAPuino對接TFT顯示屏,用於顯示攝像頭的影像,若無顯示器只能將照片存取至電腦,這樣速度非常慢不好做驗證,由於原廠推薦使用Adafruit的TFT顯示屏價格昂貴且不容易購買,所以我們更換使用相同ili9341控制晶片的Seeed TFT顯示屏,本篇為大家介紹如何更換顯示屏。

Seeed 2.8 inch TFT Touch Shield v2.0 接腳接線圖

原廠推薦使用2.8 TFT LCD Shield based on ili9341 controller (https://www.adafruit.com/product/1947) Adafruit可以直接對接於GAPuino開發板上,無需調整接腳即可顯示畫面,但價格昂貴且購買不易,因此我們購買Seeed 2.8 inch TFT Touch Shield v2.0 (https://wiki.seeedstudio.com/2.8inch_TFT_Touch_Shield_v2.0) 做替換

下圖為Seeed 2.8 inch TFT Touch Shield v2.0接腳接線圖

GAPuino接腳修改

針對Seeed 2.8 inch TFT Touch Shield v2.0接腳需要對GAPuino的接腳做重新定義,下圖為LCD TFT接線圖。



修改檔案路徑:rtos → pmsis → pmsis_bsp → include → bsp → gapuino.h

#define CONFIG_ILI9341_SPI_ITF             1
#define CONFIG_ILI9341_SPI_CS 1
#define CONFIG_ILI9341_SPI_CS_PAD PI_PAD_13_B2_RF_PACTRL1
#define CONFIG_ILI9341_SPI_CS_PAD_FUNC PI_PAD_13_B2_SPIM1_CS1_FUNC2
#define CONFIG_ILI9341_GPIO 5
#define CONFIG_ILI9341_GPIO_PAD PI_PAD_17_B40_RF_PACTRL5
#define CONFIG_ILI9341_GPIO_PAD_FUNC PI_PAD_17_B40_GPIO_A5_FUNC1

修改檔案路徑:rtos → pmsis → pmsis_bsp → bsp → gapuino.c

int bsp_pixart_open(struct pi_pixart_conf *conf)
{
__bsp_init_pads();
//PWM(Timer) ch2
pi_pad_set_function(PI_PAD_33_B12_TIMER0_CH2, PI_PAD_33_B12_GPIO_A19_FUNC1);
//PWM(Timer) ch3
pi_pad_set_function(PI_PAD_34_A14_TIMER0_CH3, PI_PAD_34_A14_GPIO_A20_FUNC1);
return 0;
}
void bsp_ili9341_conf_init(struct pi_ili9341_conf *conf)
{
conf->gpio = CONFIG_ILI9341_GPIO;
conf->spi_itf = CONFIG_ILI9341_SPI_ITF;
conf->spi_cs = CONFIG_ILI9341_SPI_CS;

}

int bsp_ili9341_open(struct pi_ili9341_conf *conf)
{
__bsp_init_pads();
pi_pad_set_function(PI_PAD_13_B2_RF_PACTRL1, PI_PAD_13_B2_SPIM1_CS1_FUNC2);
if (!conf->skip_pads_config)
{
pi_pad_set_function(CONFIG_ILI9341_GPIO_PAD, CONFIG_ILI9341_GPIO_PAD_FUNC);
}
return 0;
}

編譯:rtos → pmsis → pmsis_bsp

$ make all

範例程式修改與測試

攝像頭使用PixArt PAJ6100。

測試檔案目錄:~/ ap_sdk/examples/pmsis/bsp/camera/test_camera_pixart。

修改test.c檔案內以下部分:

static pi_buffer_t buffer;
static struct pi_device lcd;
static int32_t open_display(struct pi_device *device)
{
struct pi_ili9341_conf ili_conf;
pi_ili9341_conf_init(&ili_conf);
pi_open_from_conf(device, &ili_conf);
if (pi_display_open(device))
{
printf("Failed to open display\n");
return -1;
}
pi_display_ioctl(&lcd, PI_ILI_IOCTL_ORIENTATION, (void *)PI_ILI_ORIENTATION_270);
return 0;
}

void test_camera_with_lcd(void) 函式底下新增

if (open_display(&lcd))
{
printf("Failed to open display\n");
pmsis_exit(-3);
}
buffer.data = imgBuff0;
buffer.stride = 0;
pi_buffer_init(&buffer, PI_BUFFER_TYPE_L2, imgBuff0);
pi_buffer_set_stride(&buffer, 0);
pi_buffer_set_format(&buffer, CAMERA_WIDTH, CAMERA_HEIGHT, 1, PI_BUFFER_FORMAT_GRAY);

void test_camera_with_lcd(void) 底下while迴圈內最底下修改

// LCD顯示
pi_display_write(&lcd, &buffer, 0, 0, LCD_WIDTH, LCD_HEIGHT);

//儲存照片
// char filename[30];
// sprintf(filename, "../../../pgmfile%d.pgm", index);
// WriteImageToFile(filename, 320, 240, sizeof(uint8_t), imgBuff0, GRAY_SCALE_IO);

修改完成後進行Terminal編譯與執行

$ source ~/gap_sdk/ sourceme.sh
$ 8
$ make clean all run

下圖為執行後,TFT顯示攝像頭拍攝結果

小結

透過以上的教學相信大家了解如何重新定義接腳及編譯,讓你更換顯示屏時可以做調整,不一定需要購買原廠推薦的TFT顯示屏,但必須支援ili9341控制晶片,若無ili9341控制晶片需要自行寫驅動,並且在應用時更換驅動方式才能夠顯示畫面。

 

★博文內容均由個人提供,與平台無關,如有違法或侵權,請與網站管理員聯繫。

★文明上網,請理性發言。內容一周內被舉報5次,發文人進小黑屋喔~

評論