Hello everyone,
I have a piece of code for refreshing a 7.3-inch seven-color e-paper display using an ESP32S3. The code works perfectly when using the Arduino IDE, but when I switch to PlatformIO, although there is output, the e-paper display does not respond at all. I have already tried using the same SDK version for both environments.
Below is my code:
#include <Arduino.h>
#include <SPI.h>
#include <stdint.h>
const int PIN_EPD_BUSY = 9;
const int PIN_EPD_RESET = 10;
const int PIN_EPD_DC = 11;
const int PIN_EPD_CS = 12;
const int PIN_EPD_SCK = 13;
const int PIN_EPD_MOSI = 14;
const int PIN_EPD_MISO = -1;
constexpr int display_width = 800;
constexpr int display_height = 480;
enum class Colour : uint8_t {
BLACK = 0x0, // 000
WHITE = 0x1, // 001
GREEN = 0x2, // 010
BLUE = 0x3, // 011
RED = 0x4, // 100
YELLOW = 0x5, // 101
ORANGE = 0x6, // 110
CLEAN = 0x7 // 111 - unavailable
};
void epdreset() {
digitalWrite(PIN_EPD_RESET, HIGH);
delay(20);
digitalWrite(PIN_EPD_RESET, LOW);
delay(2);
digitalWrite(PIN_EPD_RESET, HIGH);
delay(20);
}
void busyHigh() {
int count = 0;
while (!digitalRead(PIN_EPD_BUSY)) {
delay(10);
count++;
if (count > 5000) {
return;
}
}
}
void sendCommand(unsigned char command) {
digitalWrite(PIN_EPD_DC, LOW);
digitalWrite(PIN_EPD_CS, LOW);
SPI.transfer(command);
digitalWrite(PIN_EPD_CS, HIGH);
}
void sendData(uint8_t data) {
digitalWrite(PIN_EPD_DC, HIGH);
digitalWrite(PIN_EPD_CS, LOW);
SPI.transfer(data);
digitalWrite(PIN_EPD_CS, HIGH);
}
void epdinit() {
Serial.print("\treset\r\n");
epdreset();
Serial.print("\treset ok\r\n");
busyHigh();
Serial.print("\t buyshigh ok\r\n");
delay(30);
sendCommand(0xAA); // CMDH
sendData(0x49);
sendData(0x55);
sendData(0x20);
sendData(0x08);
sendData(0x09);
sendData(0x18);
sendCommand(0x01);
sendData(0x3F);
sendData(0x00);
sendData(0x32);
sendData(0x2A);
sendData(0x0E);
sendData(0x2A);
sendCommand(0x00);
sendData(0x5F);
sendData(0x69);
sendCommand(0x03);
sendData(0x00);
sendData(0x54);
sendData(0x00);
sendData(0x44);
sendCommand(0x05);
sendData(0x40);
sendData(0x1F);
sendData(0x1F);
sendData(0x2C);
sendCommand(0x06);
sendData(0x6F);
sendData(0x1F);
sendData(0x1F);
sendData(0x22);
sendCommand(0x08);
sendData(0x6F);
sendData(0x1F);
sendData(0x1F);
sendData(0x22);
sendCommand(0x13); // IPC
sendData(0x00);
sendData(0x04);
sendCommand(0x30);
sendData(0x3C);
sendCommand(0x41); // TSE
sendData(0x00);
sendCommand(0x50);
sendData(0x3F);
sendCommand(0x60);
sendData(0x02);
sendData(0x00);
sendCommand(0x61);
sendData(0x03);
sendData(0x20);
sendData(0x01);
sendData(0xE0);
sendCommand(0x82);
sendData(0x1E);
sendCommand(0x84);
sendData(0x00);
sendCommand(0x86); // AGID
sendData(0x00);
sendCommand(0xE3);
sendData(0x2F);
sendCommand(0xE0); // CCSET
sendData(0x00);
sendCommand(0xE6); // TSSET
sendData(0x00);
Serial.print("\t init ok\r\n");
sendCommand(0x04);
busyHigh();
}
void turnOnDisplay() {
sendCommand(0x04); // POWER_ON
busyHigh();
sendCommand(0x12); // DISPLAY_REFRESH
sendData(0x00);
busyHigh();
sendCommand(0x02); // POWER_OFF
sendData(0x00);
busyHigh();
}
void clear(Colour colour) {
uint16_t width = (display_width % 2 == 0) ? (display_width / 2) : (display_width / 2 + 1);
uint8_t colourValue = static_cast<uint8_t>(colour);
sendCommand(0x10);
for (uint16_t j = 0; j < display_height; j++) {
for (uint16_t i = 0; i < width; i++) {
sendData((colourValue << 4) | colourValue);
}
}
turnOnDisplay();
}
void setup() {
Serial.begin(115200);
pinMode(21, OUTPUT);
digitalWrite(21, LOW);
Serial.print("\r\nGPIO21\nOk!\r\n");
pinMode(PIN_EPD_RESET, OUTPUT);
pinMode(PIN_EPD_DC, OUTPUT);
pinMode(PIN_EPD_CS, OUTPUT);
pinMode(PIN_EPD_BUSY, INPUT);
Serial.print("\r pin mode Ok!\r\n");
SPI.beginTransaction(SPISettings(8000000, MSBFIRST, SPI_MODE0));
SPI.begin(PIN_EPD_SCK, PIN_EPD_MISO, PIN_EPD_MOSI, PIN_EPD_CS);
Serial.print("\rSPI init Ok!\r\n");
epdinit();
clear(Colour::WHITE);
}
void loop() {}
Here is my platformio.ini file:
platform = espressif32
board = esp32-s3-devkitm-1
framework = arduino
board_build.mcu = esp32s3
monitor_speed = 115200
build_flags =
-DARDUINO_USB_CDC_ON_BOOT=1
-DCORE_DEBUG_LEVEL=1
board_build.flash_mode = qio
board_upload.flash_size=16MB
board_upload.maximum_size = 16777216
board_build.partitions = large_spiffs_16MB.csv
lib_deps = SPI
lib_ldf_mode=deep
I would really appreciate it if anyone could help me figure out what might be causing the issue. Thanks in advance!