Skip to content

本板使用 GxEPD2 驱动的电子墨水屏。文档中不再推荐在此类小型 e-paper 上直接使用 LVGL——请使用仓库中的 GxEPD2 示例进行显示驱动与局刷控制。

注意事项:

  • 运行 LilyGO-Mini-Epaper-S3 仓库中的 EPD_Display / Factory_Test 示例来验证显示、LoRa、RTC、SD 等外设。
  • 上电首次请做一次全刷:display.display(false)
  • 对于小分辨率墨水屏,若需简单 UI 建议基于 GxEPD2 实现小型绘制逻辑,而非完整 LVGL 移植。
  1. 打开 platformio.ini,取消注释目标示例环境
  2. 点击 编译,连接开发板,点击 上传

示例程序

示例说明
EPD_Display电子墨水屏显示演示
LoRa_SendLoRa 发送示例
LoRa_ReceiveLoRa 接收示例
RTC_ClockPCF8563 实时时钟
Deep_Sleep深度睡眠与唤醒
SD_CardTF 卡读写
Factory_Test全功能出厂测试

本板使用 GxEPD2 驱动的电子墨水屏。文档中不再推荐在此类小型 e-paper 上直接使用 LVGL——请使用仓库中的 GxEPD2 示例进行显示驱动与局刷控制。

注意事项:

  • 运行 LilyGO-Mini-Epaper-S3 仓库中的 EPD_Display / Factory_Test 示例来验证显示、LoRa、RTC、SD 等外设。
  • 上电首次请做一次全刷:display.display(false)
  • 对于小分辨率墨水屏,若需简单 UI 建议基于 GxEPD2 实现小型绘制逻辑,而非完整 LVGL 移植。

外设示例

Hello World(GxEPD2 电子墨水屏)

cpp
#include <GxEPD2_BW.h>
#include <Fonts/FreeMonoBold9pt7b.h>

// SPI 引脚 — 参考项目 pin_config.h
#define EPD_CS    10
#define EPD_DC     9
#define EPD_RST    8
#define EPD_BUSY   7

// 1.02 英寸 128×80 电子墨水屏
GxEPD2_BW<GxEPD2_102, GxEPD2_102::HEIGHT> display(
    GxEPD2_102(EPD_CS, EPD_DC, EPD_RST, EPD_BUSY));

void setup() {
    display.init(115200);
    display.setRotation(1);
    display.setFont(&FreeMonoBold9pt7b);
    display.setTextColor(GxEPD_BLACK);

    display.setFullWindow();
    display.firstPage();
    do {
        display.fillScreen(GxEPD_WHITE);
        display.setCursor(5, 30);
        display.print("T-Mini E-Paper");
        display.setCursor(5, 55);
        display.print("Hello World!");
    } while (display.nextPage());
}

void loop() {}

局部刷新(低功耗快速刷新)

cpp
// 局部刷新仅刷新变化区域,速度快、闪烁少
display.setPartialWindow(0, 0, 128, 40);
display.firstPage();
do {
    display.fillScreen(GxEPD_WHITE);
    display.setCursor(5, 25);
    display.printf("计数: %d", count++);
} while (display.nextPage());

LoRa 发送(SX1262)

cpp
#include <RadioLib.h>

// 引脚 — 参考项目 pin_config.h
#define LORA_CS    SS
#define LORA_DIO1  33
#define LORA_RST   32
#define LORA_BUSY  34

SX1262 radio = new Module(LORA_CS, LORA_DIO1, LORA_RST, LORA_BUSY);

void setup() {
    Serial.begin(115200);
    int state = radio.begin(915.0);  // 欧洲用 868.0,亚洲用 433.0
    if (state == RADIOLIB_ERR_NONE) {
        Serial.println("LoRa 初始化成功");
    }
}

void loop() {
    int state = radio.transmit("Hello from T-Mini E-Paper S3!");
    if (state == RADIOLIB_ERR_NONE) {
        Serial.println("数据包发送成功");
    }
    delay(5000);
}

LoRa 接收(SX1262)

cpp
#include <RadioLib.h>

SX1262 radio = new Module(LORA_CS, LORA_DIO1, LORA_RST, LORA_BUSY);

void setup() {
    Serial.begin(115200);
    radio.begin(915.0);
    radio.startReceive();
}

void loop() {
    String str;
    int state = radio.readData(str);
    if (state == RADIOLIB_ERR_NONE) {
        Serial.print("收到: ");
        Serial.println(str);
        Serial.print("RSSI: ");
        Serial.println(radio.getRSSI());
        radio.startReceive();
    }
    delay(10);
}

RTC 设置与读取(PCF8563)

cpp
#include <PCF8563.h>

PCF8563 rtc;

void setup() {
    Serial.begin(115200);
    Wire.begin();
    rtc.init();

    // 设置时间:2026-01-01 12:00:00
    rtc.stopClock();
    rtc.setYear(26);
    rtc.setMonth(1);
    rtc.setDay(1);
    rtc.setHour(12);
    rtc.setMinut(0);
    rtc.setSecond(0);
    rtc.startClock();
}

void loop() {
    Time now = rtc.getTime();
    Serial.printf("20%02d-%02d-%02d %02d:%02d:%02d\n",
        now.year, now.month, now.day,
        now.hour, now.minute, now.second);
    delay(1000);
}

深度睡眠 + 定时唤醒

cpp
#include <esp_sleep.h>

#define SLEEP_SECONDS 60

void setup() {
    Serial.begin(115200);
    Serial.println("唤醒,正在执行任务...");

    // ... 更新电子墨水屏、发送 LoRa 数据等 ...

    Serial.printf("进入深度睡眠 %d\n", SLEEP_SECONDS);
    esp_sleep_enable_timer_wakeup((uint64_t)SLEEP_SECONDS * 1000000ULL);
    esp_deep_sleep_start();
}

void loop() {}

常见问题

Q:板子一直烧录失败怎么办?
A:按住 BOOT 再按一下 RST,先松开 RST,保持按住 BOOT 后再开始烧录。

Q:USB 串口无输出?
A:在 Arduino IDE 工具菜单中将 USB CDC On Boot 设为 Enabled

Q:电子墨水屏刷新后有残影怎么办?
A:每隔约 10 次局部刷新,执行一次全屏刷新(display.setFullWindow())以清除残影。

Q:LoRa 应该用哪个频段?
A:北美用 915 MHz,欧洲用 868 MHz,亚洲用 433 MHz。收发两端频率必须一致。

Q:如何验证硬件正常?
A:烧录出厂固件测试文件以检验各外设。