PART1 RP2040-2x GC9A01 Display on Shared SPI

by egocen in Circuits > Arduino

96 Views, 1 Favorites, 0 Comments

PART1 RP2040-2x GC9A01 Display on Shared SPI

Ekran görüntüsü 2025-02-20 000701.png

This demo project using RP2040-Zero and two GC9A01 displays focuses on sending different images to each screen. By leveraging the shared use of the SPI port, both displays are connected to the RP2040-Zero, allowing efficient communication. After establishing the connections, different data is sent to each screen using the appropriate code. This allows you to display time and date information on one screen, while showing colorful graphics or animations on the other. This project is an impressive example that highlights the flexibility and power of RP2040-Zero and the efficiency of using a shared SPI port.

Supplies

gc9a01.jpg
rp2040.jpg

RP2040-Zero

2 x GC9A01 Display

Connection Schematics

Ekran görüntüsü 2025-02-21 112739.png

If you want to see the same image on both screens, it is enough to use all 3 pins in common.

But we want to display different images on two screen CS and DC pins must connect to different GPIOs.


GPIO connection:

1st DC to IO8, CS to IO9, SCK to IO10 (Shared), MOSI to IO11 (Shared)

2nd DC to IO12, CS to IO14, SCK to IO10 (Shared), MOSI to IO11 (Shared)

in the code section:

Arduino_DataBus *bus = new Arduino_RPiPicoSPI(8 /* DC */, 9 /* CS */, 10 /* SCK */, 11 /* MOSI */, 12 /* MISO */, spi1 /* spi */);

Arduino_GFX *gfx = new Arduino_GC9A01(bus, 28 /* RST */, 0 /* rotation */, true /* IPS */, 240 /* width */, 240 /* height */);


//Second display

Arduino_DataBus *bus2 = new Arduino_RPiPicoSPI(12 /* DC */, 14 /* CS */, 10 /* SCK */, 11 /* MOSI */, 17 /* MISO */, spi1 /* spi */);

Arduino_GFX *gfx2 = new Arduino_GC9A01(bus2, 29 /* RST */, 0 /* rotation */, true /* IPS */, 240 /* width */, 240 /* height */);


/* More dev device declaration: https://github.com/moononournation/Arduino_GFX/wiki/Dev-Device-Declaration */

Ardunio Code

Sent different data to 2 screen:

That code sent 1st screen to random size "Hello!" and 2nd screen to random sized "merhaba!"


/*******************************************************************************

* 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, SCK: 13, MOSI: 11, MISO: 12

* ESP32 various dev board : CS: 5, DC: 27, RST: 33, BL: 22, SCK: 18, MOSI: 23, MISO: nil

* ESP32-C3 various dev board : CS: 7, DC: 2, RST: 1, BL: 3, SCK: 4, MOSI: 6, MISO: nil

* ESP32-S2 various dev board : CS: 34, DC: 38, RST: 33, BL: 21, SCK: 36, MOSI: 35, MISO: nil

* ESP32-S3 various dev board : CS: 40, DC: 41, RST: 42, BL: 48, SCK: 36, MOSI: 35, MISO: nil

* ESP8266 various dev board : CS: 15, DC: 4, RST: 2, BL: 5, SCK: 14, MOSI: 13, MISO: 12

* Raspberry Pi Pico dev board : CS: 17, DC: 27, RST: 26, BL: 28, SCK: 18, MOSI: 19, MISO: 16

* RTL8720 BW16 old patch core : CS: 18, DC: 17, RST: 2, BL: 23, SCK: 19, MOSI: 21, MISO: 20

* RTL8720_BW16 Official core : CS: 9, DC: 8, RST: 6, BL: 3, SCK: 10, MOSI: 12, MISO: 11

* RTL8722 dev board : CS: 18, DC: 17, RST: 22, BL: 23, SCK: 13, MOSI: 11, MISO: 12

* RTL8722_mini dev board : CS: 12, DC: 14, RST: 15, BL: 13, SCK: 11, MOSI: 9, MISO: 10

* Seeeduino XIAO dev board : CS: 3, DC: 2, RST: 1, BL: 0, SCK: 8, MOSI: 10, MISO: 9

* Teensy 4.1 dev board : CS: 39, DC: 41, RST: 40, BL: 22, SCK: 13, MOSI: 11, MISO: 12

******************************************************************************/

#include <Arduino_GFX_Library.h>

#include <Arduino.h>

#include "hardware/adc.h"



Arduino_DataBus *bus = new Arduino_RPiPicoSPI(8 /* DC */, 9 /* CS */, 10 /* SCK */, 11 /* MOSI */, 12 /* MISO */, spi1 /* spi */);

Arduino_GFX *gfx = new Arduino_GC9A01(bus, 28 /* RST */, 0 /* rotation */, true /* IPS */, 240 /* width */, 240 /* height */);


// İkinci ekran tanımlamaları

Arduino_DataBus *bus2 = new Arduino_RPiPicoSPI(12 /* DC */, 14 /* CS */, 10 /* SCK */, 11 /* MOSI */, 17 /* MISO */, spi1 /* spi */);

Arduino_GFX *gfx2 = new Arduino_GC9A01(bus2, 29 /* RST */, 0 /* rotation */, true /* IPS */, 240 /* width */, 240 /* height */);


/* More dev device declaration: https://github.com/moononournation/Arduino_GFX/wiki/Dev-Device-Declaration */


/*******************************************************************************

* End of Arduino_GFX setting

******************************************************************************/


void setup(void)

{

#ifdef DEV_DEVICE_INIT

DEV_DEVICE_INIT();

#endif




// Init Display

if (!gfx->begin())

{

Serial.println("gfx->begin() failed!");

}

if (!gfx2->begin())

{

Serial.println("gfx2->begin() failed!");

}

gfx->fillScreen(RGB565_BLACK);

gfx2->fillScreen(RGB565_BLACK);


#ifdef GFX_BL

pinMode(GFX_BL, OUTPUT);

digitalWrite(GFX_BL, HIGH);

#endif


gfx->setCursor(20, 20);

gfx->setTextColor(RGB565_BLACK);

gfx->println("Hello World!");




gfx2->setCursor(25, 25);

gfx2->setTextColor(RGB565_BLACK);

gfx2->println("Merhaba Dunya!");

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("Helloo!");



gfx2->setCursor(random(gfx2->width()), random(gfx2->height()));

gfx2->setTextColor(random(0xffff), random(0xffff));

gfx2->setTextSize(random(6) /* x scale */, random(6) /* y scale */, random(2) /* pixel_margin */);

gfx2->println("Merhaba!");


delay(2000);

}