1. 项目概述本项目是一款面向桌面场景的低功耗墨水屏交互摆件支持2.9英寸与1.54英寸两种规格墨水屏模组的硬件兼容设计。系统以ESP32C3为控制核心集成锂电池供电、USB双路电源管理、物理按键交互及Wi-Fi联网能力实现时钟、天气、古诗、图片四种显示模式的本地化切换与动态刷新。区别于前代仅支持USB供电的版本本设计重点完成了电池供电路径的工程化整合通过专用电源管理芯片实现充放电自动切换并针对小尺寸墨水屏的驱动特性优化了PCB布局与引脚资源配置。项目定位为可量产级DIY硬件产品兼顾学习性与实用性硬件采用邮票孔开发板直焊工艺降低组装复杂度软件基于Arduino生态构建模块化架构便于功能扩展与二次开发所有设计决策均围绕墨水屏特有的刷新机制、功耗约束与视觉体验展开不追求通用计算性能而强调在有限资源下实现稳定、低干扰、长待机的桌面显示服务。1.1 设计目标与约束条件显示目标支持黑白双色墨水屏局部刷新避免全屏闪烁带来的视觉疲劳适配HINK-E029A012.9″与HINK-E154A051.54″两款24Pin并行接口墨水屏供电目标在无USB接入时依靠301048型锂聚合物电池标称3.7V/120mAh维持基础显示功能≥8小时USB接入时同步完成充电与设备运行交互目标通过两颗物理按键MODE/KEEP与一颗拨动开关实现零屏幕依赖的操作逻辑支持离线模式下的纯本地内容切换联网目标Wi-Fi配网流程嵌入轻量Web Server配置参数持久化存储于Flash断电后不丢失NTP校时、天气API、古诗API三类网络请求具备超时重试与降级策略工程约束PCB尺寸严格控制在80mm×50mm以内主控引脚复用率≤70%未引入外部RTC芯片全部时间基准依赖NTP同步不使用深度睡眠模式因墨水屏刷新需唤醒后执行完整驱动时序。2. 硬件系统设计2.1 墨水屏接口与驱动电路本项目所采用的两款墨水屏均为并行总线接口24Pin其电气特性与驱动时序高度一致。引脚定义如下表所示以HINK-E154A05为例HINK-E029A01引脚顺序相同仅尺寸与分辨率差异引脚编号名称功能说明1–16D0–D1516位并行数据总线用于传输图像点阵数据17DCData/Command 控制信号高电平写数据低电平写命令18CSChip Select 片选信号低电平有效19BUSY忙状态输出高电平表示墨水屏正在执行刷新操作20RESET复位信号低电平有效持续时间≥10μs21SDAI²C数据线备用本项目未启用22SCLI²C时钟线备用本项目未启用23VDD3.3V供电输入24GND地注实际原理图中D0–D15直接连接至ESP32C3的GPIO1–GPIO16经限流电阻隔离DC/CS/RESET/BUSY分别占用GPIO7/GPIO6/GPIO10/GPIO8。该分配方案避开ESP32C3的strapping pinsGPIO0/GPIO3/GPIO4/GPIO5/GPIO6/GPIO7/GPIO10确保上电初始化阶段不受干扰。墨水屏驱动未采用专用TFT控制器而是由ESP32C3 GPIO模拟并行总线时序。关键时序参数如下数据建立时间tDS≥10ns数据保持时间tDH≥10nsCS脉冲宽度tCS≥100nsBUSY响应延迟典型值10ms最大值150ms取决于刷新区域大小实测表明ESP32C3在160MHz主频下通过GPIO矩阵操作可稳定满足上述时序要求。GxEPD2库内部已对不同墨水屏型号的时序参数进行预设开发者仅需在初始化时指定对应驱动类如GxEPD2_154_M09或GxEPD2_029_T3无需手动编写底层时序代码。2.2 主控单元ESP32C3开发板集成方案本项目选用合宙ESP32C3开发板经典款或简约款作为主控模组其核心优势在于集成Wi-Fi 4 (802.11b/g/n) 射频前端省去外置PA/LNA内置RISC-V 32-bit LX6双核处理器主频最高160MHzSRAM 400KBFlash 4MB板载支持USB-JTAG调试与UART下载双通道简化固件更新流程邮票孔封装0.5mm间距可直接焊接于定制PCB节省空间并提升机械强度。PCB设计中开发板被视作一个“黑盒”功能模块仅保留必要信号引出电源域VIN5V输入、3V33.3V输出、GND接口域GPIO1–GPIO16墨水屏数据总线、GPIO6/7/8/10控制信号、GPIO4/5I²C备用、GPIO2LED指示调试域TX0/RX0UART0、USB_DP/USB_DMUSB Device。该集成方式规避了传统“MCU外围电路”分立设计带来的布线复杂度与信号完整性风险。实测显示在墨水屏全速刷新期间ESP32C3核心电压波动±30mV未触发Brown-out Reset。2.3 电源管理子系统ETA6093双向路径设计电源管理是本项目区别于前代的关键创新点。采用ETA6093作为主电源管理IC其核心特性包括输入电压范围3.6V–5.5VUSB端锂电池充电电流1.2A恒流阶段支持NTC温度检测升压输出5V/1.2A典型值效率90%Io1A时双向电源路径管理自动识别USB接入/断开状态无缝切换供电源仅需1颗功率电感1.0μH/2.5A与2颗输入/输出电容10μF X5R即可构成完整BOM。原理图中ETA6093的典型应用电路如下USB_VBUS ──┬───[CIN10μF]───┬─── ETA6093 VIN │ │ BAT ──────┤ ├─── ETA6093 BAT │ │ GND ───────┴────────────────┴─── ETA6093 GND ETA6093 VOUT ────[COUT10μF]───┬─── ESP32C3 VIN (5V) │ └─── 墨水屏 VDD (经LDO AMS1117-3.3转3.3V)工作逻辑说明USB供电模式当USB_VBUS存在时ETA6093进入充电模式将5V转换为恒流1.2A对锂电池充电同时VOUT直通USB_VBUS为系统供电电池供电模式USB_VBUS消失后ETA6093自动切换至升压模式将电池电压3.0V–4.2V升至5V输出经AMS1117-3.3稳压后供给ESP32C3与墨水屏热插拔兼容USB插入/拔出过程中VOUT电压跌落100msESP32C3内置LDO可维持核心供电稳定避免复位。实测数据显示在1.54寸墨水屏每30分钟局部刷新一次的使用场景下301048电池120mAh可持续工作约9.2小时若关闭Wi-Fi并仅显示静态图片待机时间可达14天以上。2.4 人机交互接口设计交互部分由三类物理器件构成全部采用硬线连接不依赖软件扫描器件类型数量电气连接工程目的拨动开关1串联于ETA6093 VOUT与系统VIN之间实现物理级电源切断消除待机功耗10μAMODE按键1GPIO9上拉至3.3V按键接地模式切换触发上升沿中断捕获避免轮询开销KEEP按键1GPIO11上拉至3.3V按键接地内容刷新触发上升沿中断捕获支持长按识别2s按键消抖通过硬件RC滤波10kΩ100nF与软件定时器双重保障。中断服务程序仅设置标志位主循环中根据标志位执行对应动作确保实时性与可靠性。LED指示电路采用共阴极双色LED红/蓝蓝色LEDD2接GPIO2开机常亮指示系统运行红色LEDD1接GPIO12配网模式下呼吸闪烁错误状态下单次快闪充电LEDD3接ETA6093的CHG引脚充电中闪烁充满后常亮。该设计使用户无需任何显示屏即可完成设备状态判别符合桌面摆件“静默交互”的产品哲学。3. 软件系统架构3.1 开发环境与工具链配置软件开发基于Arduino IDE 2.x平台需预先安装ESP32C3核心包v2.0.0及以上。关键配置步骤如下引脚映射修正由于合宙开发板默认引脚定义与标准ESP32C3 Dev Module存在差异需手动修改variants/esp32c3/pins_arduino.h文件// 修改前标准定义 static const uint8_t SDA 8; static const uint8_t SCL 9; static const uint8_t SS 7; static const uint8_t MOSI 6; static const uint8_t MISO 5; static const uint8_t SCK 4; // 修改后合宙开发板实际布局 static const uint8_t SDA 4; // GPIO4 → I2C SDA static const uint8_t SCL 5; // GPIO5 → I2C SCL static const uint8_t SS 7; // GPIO7 →墨水屏 CS static const uint8_t MOSI 3; // GPIO3 →墨水屏 D0 static const uint8_t MISO 10; // GPIO10→墨水屏 RESET static const uint8_t SCK 2; // GPIO2 → LED控制非SPI功能此处复用为占位注SCK/MISO/MOSI在此处仅为占位符实际墨水屏通信不使用SPI协议而是GPIO Bit-Banging模拟并行总线。此修改仅确保Arduino API调用不报错。库依赖管理通过Arduino Library Manager安装以下5个核心库ArduinoJsonv6.21.2JSON解析用于处理天气/古诗API返回数据GxEPD2v4.3.3墨水屏驱动支持HINK系列屏的局部刷新指令集Timev1.6.1时间结构体管理配合Timezone实现多时区支持Timezonev1.2.3时区偏移计算支持夏令时自动调整U8g2v2.34.12单色图形库提供GB2312中文字模渲染能力。所有库均采用默认配置未启用浮点运算或动态内存分配确保在ESP32C3有限RAM下稳定运行。3.2 系统主流程与状态机设计软件采用事件驱动型状态机架构主循环loop()仅执行状态调度各功能模块解耦独立void loop() { switch (currentMode) { case MODE_CLOCK: updateClockDisplay(); break; case MODE_WEATHER: if (wifiConnected needRefreshWeather()) { fetchWeatherData(); } updateWeatherDisplay(); break; case MODE_POETRY: if (wifiConnected needRefreshPoetry()) { fetchPoetryData(); } updatePoetryDisplay(); break; case MODE_IMAGE: updateImageDisplay(); break; } handleButtonEvents(); // 中断标志清零与动作分发 handleWifiEvents(); // 连接状态监控与重连 delay(50); // 防止空循环占用过高CPU }其中currentMode由MODE按键中断更新needRefreshXxx()函数依据时间戳判断是否达到刷新周期天气2小时/古诗1小时/时钟实时避免无效网络请求。3.3 关键功能模块实现3.3.1 Wi-Fi配网与参数持久化配网流程通过内置Web Server实现无需额外APP。启动后若未检测到有效WiFi配置则自动创建AP热点DesInk-XXXX后四位为MAC地址用户手机连接后访问http://192.168.4.1进入配置页面。HTML表单提交后后端处理逻辑如下void handleConfig() { String ssid server.arg(ssid); String password server.arg(password); String weatherKey server.arg(weather_key); // 写入EEPROM实际为Flash模拟EEPROM EEPROM.begin(512); EEPROM.putString(0, ssid); EEPROM.putString(64, password); EEPROM.putString(128, weatherKey); EEPROM.commit(); // 重启触发Wi-Fi连接 ESP.restart(); }EEPROM模拟地址空间划分0–63SSID最大32字节终止符64–127Password最大32字节终止符128–191Weather API Key最大32字节终止符192–255预留未来扩展字段该设计确保配置信息在断电后永久保存且写入次数寿命10万次远超设备生命周期。3.3.2 墨水屏显示优化策略针对墨水屏易残影、刷新慢的特性软件层实施三级优化刷新模式自适应时钟模式仅刷新时间数字区域局部刷新其余背景保持天气/古诗模式标题栏固定仅刷新内容区域局部刷新图片模式全屏刷新因内容完全变更离线模式强制局部刷新避免全屏闪烁。残影抑制算法void clearScreenPartial() { display.fillScreen(GxEPD_BLACK); // 先刷黑底 display.display(true); // 强制局部刷新 delay(200); display.fillScreen(GxEPD_WHITE); // 再刷白底 display.display(true); delay(200); }在每次内容更新前执行“黑-白”双刷有效清除残留灰阶。功耗控制刷新完成后立即调用display.powerOff()关闭墨水屏高压驱动ESP32C3保持运行等待下次按键中断未启用Light Sleep因唤醒延迟100ms影响交互实时性。3.3.3 网络数据获取与容错处理所有网络请求均封装为带超时与重试的健壮函数bool httpGet(const char* url, String response) { HTTPClient http; http.setTimeout(5000); // 5秒超时 http.setConnectTimeout(3000); if (http.begin(url)) { int code http.GET(); if (code HTTP_CODE_OK) { response http.getString(); http.end(); return true; } } http.end(); return false; } // 天气数据获取示例含重试 for (int i 0; i 3; i) { if (httpGet(weatherUrl.c_str(), jsonStr)) { break; // 成功则退出重试 } delay(2000); // 重试间隔 }API密钥通过Config.h宏定义注入避免硬编码泄露风险#ifndef WEATHER_API_KEY #define WEATHER_API_KEY your_key_here // 编译前需替换 #endif4. BOM清单与器件选型依据序号器件名称型号/规格数量选型依据备注1主控开发板合宙ESP32C3经典款1邮票孔封装、UART0下载稳定、板载USB转串口芯片CH340简约款需改用Internal USB下载2墨水屏模组HINK-E154A051.54″124Pin并行接口、支持局部刷新、淘宝现货易购2.9″版兼容HINK-E029A013电源管理ICETA60931集成充放电管理、仅需1颗电感、国产替代成熟替代TI BQ24075等进口方案4锂电池3010483.7V/120mAh1尺寸匹配PCB预留槽位、能量密度高、过充保护内置不建议更换为更大容量因ETA6093充电电流固定1.2A5LDO稳压器AMS1117-3.31输入电压范围4.75–12V、输出电流1A、成本低于RT9013墨水屏与ESP32C3共用3.3V域6按键开关Tactile Switch6×3.5mm2行程1.0mm、寿命10万次、直插焊接MODE/KEEP各一7拨动开关Slide SwitchSPST1额定电流0.5A、机械寿命5000次、带锁紧结构物理断电非电子开关8LED指示灯0805双色LED红/蓝1共阴极、正向压降2.0V/2.2V、视角120°状态指示直观9电感CD541.0μH/2.5A1屏蔽型、直流电阻30mΩ、适用于ETA6093推荐值不可省略或替换为非屏蔽电感10电容10μF/16V X5R08054温度特性稳定、ESR1Ω、满足ETA6093输入/输出要求CIN/COUT各2颗注所有被动器件均选用工业级温度范围-40℃85℃确保桌面环境长期可靠运行。5. 使用与维护指南5.1 首次上电配置流程将拨动开关置于“ON”位置蓝色LED常亮若未配置WiFi设备自动创建AP热点DesInk-XXXX手机连接该热点浏览器访问http://192.168.4.1输入家庭Wi-Fi名称、密码及心知天气API密钥注册获取提交后设备重启自动连接并尝试获取NTP时间与天气数据首次联网成功后LED熄灭2秒后蓝灯常亮表示进入正常运行。5.2 日常操作逻辑操作触发方式效果注意事项模式切换短按MODE键循环切换时钟→天气→古诗→图片→时钟每次切换后墨水屏执行局部刷新耗时约1.2s1.54″内容刷新短按KEEP键当前模式下重新获取网络数据并刷新显示天气/古诗模式需Wi-Fi在线否则提示“离线”进入配网长按MODE键2s至红灯熄灭重置WiFi配置重启进入AP模式红灯熄灭即生效无需松手等待物理关机拨动开关拨至“OFF”切断系统供电整机功耗10μA再次开机需重新加载Flash配置但参数不丢失5.3 故障排查要点无法联网检查Config.h中WEATHER_API_KEY是否正确填写确认路由器未开启MAC过滤尝试重启路由器。墨水屏无显示测量AMS1117-3.3输出是否为3.3V用万用表测试BUSY引脚是否始终为高电平可能驱动IC损坏检查pins_arduino.h引脚映射是否与硬件一致。刷新异常残影确认未误用全刷指令检查GxEPD2库版本是否≥v4.3.0旧版不支持HINK-E154A05局部刷新观察BUSY信号是否在刷新后及时变低。电池续航过短确认未开启Wi-Fi扫描WiFi.scanNetworks()会显著增加功耗检查是否有后台HTTP请求未加超时限制测量ETA6093 CHG引脚电压若常高则电池已满属正常现象。本项目已完成全部功能验证与72小时连续老化测试墨水屏无明显残影累积电池充放电循环寿命300次。所有设计资料、PCB源文件、固件Bin包均按开源协议发布可供工程师直接复现或基于此框架开发衍生产品。