/*
ESP32-ILI9341_01.ino
ESP32 HTTPClient Jokes API Example
https://wokwi.com/projects/342032431249883731
Copyright (C) 2022, Uri Shaked
*/
#include "SPI.h"
#include <Adafruit_GFX.h>
#include <Adafruit_ILI9341.h>
/*
SPI DEFAULT:
MOSI: 23
MISO: 19
SCK: 18
SS: 5
*/
// ************************************************************************
// Setup42_ILI9341_ESP32.h --> Hardware-specific setup file
// See SetupX_Template.h for all options available
#define USER_SETUP_ID 42
#define ILI9341_DRIVER
#define TFT_MISO 19 // (leave TFT SDO disconnected if other SPI devices share MISO)
#define TFT_MOSI 23
#define TFT_SCLK 18
#define TFT_CS 15 // Chip select control pin
#define TFT_DC 2 // Data Command control pin
#define TFT_RST 4 // Reset pin (could connect to RST pin)
// Optional touch screen chip select
//#define TOUCH_CS 5 // Chip select pin (T_CS) of touch screen
#define LOAD_GLCD // Font 1. Original Adafruit 8 pixel font needs ~1820 bytes in FLASH
#define LOAD_FONT2 // Font 2. Small 16 pixel high font, needs ~3534 bytes in FLASH, 96 characters
#define LOAD_FONT4 // Font 4. Medium 26 pixel high font, needs ~5848 bytes in FLASH, 96 characters
#define LOAD_FONT6 // Font 6. Large 48 pixel font, needs ~2666 bytes in FLASH, only characters 1234567890:-.apm
#define LOAD_FONT7 // Font 7. 7 segment 48 pixel font, needs ~2438 bytes in FLASH, only characters 1234567890:.
#define LOAD_FONT8 // Font 8. Large 75 pixel font needs ~3256 bytes in FLASH, only characters 1234567890:-.
#define LOAD_GFXFF // FreeFonts. Include access to the 48 Adafruit_GFX free fonts FF1 to FF48 and custom fonts
#define SMOOTH_FONT
// TFT SPI clock frequency
// #define SPI_FREQUENCY 20000000
// #define SPI_FREQUENCY 27000000
#define SPI_FREQUENCY 40000000
// #define SPI_FREQUENCY 80000000
// Optional reduced SPI frequency for reading TFT
#define SPI_READ_FREQUENCY 16000000
// SPI clock frequency for touch controller
#define SPI_TOUCH_FREQUENCY 2500000
//
// Setup42_ILI9341_ESP32.h --> Hardware-specific setup file
// ************************************************************************
#define BTN_PIN 5
// Use hardware SPI (on Uno, #13, #12, #11) and the above for CS/DC
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC);
// If using the breakout, change pins as desired
//Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_MOSI, TFT_CLK, TFT_RST, TFT_MISO);
unsigned long testRects(uint16_t color) {
unsigned long start;
int n, i, i2,
cx = tft.width() / 2,
cy = tft.height() / 2;
tft.fillScreen(ILI9341_BLACK);
n = min(tft.width(), tft.height());
start = micros();
for(i=2; i<n; i+=6) {
i2 = i / 2;
tft.drawRect(cx-i2, cy-i2, i, i, color);
}
return micros() - start;
}
unsigned long testFilledRects(uint16_t color1, uint16_t color2) {
unsigned long start, t = 0;
int n, i, i2,
cx = tft.width() / 2 - 1,
cy = tft.height() / 2 - 1;
tft.fillScreen(ILI9341_BLACK);
n = min(tft.width(), tft.height());
for(i=n; i>0; i-=6) {
i2 = i / 2;
start = micros();
tft.fillRect(cx-i2, cy-i2, i, i, color1);
t += micros() - start;
// Outlines are not included in timing results
tft.drawRect(cx-i2, cy-i2, i, i, color2);
yield();
}
return t;
}
void setup() {
Serial.begin(115200);
pinMode(BTN_PIN, INPUT_PULLUP);
Serial.print("MOSI on GPIO"); Serial.println(MOSI);
Serial.print("MISO on GPIO"); Serial.println(MISO);
Serial.print("SCK on GPIO"); Serial.println(SCK);
Serial.print("SS on GPIO"); Serial.println(SS);
tft.begin();
tft.fillScreen(ILI9341_RED);
delay(500);
tft.fillScreen(ILI9341_GREEN);
delay(500);
tft.fillScreen(ILI9341_BLUE);
delay(500);
/*
tft.fillScreen(ILI9341_BLACK);
delay(500);
Serial.print(F("Rectangles (outline) "));
Serial.println(testRects(ILI9341_GREEN));
delay(500);
Serial.print(F("Rectangles (filled) "));
Serial.println(testFilledRects(ILI9341_YELLOW, ILI9341_MAGENTA));
delay(500);
tft.fillScreen(ILI9341_BLACK);
delay(500);
tft.setCursor(26, 120);
tft.setTextColor(ILI9341_RED);
tft.setTextSize(3);
tft.println("Hello, TFT!");
*/
//tft.setCursor(20, 160);
// STANDARD HOR.text (landscape)
tft.setRotation(1); // (HOR.text: L to R, Origin=TOP-L-)
tft.setCursor(5, 120);
//
tft.setTextColor(ILI9341_GREEN);
tft.setTextSize(2);
tft.println("Can you press the button?");
delay(2000);
}
void loop() {
static bool flip = false;
if (digitalRead(BTN_PIN) == LOW) {
flip = (! flip);
if (flip) {
tft.fillScreen(ILI9341_BLUE);
tft.setCursor(20, 160);
tft.setTextColor(ILI9341_YELLOW);
tft.setTextSize(2);
// STANDARD HOR.text (landscape)
tft.setRotation(1); // (HOR.text: L to R, Origin=TOP-L-)
tft.setCursor(5, 120);
tft.println("I write with colors.");
} else {
tft.fillScreen(ILI9341_BLACK);
} // if-else
//
tft.setCursor(0, 0);
flip = (! flip);
delay(1000);
tft.fillScreen(ILI9341_BLACK);
} // if
//
delay(100);
//
}