Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
47 commits
Select commit Hold shift + click to select a range
ccdf219
feat: add wio terminal support
LynnL4 Feb 6, 2025
f48f7a2
feat: add XIAO samd21 support
LynnL4 Feb 7, 2025
87df10b
feat: add XIAO nrf52840 support
LynnL4 Feb 7, 2025
719bff1
feat: add XIAO rp2040 support
LynnL4 Feb 7, 2025
1872ce3
feat: add support for the XIAO ESPXX series
LynnL4 Feb 8, 2025
8c92b62
feat: add support for the XIAO RP2350
LynnL4 Feb 8, 2025
908a3bd
chore: adjusting the spi frequency
LynnL4 Feb 8, 2025
12b243a
perf: simpliying Round Display configuration process
LynnL4 Feb 10, 2025
ef46d60
feat: add round display touch screen supported
LynnL4 Feb 10, 2025
21ac435
feat: add examples for Round Display
LynnL4 Feb 10, 2025
e27858b
docs: add README
LynnL4 Feb 13, 2025
6606e97
ci: add basic ci
LynnL4 Feb 13, 2025
b942eb3
feat: add support for epaper
LynnL4 Feb 13, 2025
9c9b619
feat: add examples for epaper
LynnL4 Feb 13, 2025
9468d8b
chore: update library infomation
LynnL4 Feb 13, 2025
f3ccf30
fix: Fix examples that cannot be compiled
StarSphere-1024 Feb 21, 2025
4da68ba
feat: Add DMA support for some pprocessors
StarSphere-1024 Mar 12, 2025
5173251
fetch: add new demo picture
ackPeng Mar 13, 2025
0e4526f
Dev (#12)
StarSphere-1024 Mar 14, 2025
5b94846
feat: Add support for Seeed XIAO EPaper Displays
StarSphere-1024 Mar 20, 2025
b504ea3
fix: Fix link function when EPaper is disabled
StarSphere-1024 Mar 21, 2025
3fa018a
update library version to v2.0.1
baorepo Mar 24, 2025
2e3f82b
fix: Fix unresolved conflicts from the last merge.
StarSphere-1024 Mar 25, 2025
27b083a
chore: update dependencies to align with latest versions
StarSphere-1024 Mar 26, 2025
4b13ca6
change demo picture
ackPeng Mar 26, 2025
a2d1914
invert image colors
ackPeng Mar 26, 2025
0a48e13
chore: Skip PNG tests for XIAO_ESP32C3/C6 due to bb_spi_lcd issues.
StarSphere-1024 Mar 26, 2025
cc45602
add: add HelloWorld example for ePaper
StarSphere-1024 Mar 27, 2025
07d87c6
fix:Fixed ESP32S3 crash when using EPaperSetup
StarSphere-1024 Mar 27, 2025
dbedfba
chore: Cancel skip PNG test for XIAO_ESP32C3/C6.
StarSphere-1024 Apr 8, 2025
95d2a01
fix:Fix UC8179 drive issue because SPI frequency too high
StarSphere-1024 Apr 10, 2025
2ebdb73
feat: Add support for JD79686B display driver
StarSphere-1024 Apr 17, 2025
0a5cf62
update readme
baorepo Apr 18, 2025
f7e489f
feat: Add rotation support for JD79686B driver
StarSphere-1024 Apr 19, 2025
38763c7
feat: Add window setting macros for JD79686B driver
StarSphere-1024 Apr 23, 2025
571847a
fix:[epaper] resolve display artifacts when updating sprite
LynnL4 May 9, 2025
97f7027
fix indentation for esp32-c3
libewa May 20, 2025
e9a7ed5
Fix: the crash issue of XIAO-ESP32-S3-PLUS
StarSphere-1024 Jun 26, 2025
82f3c10
fix:Adjust default SPI frequency for EPaper boards
StarSphere-1024 Jun 26, 2025
92c4839
Add support for XIAO ePaper Display Board
StarSphere-1024 Jun 30, 2025
6272dda
Use the separate file management Epaper board pin presets
StarSphere-1024 Jul 2, 2025
5945ec5
Add more epaper setup
StarSphere-1024 Jul 1, 2025
166e3dc
Fix: the resolution of 2.13-inch Epaper
StarSphere-1024 Jul 10, 2025
be46344
Update UserSetup for 2.13, 4.2 and 4.26 inches
StarSphere-1024 Jul 11, 2025
1385ccb
Add IC driver SSD1677 to the 4.26-inch Epaper
StarSphere-1024 Jul 11, 2025
690466e
Add IC driver SSD1683 for the 4.2-inch Epaper
StarSphere-1024 Jul 11, 2025
f87ba1a
Merge branch 'master' into master
libewa Jul 14, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
325 changes: 325 additions & 0 deletions .github/workflows/run-cl-arduino.yml

Large diffs are not rendered by default.

25 changes: 25 additions & 0 deletions .github/workflows/stale.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
name: 'Close stale issues and PRs'

on:
workflow_dispatch:
schedule:
- cron: '0 4 * * *'

jobs:
stale:
runs-on: ubuntu-latest

steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Checkout script repository
uses: actions/checkout@v4
with:
repository: Seeed-Studio/sync-github-all-issues
path: ci

- name: Run script
run: ./ci/tools/stale.sh
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
24 changes: 24 additions & 0 deletions .github/workflows/sync_issues.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
name: Automate Issue Management

on:
issues:
types:
- opened
- edited
- assigned
- unassigned
- labeled
- unlabeled
- reopened

jobs:
add_issue_to_project:
runs-on: ubuntu-latest
steps:
- name: Add issue to GitHub Project
uses: actions/add-to-project@v1.0.2
with:
project-url: https://github.com/orgs/Seeed-Studio/projects/17
github-token: ${{ secrets.ISSUE_ASSEMBLE }}
labeled: bug
label-operator: NOT
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
.vscode

# Windows image file caches
Thumbs.db
ehthumbs.db
Expand Down
76 changes: 76 additions & 0 deletions Extensions/EPaper.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
EPaper::EPaper() : _sleep(false), TFT_eSprite(this)
{
setColorDepth(EPD_COLOR_DEPTH);
createSprite(_width, _height, 1);
}

void EPaper::begin(uint8_t tc)
{
setBitmapColor(1, 0);
setTextFont(1);
setTextColor(TFT_BLACK, TFT_WHITE, true);
init(tc);
fillSprite(1);
#ifdef EPD_HORIZONTAL_MIRROR
EPD_PUSH_OLD_COLORS_FLIP(_width, _height, _img8);
fillSprite(0);
EPD_PUSH_NEW_COLORS_FLIP(_width, _height, _img8);
#else
EPD_PUSH_OLD_COLORS(_width, _height, _img8);
fillSprite(0);
EPD_PUSH_NEW_COLORS(_width, _height, _img8);
#endif
EPD_UPDATE();
EPD_WAKEUP();
}

void EPaper::update()
{
wake();
EPD_SET_WINDOW(0, 0, (_width - 1), (_height - 1));
#ifdef EPD_HORIZONTAL_MIRROR
EPD_PUSH_NEW_COLORS_FLIP(_width, _height, _img8);
#else
EPD_PUSH_NEW_COLORS(_width, _height, _img8);
#endif
EPD_UPDATE();
sleep();
}

void EPaper::update(uint16_t x, uint16_t y, uint16_t w, uint16_t h, uint16_t *data)
{
if (_sleep)
{
EPD_WAKEUP();
_sleep = false;
}
uint8_t *p = (uint8_t *)data;
// only support x, y multiple of 8 (floor)
x = (x / 8) * 8;
y = (y / 8) * 8;
pushImage(x, y, w, h, (uint16_t *)p);
EPD_SET_WINDOW(x, y, (x + w - 1), (y + h - 1));
#ifdef EPD_HORIZONTAL_MIRROR
EPD_PUSH_NEW_COLORS_FLIP(w, h, p);
#else
EPD_PUSH_NEW_COLORS(w, h, p);
#endif
EPD_UPDATE();
sleep();
}

void EPaper::sleep()
{
if (_sleep)
return;
EPD_SLEEP();
_sleep = true;
}

void EPaper::wake()
{
if (!_sleep)
return;
EPD_WAKEUP();
_sleep = false;
}
19 changes: 19 additions & 0 deletions Extensions/EPaper.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
#include "TFT_eSPI.h"

class EPaper : public TFT_eSprite
{
public:
explicit EPaper();

void begin(uint8_t tc = TAB_COLOUR);

void update();
void update(uint16_t x, uint16_t y, uint16_t w, uint16_t h, uint16_t *data);

void sleep();
void wake();

private:
bool _sleep;
};

227 changes: 227 additions & 0 deletions OREADME.md

Large diffs are not rendered by default.

20 changes: 10 additions & 10 deletions Processors/TFT_eSPI_ESP32_C3.c
Original file line number Diff line number Diff line change
Expand Up @@ -259,7 +259,7 @@ void TFT_eSPI::pushBlock(uint16_t color, uint32_t len){
while (*_spi_cmd&SPI_USR);
for (i=0; i < rem; i+=2) *spi_w++ = color32;
*_spi_mosi_dlen = (rem << 4) - 1;
#if CONFIG_IDF_TARGET_ESP32C3
#if CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C6
*_spi_cmd = SPI_UPDATE;
while (*_spi_cmd & SPI_UPDATE);
#endif
Expand All @@ -276,7 +276,7 @@ void TFT_eSPI::pushBlock(uint16_t color, uint32_t len){
while(len)
{
while (*_spi_cmd&SPI_USR);
#if CONFIG_IDF_TARGET_ESP32C3
#if CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C6
*_spi_cmd = SPI_UPDATE;
while (*_spi_cmd & SPI_UPDATE);
#endif
Expand Down Expand Up @@ -325,7 +325,7 @@ void TFT_eSPI::pushSwapBytePixels(const void* data_in, uint32_t len){
WRITE_PERI_REG(SPI_W13_REG(SPI_PORT), color[13]);
WRITE_PERI_REG(SPI_W14_REG(SPI_PORT), color[14]);
WRITE_PERI_REG(SPI_W15_REG(SPI_PORT), color[15]);
#if CONFIG_IDF_TARGET_ESP32C3
#if CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C6
SET_PERI_REG_MASK(SPI_CMD_REG(SPI_PORT), SPI_UPDATE);
while (READ_PERI_REG(SPI_CMD_REG(SPI_PORT))&SPI_UPDATE);
#endif
Expand All @@ -352,7 +352,7 @@ void TFT_eSPI::pushSwapBytePixels(const void* data_in, uint32_t len){
WRITE_PERI_REG(SPI_W5_REG(SPI_PORT), color[5]);
WRITE_PERI_REG(SPI_W6_REG(SPI_PORT), color[6]);
WRITE_PERI_REG(SPI_W7_REG(SPI_PORT), color[7]);
#if CONFIG_IDF_TARGET_ESP32C3
#if CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C6
SET_PERI_REG_MASK(SPI_CMD_REG(SPI_PORT), SPI_UPDATE);
while (READ_PERI_REG(SPI_CMD_REG(SPI_PORT))&SPI_UPDATE);
#endif
Expand All @@ -367,7 +367,7 @@ void TFT_eSPI::pushSwapBytePixels(const void* data_in, uint32_t len){
for (uint32_t i=0; i <= (len<<1); i+=4) {
WRITE_PERI_REG(SPI_W0_REG(SPI_PORT)+i, DAT8TO32(data)); data+=4;
}
#if CONFIG_IDF_TARGET_ESP32C3
#if CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C6
SET_PERI_REG_MASK(SPI_CMD_REG(SPI_PORT), SPI_UPDATE);
while (READ_PERI_REG(SPI_CMD_REG(SPI_PORT))&SPI_UPDATE);
#endif
Expand Down Expand Up @@ -412,7 +412,7 @@ void TFT_eSPI::pushPixels(const void* data_in, uint32_t len){
WRITE_PERI_REG(SPI_W13_REG(SPI_PORT), *data++);
WRITE_PERI_REG(SPI_W14_REG(SPI_PORT), *data++);
WRITE_PERI_REG(SPI_W15_REG(SPI_PORT), *data++);
#if CONFIG_IDF_TARGET_ESP32C3
#if CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C6
SET_PERI_REG_MASK(SPI_CMD_REG(SPI_PORT), SPI_UPDATE);
while (READ_PERI_REG(SPI_CMD_REG(SPI_PORT))&SPI_UPDATE);
#endif
Expand All @@ -426,7 +426,7 @@ void TFT_eSPI::pushPixels(const void* data_in, uint32_t len){
while (READ_PERI_REG(SPI_CMD_REG(SPI_PORT))&SPI_USR);
WRITE_PERI_REG(SPI_MOSI_DLEN_REG(SPI_PORT), (len << 4) - 1);
for (uint32_t i=0; i <= (len<<1); i+=4) WRITE_PERI_REG((SPI_W0_REG(SPI_PORT) + i), *data++);
#if CONFIG_IDF_TARGET_ESP32C3
#if CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C6
SET_PERI_REG_MASK(SPI_CMD_REG(SPI_PORT), SPI_UPDATE);
while (READ_PERI_REG(SPI_CMD_REG(SPI_PORT))&SPI_UPDATE);
#endif
Expand Down Expand Up @@ -476,7 +476,7 @@ void TFT_eSPI::pushBlock(uint16_t color, uint32_t len)
WRITE_PERI_REG(SPI_W12_REG(SPI_PORT), r0);
WRITE_PERI_REG(SPI_W13_REG(SPI_PORT), r1);
WRITE_PERI_REG(SPI_W14_REG(SPI_PORT), r2);
#if CONFIG_IDF_TARGET_ESP32C3
#if CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C6
SET_PERI_REG_MASK(SPI_CMD_REG(SPI_PORT), SPI_UPDATE);
while (READ_PERI_REG(SPI_CMD_REG(SPI_PORT))&SPI_UPDATE);
#endif
Expand Down Expand Up @@ -507,7 +507,7 @@ void TFT_eSPI::pushBlock(uint16_t color, uint32_t len)
WRITE_PERI_REG(SPI_W13_REG(SPI_PORT), r1);
WRITE_PERI_REG(SPI_W14_REG(SPI_PORT), r2);
}
#if CONFIG_IDF_TARGET_ESP32C3
#if CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C6
SET_PERI_REG_MASK(SPI_CMD_REG(SPI_PORT), SPI_UPDATE);
while (READ_PERI_REG(SPI_CMD_REG(SPI_PORT))&SPI_UPDATE);
#endif
Expand Down Expand Up @@ -834,7 +834,7 @@ bool TFT_eSPI::initDMA(bool ctrl_cs)
.pre_cb = 0, //dc_callback, //Callback to handle D/C line
.post_cb = 0
};
ret = spi_bus_initialize(spi_host, &buscfg, DMA_CHANNEL);
ret = spi_bus_initialize(spi_host, &buscfg, SPI_DMA_CH_AUTO);
ESP_ERROR_CHECK(ret);
ret = spi_bus_add_device(spi_host, &devcfg, &dmaHAL);
ESP_ERROR_CHECK(ret);
Expand Down
52 changes: 28 additions & 24 deletions Processors/TFT_eSPI_ESP32_C3.h
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
#include "driver/spi_master.h"
#include "hal/gpio_ll.h"

#if !defined(CONFIG_IDF_TARGET_ESP32C3) && !defined(CONFIG_IDF_TARGET_ESP32S2) && !defined(CONFIG_IDF_TARGET_ESP32)
#if !defined(CONFIG_IDF_TARGET_ESP32C3) && !defined(CONFIG_IDF_TARGET_ESP32C6) && !defined(CONFIG_IDF_TARGET_ESP32S2) && !defined(CONFIG_IDF_TARGET_ESP32)
#define CONFIG_IDF_TARGET_ESP32
#endif

Expand All @@ -28,7 +28,7 @@
#endif

// Fix IDF problems with ESP32C3
#if CONFIG_IDF_TARGET_ESP32C3
#if CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C6
// Fix ESP32C3 IDF bug for missing definition (VSPI/FSPI only tested at the moment)
#ifndef REG_SPI_BASE
#define REG_SPI_BASE(i) DR_REG_SPI2_BASE
Expand Down Expand Up @@ -68,7 +68,11 @@ SPI3_HOST = 2
*/

// ESP32 specific SPI port selection - only SPI2_HOST available on C3
#define SPI_PORT SPI2_HOST
#if ESP_ARDUINO_VERSION_MAJOR < 3
#define SPI_PORT SPI2_HOST
#else
#define SPI_PORT 2
#endif

#ifdef RPI_DISPLAY_TYPE
#define CMD_BITS (16-1)
Expand Down Expand Up @@ -313,7 +317,7 @@ SPI3_HOST = 2
#define TFT_SCLK 18
#endif

#if defined(CONFIG_IDF_TARGET_ESP32C3) || defined(CONFIG_IDF_TARGET_ESP32S2)
#if defined(CONFIG_IDF_TARGET_ESP32C3) || defined(CONFIG_IDF_TARGET_ESP32S2) || defined(CONFIG_IDF_TARGET_ESP32C6)
#if (TFT_MISO == -1)
#undef TFT_MISO
#define TFT_MISO TFT_MOSI
Expand Down Expand Up @@ -532,18 +536,18 @@ SPI3_HOST = 2
#define tft_Write_32D(C) TFT_WRITE_BITS((uint16_t)((C)<<8 | (C)>>8)<<16 | (uint16_t)((C)<<8 | (C)>>8), 32)
//*/
//* Replacement slimmer macros
#if !defined(CONFIG_IDF_TARGET_ESP32C3)
#define TFT_WRITE_BITS(D, B) *_spi_mosi_dlen = B-1; \
*_spi_w = D; \
*_spi_cmd = SPI_USR; \
while (*_spi_cmd & SPI_USR);
#if !defined(CONFIG_IDF_TARGET_ESP32C3) && !defined(CONFIG_IDF_TARGET_ESP32C6)
#define TFT_WRITE_BITS(D, B) *_spi_mosi_dlen = B-1; \
*_spi_w = D; \
*_spi_cmd = SPI_USR; \
while (*_spi_cmd & SPI_USR);
#else
#define TFT_WRITE_BITS(D, B) *_spi_mosi_dlen = B-1; \
*_spi_w = D; \
*_spi_cmd = SPI_UPDATE; \
while (*_spi_cmd & SPI_UPDATE); \
*_spi_cmd = SPI_USR; \
while (*_spi_cmd & SPI_USR);
#define TFT_WRITE_BITS(D, B) *_spi_mosi_dlen = B-1; \
*_spi_w = D; \
*_spi_cmd = SPI_UPDATE; \
while (*_spi_cmd & SPI_UPDATE); \
*_spi_cmd = SPI_USR; \
while (*_spi_cmd & SPI_USR);
#endif
// Write 8 bits
#define tft_Write_8(C) TFT_WRITE_BITS(C, 8)
Expand All @@ -552,16 +556,16 @@ SPI3_HOST = 2
#define tft_Write_16(C) TFT_WRITE_BITS((C)<<8 | (C)>>8, 16)

// Future option for transfer without wait
#if !defined(CONFIG_IDF_TARGET_ESP32C3)
#define tft_Write_16N(C) *_spi_mosi_dlen = 16-1; \
*_spi_w = ((C)<<8 | (C)>>8); \
*_spi_cmd = SPI_USR;
#if !defined(CONFIG_IDF_TARGET_ESP32C3) && !defined(CONFIG_IDF_TARGET_ESP32C6)
#define tft_Write_16N(C) *_spi_mosi_dlen = 16-1; \
*_spi_w = ((C)<<8 | (C)>>8); \
*_spi_cmd = SPI_USR;
#else
#define tft_Write_16N(C) *_spi_mosi_dlen = 16-1; \
*_spi_w = ((C)<<8 | (C)>>8); \
*_spi_cmd = SPI_UPDATE; \
while (*_spi_cmd & SPI_UPDATE); \
*_spi_cmd = SPI_USR;
#define tft_Write_16N(C) *_spi_mosi_dlen = 16-1; \
*_spi_w = ((C)<<8 | (C)>>8); \
*_spi_cmd = SPI_UPDATE; \
while (*_spi_cmd & SPI_UPDATE); \
*_spi_cmd = SPI_USR;
#endif

// Write 16 bits
Expand Down
4 changes: 2 additions & 2 deletions Processors/TFT_eSPI_Generic.h
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,8 @@
// If smooth fonts are enabled the filing system may need to be loaded
#ifdef SMOOTH_FONT
// Call up the filing system for the anti-aliased fonts
//#define FS_NO_GLOBALS
//#include <FS.h>
#define FS_NO_GLOBALS
#include <Seeed_Arduino_FS.h>
#endif

////////////////////////////////////////////////////////////////////////////////////////
Expand Down
Loading