ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

EPDiy E-Paper Driver:基于 ESP32/ESP32-S3 驱动低成本电子墨水屏的完整实战指南

EPDiy E-Paper Driver:基于 ESP32/ESP32-S3 驱动低成本电子墨水屏的完整实战指南 EPDiy E-Paper Driver基于 ESP32/ESP32-S3 驱动低成本电子墨水屏的完整实战指南【免费下载链接】TasmotaAlternative firmware for ESP8266 and ESP32 based devices with easy configuration using webUI, OTA updates, automation using timers or rules, expandability and entirely local control over MQTT, HTTP, Serial or KNX. Full documentation at项目地址: https://gitcode.com/GitHub_Trending/ta/Tasmota导读EPDiy 是一套以 ESP32V2–V6与 ESP32-S3V7为核心的电子墨水屏E-Paper / E-Ink驱动方案专门用于驱动电子书阅读器上拆机的裸屏面板。本指南将以仓库内 EPDiy README 为主体结合lib/libesp32_eink/epdiy/src下的驱动源码完整讲解 EPDiy 的硬件选型、支持的面板矩阵、驱动 API 的初始化与绘制流程、LilyGo 板卡的功耗控制差异、以及常见问题的排查方法帮助你在 Tasmota 生态之外独立搭建自己的墨水屏应用天气站、信息牌、串口终端等。一、EPDiy 是什么为什么用 ESP32 驱动阅读器拆机屏EPDiy 是一个开源的电子墨水屏驱动板项目。它直接驱动通常作为电子书阅读器替换件出售的裸屏面板bare E-Paper modules其价值在于护眼、接近纸张的观感电子墨水屏反射环境光成像长时间阅读不易疲劳不刷新时零功耗画面一旦显示断电后依然保持非常适合电池供电的低功耗设备阳光下可读反射式显示在强光下依然清晰。之所以选择 ESP32 平台是因为现成的、带 4bpp16 级灰度支持的同类 DIY 模块昂贵且/或缓慢而 EPDiy 可以驱动 ebay 上售价仅约 20 美元小尺寸/ 30 美元大尺寸的旧阅读器拆机屏。更重要的是EPDiy 基于 ESP32V2–V6与 ESP32-S3V7微控制器天然具备 WiFi 与蓝牙连接能力可以做出联网的智能墨水屏设备。EPDiy 驱动板针对一系列电子墨水屏做了适配。由于所有矩阵式 E-Ink 显示屏的驱动方式大同小异只需要正确的连接器与时序参数即可点亮不同面板当前 V7 板卡提供了三种不同的显示屏连接器其余面板则需要通过适配板adapter board转接。控制器针对 LiPo 锂电池应用做了优化板载 LiPo 充电电路并且深度睡眠电流极低。项目同时支持ESP-IDF与Arduino两种开发框架这一点可由 library.json 中的frameworks: [arduino, espidf]与platforms: espressif32佐证。注意事项对于 epdiy V7 板卡如果使用 Arduino IDE刷新速度会明显更低——因为 Arduino IDE 不允许修改次优的缓存配置cache configuration。二、仓库内的 EPDiy 源码结构速览在继续阅读下文前先对仓库中的 EPDiy 源码布局有一个整体认识便于对照路径内容lib/libesp32_eink/epdiy/src/epdiy.h底层驱动 API初始化、绘制图元、旋转、电源控制lib/libesp32_eink/epdiy/src/epd_highlevel.h高层 API双缓冲 差分更新面向普通应用lib/libesp32_eink/epdiy/src/epd_display.h显示屏类型定义分辨率、总线宽度、波形lib/libesp32_eink/epdiy/src/epd_board.h板卡抽象接口电源开关、VCOM、温度等lib/libesp32_eink/epdiy/src/board/各版本板卡实现V2/V3/V4/V5/V6/V7、LilyGolib/libesp32_eink/epdiy/src/waveforms/各型号显示屏的波形数据头文件lib/libesp32_eink/epdiy/scripts/波形生成、字体/图片转换等辅助工具三、支持的显示屏面板一览完整兼容表以下表格完整摘录自 README列出 EPDiy 官方已测试或预期兼容的 E-Ink 面板。选屏时请重点关注Compatible since pcb version自哪个 PCB 版本起支持与 Connector 列——这两项决定了你需要 V2 还是 V5/V7 板卡、以及是否需要适配板。名称尺寸分辨率兼容性连接器引脚数自 PCB 版本起支持备注ED060SC46800 x 600167 PPI已测试FH26W-39S-0.3SHW(60)39v2ED097OC49.71200 x 825150 PPI已测试XF2M-3315-1A33v2便宜对比度较差ED097TC29.71200 x 825150 PPI已测试XF2M-3315-1A33v2价格略高对比度更好ED097OC19.71200 x 825150 PPI应可工作XF2M-3315-1A33v2便宜性能较差ED047TC14.7960 x 540234 PPI已测试40-pin40LILYGO 4.7 EPD仅由 LILYGO 的 4.7 电子纸板支持ED050SC55600 x 800200 PPI已测试THD0510-33CL-GF33v5ED050SC35600 x 800200 PPI应可工作THD0510-33CL-GF33v5ED052TC45.21280 x 780PPI 未知应可工作WP27D-P050VA350v5ED133UT213.31600 x 1200150 PPI已测试适配板39v2需要适配板亦兼容 PENG133DED060XC36758 x 1024212 PPI已测试THD0515-34CL-SN34v5最便宜对比度与分辨率俱佳ED060XD46758 x 1024212 PPI已测试THD0515-34CL-SN34v5ED060XC56758 x 1024212 PPI应可工作同 ED060XC3THD0515-34CL-SN34v5ED060XD66758 x 1024212 PPI应可工作同 ED060XC3THD0515-34CL-SN34v5ED060XH26758 x 1024212 PPI应可工作同 ED060XC3THD0515-34CL-SN34v5ED060XC96758 x 1024212 PPI应可工作同 ED060XC3THD0515-34CL-SN34v5ED060KD161072 x 1448300 PPI应可工作同 ED060XC3THD0515-34CL-SN34v5ED060KC161072 x 1448300 PPI应可工作同 ED060XC3THD0515-34CL-SN34v5ED060SCF6600 x 800167 PPI已测试THD0515-34CL-SN34v5柔性排线形状不同ED060SCN6600 x 800167 PPI应可工作同 ED060XC3THD0515-34CL-SN34v5柔性排线形状不同ED060SCP6600 x 800167 PPI应可工作同 ED060XC3THD0515-34CL-SN34v5柔性排线形状不同ED060SC76600 x 800167 PPI应可工作AXT33412434v5v6 起取消该连接器ED060SCG6600 x 800167 PPI应可工作AXT33412434v5v6 起取消该连接器ED060SCE6600 x 800167 PPI应可工作AXT33412434v5v6 起取消该连接器ED060SCM6600 x 800167 PPI应可工作AXT33412434v5v6 起取消该连接器ED060SCT6600 x 800167 PPI已测试AXT33412434v5v6 起取消该连接器ED078KC17.81872 x 1404300 PPI已测试FH12-40S-0.5SH40v716 条数据线面板型号在源码中的定义上表中的面板并非写死在文档里而是在 src/displays.c 中以EpdDisplay_t结构体逐一实例化字段包含宽高、数据总线宽度、总线速度仅 V7 的 LCD 渲染器使用、默认波形与兼容类别例如const EpdDisplay_t ED060XC3 { .width 1024, .height 768, .bus_width 8, .bus_speed 20, .default_waveform epdiy_ED060XC3, .display_type DISPLAY_TYPE_GENERIC, };面板的兼容类别定义在 src/epd_display.hDISPLAY_TYPE_GENERIC通用采用默认配置与DISPLAY_TYPE_ED097TC2快速屏允许更短的保持时间。例如 ED133UT2、ED052TC4 都复用 ED097TC2 的默认波形与快速类别这与上表v2/v5 即可支持的结论相互印证。7.8 的 ED078KC1 是唯一使用16 位数据总线的面板.bus_width 16因此仅在 V7 板卡上支持——V7 板专门提供了 40 引脚的 FH12-40S-0.5SH 连接器。四、快速上手从初始化到第一次刷新EPDiy 同时提供底层 APIsrc/epdiy.h与高层 APIsrc/epd_highlevel.h。对于绝大多数应用直接使用高层 API 即可其头文件中的注释给出了一套完整的最小流程// 1. 声明一个全局状态对象管理显示状态 EpdiyHighlevelState hl; // 2. 初始化驱动与帧缓冲高层 API 会分配两块帧缓冲和一块差分缓冲 epd_init(EPD_LUT_1K); hl epd_hl_init(EPD_BUILTIN_WAVEFORM); // 3. 在帧缓冲上绘制此时只改内存不刷新屏幕 uint8_t* fb epd_hl_get_framebuffer(hl); // 画一个黑色矩形 EpdRect some_rect { .x 100, .y 100, .width 100, .height 100 }; epd_fill_rect(some_rect, 0x0, fb); // 写一行文字 int cursor_x 100; int cursor_y 300; epd_write_default(FiraSans, Hello, World!, cursor_x, cursor_y, fb); // 4. 最后才真正刷新屏幕 int temperature 25; epd_poweron(); EpdDrawError err epd_hl_update_screen(hl, MODE_GC16, temperature); epd_poweroff();初始化参数与内存含义epd_init()的原型src/epdiy.c为void epd_init(const EpdBoardDefinition* board, const EpdDisplay_t* disp, enum EpdInitOptions options);它会依次完成记录显示屏定义 → 设置板卡硬件定义epd_set_board→ 初始化渲染器epd_renderer_init(options)。初始化选项定义在 src/epdiy.h 的enum EpdInitOptions中选项含义EPD_OPTIONS_DEFAULT0使用默认选项EPD_LUT_1K1使用 1024 字节的小查找表LUT占用空间更小但性能可能下降EPD_LUT_64K2默认使用 64K 查找表性能最佳但会永久占用 64K 内部内存块EPD_FEED_QUEUE_84使用 8 行显示行的馈送队列内存占用少可能影响性能EPD_FEED_QUEUE_328默认使用 32 行显示行的馈送队列性能最佳内存占用更大这些选项在 src/render.c 的epd_renderer_init()中按位解析EPD_LUT_64K分支选择完整 LUT 路径EPD_FEED_QUEUE_32分支配置更大的行队列两者共同决定渲染性能与内存占用之间的取舍。如果你追求更快的刷新同时内存足够就保持默认若内存吃紧可换用EPD_LUT_1K | EPD_FEED_QUEUE_8。高层 API 的内存分配细节epd_hl_init()src/highlevel.c的实现揭示了其内部机制通过heap_caps_aligned_alloc(16, fb_size, MALLOC_CAP_SPIRAM)在PSRAM中分配 front/back 两块帧缓冲帧缓冲大小为epd_width() / 2 * epd_height()字节4bpp 每像素半个字节再分配一块大小为2 * fb_size的差分缓冲以及位于内部 RAM 的dirty_lines/dirty_columns脏标记数组初始化时把 front 与 back 缓冲全部清零为0xFF白色若检测到未启用 PSRAMCONFIG_ESP32_SPIRAM_SUPPORT/CONFIG_ESP32S3_SPIRAM_SUPPORT未定义会打印警告日志提醒开启 PSRAM分配失败则直接触发断言复位。也就是说高层 API 强制要求外部 PSRAM。如果你在裸 ESP32 上使用务必在 menuconfig 中开启Component config → ESP32-specific → Support for external, SPI-connected RAM。刷新流程差分更新difference updateepd_hl_update_screen()实际调用epd_hl_update_area()src/highlevel.c其核心是差分更新通过epd_difference_image_cropped()对比 front目标画面与 back上一帧缓冲计算差异区域与脏行/脏列若差异区域宽或高为 0画面没变化直接返回EPD_DRAW_SUCCESS不做任何刷新否则以MODE_PACKING_1PPB_DIFFERENCE | mode的打包模式调用底层epd_draw_base()仅刷新发生变化的行与列刷新成功后把 front 缓冲复制回 back 缓冲作为下一次比较的基准整个过程通过esp_timer_get_time()统计并打印diff差分计算、draw波形绘制、buffer update缓冲同步与total总耗时四段时间便于你实测不同模式的刷新耗时。这就是部分区域更新速度快的原因只对脏行/脏列施加电压。也正因如此更新画面时务必只修改需要变化的部分否则差分机制就失去了意义。五、绘制 API 详解颜色、图形、文字与旋转5.1 颜色只用高 4 位绝大多数墨水屏仅支持 16 级灰度。底层 API 用字节的**高 4 位nibble**表示颜色char pixel_color color 0xF0;因此向任何绘图函数传颜色时必须设置高 4 位否则颜色会被当作黑色。可用颜色从0xF0白经0x80中灰到0x00黑。这一约定贯穿 src/epdiy.h 的所有绘图函数例如epd_draw_pixel()中x % 2为奇数像素时写入(color 0xF0)偶数像素时写入(color 4)可见颜色的高 4 位正是灰度值本体。5.2 基础图形原语src/epdiy.h 声明了完整的 2D 绘图原语全部写入指定的帧缓冲、且自动感知旋转内部调用_rotate()做坐标变换见 src/epdiy.c函数功能epd_draw_pixel(x, y, color, fb)画点epd_draw_hline / epd_draw_vline画水平/垂直线epd_draw_line(x0,y0,x1,y1,color,fb)画任意直线Bresenham 算法epd_draw_rect / epd_fill_rect画/填充矩形EpdRect结构x、y、width、heightepd_draw_circle / epd_fill_circle画/填充圆epd_draw_triangle / epd_fill_triangle画/填充三角形epd_copy_to_framebuffer(area, img, fb)把 4bpp 图像数据拷贝进帧缓冲epd_draw_rotated_image/epd_draw_rotated_transparent_image旋转感知的图像绘制可带透明色键epd_get_pixel(x, y, w, h, fb)读取 4bpp 缓冲中某点像素返回 0–255矩形区域类型EpdRect定义如下其中width/height必须为正typedef struct { int x; // 水平位置 int y; // 垂直位置 int width; // 宽度必须为正 int height; // 高度必须为正 } EpdRect;5.3 文字绘制与字体属性高层示例中的epd_write_default()使用默认字体属性需要精细控制时可用epd_write_string(font, string, cursor_x, cursor_y, fb, properties)。EpdFontProperties包含前景色、背景色、缺失字形回退码点与对齐标志typedef struct { uint8_t fg_color : 4; // 前景色 uint8_t bg_color : 4; // 背景色 uint32_t fallback_glyph; // 缺失字形时使用的码点 enum EpdFontFlags flags; // 对齐标志等 } EpdFontProperties;对齐标志包括EPD_DRAW_BACKGROUND绘制背景、EPD_DRAW_ALIGN_LEFT / RIGHT / CENTER左/右/居中。字体数据本身由 scripts/fontconvert.py 之类的工具从 TTF 字体转换而来。文字绘制失败时epd_write_string会返回EpdDrawError错误码如EPD_DRAW_STRING_INVALID、EPD_DRAW_NO_DRAWABLE_CHARACTERS、EPD_DRAW_GLYPH_FALLBACK_FAILED等详见 src/epdiy.h。5.4 屏幕旋转src/epdiy.h 定义了四种旋转方向通过epd_set_rotation()设置、epd_get_rotation()读取仅影响绘图与文字函数的坐标系统枚举值含义EPD_ROT_LANDSCAPE0横屏默认EPD_ROT_PORTRAIT1竖屏顺时针 90°EPD_ROT_INVERTED_LANDSCAPE2反向横屏180°EPD_ROT_INVERTED_PORTRAIT3反向竖屏270°旋转后的逻辑宽高可通过epd_rotated_display_width() / epd_rotated_display_height()获取。注意 src/highlevel.c 中的_inverse_rotated_area()会在部分区域更新时把旋转坐标系反算回物理坐标系保证旋转模式下局部刷新的区域定位依然正确。六、刷新模式Waveform / Draw Mode与波形刷新模式在 src/epdiy.h 的enum EpdDrawMode中定义它决定了波形waveform如何驱动像素完成灰度迁移。理解这几个模式是调优刷新效果与速度的关键模式说明MODE_INIT初始化波形当前未使用请改用epd_clear()MODE_DU直接更新Direct Update仅白↔黑速度快MODE_GC16任意灰度间转换带闪烁刷新先闪白/黑再显像画质最好MODE_GC16_FASTMODE_GC16的快速版默认波形不可用MODE_A2动画模式快速单色更新默认波形不可用MODE_GL16任意灰度间转换无闪烁刷新MODE_GL16_FASTMODE_GL16的快速版默认波形不可用MODE_DU44 级灰度的MODE_DU版本默认波形不可用MODE_GL44 级灰度的任意转换默认波形不可用MODE_GL16_INV反向 GL16默认波形不可用MODE_EPDIY_WHITE_TO_GL160x10仅 EPDiy 波形可用从白屏快速到任意灰度MODE_EPDIY_BLACK_TO_GL160x11仅 EPDiy 波形可用从黑屏快速到任意灰度MODE_EPDIY_MONOCHROME0x20单色模式仅支持 1bpp 缓冲除模式外还有帧缓冲打包方式packing与前置状态位打包方式MODE_PACKING_8PPB1bppMSB 为最左像素、MODE_PACKING_2PPB4bpp每字节两个像素高半字节为左像素奇数宽图像每行需补一个填充半字节、MODE_PACKING_1PPB_DIFFERENCE差分图高半字节标记from色、低半字节标记to色前置状态PREVIOUSLY_WHITE/PREVIOUSLY_BLACK声明当前屏面为全白/全黑可启用更快的输出计算路径默认组合宏为EPD_MODE_DEFAULT (MODE_GL16 | PREVIOUSLY_WHITE)即从白屏出发的无闪烁 16 灰度刷新。实践建议日常信息更新如天气站优先用MODE_GL16无闪烁对画质要求高、可以接受闪烁时用MODE_GC16清屏用epd_fullclear(hl, temperature)其实现为置全白 →MODE_GC16刷新 →epd_clear()见 src/highlevel.c。波形数据存放于 src/waveforms/例如epdiy_ED060XC3.h、epdiy_ED097TC2.h与 src/displays.c 中各面板的default_waveform一一对应。高层 API 传入EPD_BUILTIN_WAVEFORM即NULL时src/highlevel.c 会自动取当前面板的default_waveform你也可以用epd_hl_waveform()动态切换波形。温度参数epd_hl_update_screen()/epd_draw_base()都接收temperature参数单位 °C。默认波形当前并不使用该值传室温 20–25°C 即可若板卡带温度传感器epd_ambient_temperature()会返回实测温度否则返回 21°C 并打印警告日志见 src/epdiy.c。七、LilyGo 板卡的功耗控制差异poweroff 与 powerdownLilyGo 的电子纸板与标准 EPDiy 板卡存在若干差异其中最重要的一点是屏幕供电方式。官方 LilyGo 代码中屏幕供电有两个状态而 EPDiy 采用了不同的处理方式并提供两个语义不同的函数接口声明见 src/epdiy.hLilyGo 板卡实现见 src/board/epd_board_lilygo_t5_47.cepd_poweroff()完全切断屏幕及 LilyGo 板上其他外设包括触摸的电源epd_powerdown()保留外设供电从而让触摸功能继续工作。关键约定系统进入睡眠前应当总是调用epd_poweroff()而不是 powerdown。在 LilyGo 板卡的源码实现中可以看到二者的本质区别epd_board_poweroff会把config_reg.ep_scan_direction置为false该位被重新用作电源使能再执行通用断电序列而epd_board_poweroff_touch对应epd_powerdown()则保持其为true。断电序列本身通过移位寄存器push_cfg_bit按序关闭正电源pos_power_enable、负电源neg_power_enable最后置power_disable true并 detach I2S 总线。若你想保留触摸唤醒功能Arduino 下的完整流程如下先epd_poweroff()再配置 EXT1 唤醒源并进入深睡epd_poweroff(); epd_deinit(); esp_sleep_enable_ext1_wakeup(GPIO_SEL_13, ESP_EXT1_WAKEUP_ANY_HIGH); esp_deep_sleep_start();唤醒后重新epd_init(...)与epd_poweron()即可恢复显示。板卡层面LilyGo 4.7 电子纸板对应两个板卡定义epd_board_lilygo_t5_47与epd_board_lilygo_t5_47_touch后者poweroff挂载epd_board_poweroff_touch见 src/board/epd_board_lilygo_t5_47.c 末尾的结构体定义。八、电源、深睡与 VCOM 调校8.1 电源管理 APIepd_poweron()使能屏幕供电内部调用当前板卡的poweron回调epd_poweroff()关闭屏幕供电内部调用当前板卡的poweroff回调刷新前必须epd_poweron()若无后续刷新应立即epd_poweroff()src/epd_highlevel.h 的注释明确要求了这一顺序。V7 板卡使用 TPS65185 电源管理 IC见 src/board/tps65185.c与 PCA9555 GPIO 扩展器src/board/pca9555.c通过 I2C 控制供电与 VCOM。epd_set_vcom(uint16_t vcom)用于设置公共电压单位是毫伏绝对值——虽然 VCOM 实际为负压但该函数接收正值绝对值。VCOM 校准是否正确直接影响局部刷新后旧画面是否会残留/变暗见下文故障排查。8.2 降低深睡功耗的两个要点外设干扰启动连接外部外设时注意不要在启动时把 GPIO12 拉高——它是决定内部电压的 strapping 引脚深睡电流过高在代码中加入rtc_gpio_isolate(GPIO_NUM_12);以隔离 RTC 域外漏电。有关深睡模式下 IO 配置的详细说明可参阅 ESP-IDF 官方 sleep modes 文档中 Configuring IOs (Deep-sleep Only) 一节。九、故障排查速查表以下问题清单源自 EPDiy 项目的历史经验与用户反馈从 README 完整继承现象原因与解决显示画面只有一部分没有选择正确的显示屏类型。请核对上表面板表格确认代码中的EpdDisplay_t与你实际焊接的面板一致局部刷新时原有画面变淡/变暗VCOM 电压没有针对你的面板校准。使用epd_set_vcom()逐档调整直到局部更新不再影响已有内容图像的第二/第三段被最后一段内容替换疑似时序问题官方也尚未完全定位根因可在社区讨论中反馈现象并寻求 workaround 建议连接外部外设后 ESP 无法正常启动启动期间 GPIO12 被拉高。检查外设接线避免在 boot 阶段把 GPIO12 拉高该引脚为内部电压选择的 strapping 引脚深睡功耗过高在代码中调用rtc_gpio_isolate(GPIO_NUM_12);刷新报EPD_DRAW_EMPTY_LINE_QUEUE波形查找跟不上显示输出速度降低显示屏时钟频率对 V7 可通过epd_set_lcd_pixel_clock_MHz()调低像素时钟其中EPD_DRAW_EMPTY_LINE_QUEUE等错误码均定义于 src/epdiy.h 的enum EpdDrawError可作为程序化错误处理的依据。十、硬件制板、订购与 V7 概览EPDiy 是软件 开源硬件一体的项目。官方硬件页面列出了全部板卡与变体、适配板与辅助工具每一块板卡旁边都提供制造文件gerbers、物料清单BoM、贴片坐标文件与 3D 模型可直接用于打样。以 JLCPCB 下单为例流程非常简单下载打包好的 gerbers、BoM 与 placement 文件并上传即可其他制造商流程类似细节请查阅各厂商文档。注意如果板卡上没有你所用显示屏的连接器别忘了订购适配板adapter。当前最新版本为epdiy V7基于ESP32-S3设计拥有三个显示屏连接器并通过 LCD 驱动方式输出16 位数据线的 ED078KC1 只能由 V7 驱动。V7 板卡的相关实现见 src/board/epd_board_v7.c其中定义了 PCA9555 控制的电源/模式/STV 引脚、I2C 电源管理以及 16 条数据线D0–D15的 GPIO 映射更早期版本V2–V6基于 ESP32则分布在epd_board_v2_v3.c、epd_board_v4.c、epd_board_v5.c、epd_board_v6.c中。硬件页面上同样提供旧版本。若你想贡献自己的板卡变体或适配板可参考 epdiy-hardware 仓库中的说明。十一、扩展玩法与灵感仓库的examples目录包含若干示例应用如天气站、屏幕诊断测试。官方 README 还给出了更多更有用的创意方向串口终端把墨水屏作为树莓派的串口终端MPD 仪表盘音乐播放器守护进程Music Player Daemon的播放信息面板电子相框用墨水屏做低功耗照片展示。这些应用的共同点是EPDiy 底层驱动 WiFi/蓝牙联网 低功耗深睡三者结合即可构建信息低频刷新、长期待机的物联网显示设备。十二、许可说明EPDiy 的许可在 README 与仓库根目录的 LICENSE 中有明确规定天气示例Copyright (c) David Bird 2018除少量修改外细节见examples/weather/README.md板卡与原理图采用 Creative Commons Attribution-ShareAlike 4.0 International LicenseCC BY-SA 4.0固件与其余示例采用 GNU Lesser GPL version 3LGPL-3.0工具utilities采用 MIT license。library.json 中同样标注了license: LGPL-3.0与 README 一致。结语EPDiy 的核心价值在于以极低的硬件成本阅读器拆机屏 ESP32 板卡获得 16 级灰度的电子墨水屏显示能力并提供从底层图元绘制、差分刷新到板卡电源管理的完整软件栈。本指南覆盖了从选屏兼容表、驱动初始化高低层 API、刷新模式选择、LilyGo 功耗控制到故障排查的完整链路后续动手时建议先跑通最小示例再对照 src/epdiy.h 的 API 注释逐步扩展你的应用。如需更深入的安装与调试指引可直接阅读仓库根目录 README.md 或查阅 EPDiy 的完整在线文档。【免费下载链接】TasmotaAlternative firmware for ESP8266 and ESP32 based devices with easy configuration using webUI, OTA updates, automation using timers or rules, expandability and entirely local control over MQTT, HTTP, Serial or KNX. Full documentation at项目地址: https://gitcode.com/GitHub_Trending/ta/Tasmota创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表