Repository navigation
Releases: atunverse/moink
Release list
墨印 MoInk R1.3.4:电量不再「未连接」,删图不再卡 10 秒
墨印 MoInk 版本:R1.3.4
本版修三个实测问题:电量一直显示「未连接」、删除轮播图偶发 400 / 误删、
上传并刷新会白占轮播槽并磨损 flash。
顺手把删除从「搬移数据」改成「改一个标记位」,删除耗时从 10 秒降到毫秒级。
api 保持 2,分区表与帧格式零变动 —— R1.2.0 及之后可直接网页 OTA。
历史 Release 继续累积保留,不删除。
一、电量不再显示「未连接」
真因
旧实现要求跨请求连续 3 次采样有效才返回电压:
if (++s_valid < 3) return -1; // 调用一次只加一
而 /api/info 每次只调用一次,控制页又只在打开时请求一次(没有任何轮询)
⇒ 计数器最多走到 1~2,永远到不了 3。所以打开设备页必定显示「未连接」,
手动多刷几次页面才偶尔出值 —— 这正是「经常未连接、偶尔正常」的原因,
跟分压电阻阻值无关(100k:100k 与 1M:1M 也都不影响)。
改法
- 一次请求内连采 12 次取中位数,单次
/api/info就能出稳定值; - 用极差(
max - min > 500 mV)判断引脚悬空 —— 悬空时读数乱飘,极差极大; - 页面不加轮询:
/api/info会刷新power_activity(),轮询会让设备永不休眠。
页面仍只在打开 / 保存设置后各取一次,但这一次就能拿到值。
二、删除轮播图:从 10 秒到毫秒
原来的代价
旧实现删除后要把后面的槽整体前移一位:满 8 张时删第 1 张,要搬 7 个槽 ——
| 项 | 数值 |
|---|---|
| 擦除 | 7 × 32 扇区 = 224 扇区 / 896 KB |
| 写入 | 7 × ~106 KB ≈ 742 KB |
| 持锁时间 | 约 10 秒(期间按键、上传、图库列表全部排队) |
这 10 秒就是「删除卡住 → 用户重复点击 → 携带过期索引 → 400 / 误删相邻照片」的根因。
现在的做法
NVS 里存一个 alive 位图(1 字节,bit i = 物理槽 i 有效),
逻辑序号 = 位图中第 N 个置位的物理槽:
- 删除 = 清一位 +
count--/cur修正,一次nvs_commit、flash 零擦写、<20 ms; - 物理槽允许留空洞,不整理、不压缩;对外
slot仍是逻辑序号(0..count-1),
页面与既有调用方无需改动; - 上传新图优先写「末尾之后」的空位(等价于追加到末尾),末尾满了才回填最早的空洞;
回填时cur用st_phys2idx()反查真实逻辑序号,不会指错图。
| 场景 | R1.3.3 及之前 | R1.3.4 |
|---|---|---|
| 满 8 张删第 1 张 | ~10 秒,擦写 896 KB,全程持锁 | <20 ms,flash 零擦写 |
| 不满 8 张上传 | 追加到末尾 | 追加到末尾(不变) |
| 满 8 张删中间再上传 | 追加到末尾 | 回填被删的那个位置 |
| 删除途中断电 | 可能重复 / 丢一张 | 原子提交,最多「这张没删掉」 |
| 上传中断留半写槽 | 可能被当成有效图 | 位图未置位 → 自动不可见 |
删除失败能看懂了
R1.3.3 及之前所有失败都压成 400 bad slot,无法区分原因。现在:
| 状态码 | 含义 |
|---|---|
400 |
查询串缺失 / slot 非法 |
404 |
该序号当前不存在(多为页面索引已过期) |
503 |
设备正忙(取锁超时,有上传或刷屏占用) |
500 |
元数据提交失败 / store 分区不可用 |
控制页同时在删除 / 清空期间禁用 × 按钮并降透明度,失败后立即重拉图库让索引回正。
三、上传并刷新不再挤占图库(FB-018)
以前两个上传按钮都带 save=1,差别只是后者多了 noshow:想临时换一张图看看效果,
也会整槽擦写 128 KB、并占掉 8 个轮播位里的一个。攒几次临时图,图库就满了。
现在两条通道彻底分开:
| 按钮 | 请求 | 占轮播槽 | 刷屏 | flash |
|---|---|---|---|---|
| 上传并刷新屏幕 | /api/frame(无 save) |
否 | 是 | 零擦写 |
| 上传到图库 | /api/frame?save=1&noshow=1 |
是 | 否 | 整槽一次(不可避免) |
固件本来就有「无 save = 只显示不存」的语义,所以这是纯页面改动,api 不变;
只刷新的通道也顺手省掉了缩略图的生成与传输。
升级须知
- R1.2.0 及之后可直接网页 OTA:设备页面「设置 → 系统维护与升级」,
上传moink_R1.3.4_app.bin即可(分区表未变)。 - R1.1.x 及更早必须线刷:用数据线整包刷
moink_R1.3.4_merged.bin。 - 升级不重置设置:热点名 / 密码 / 屏型 / GPIO 接法 / 电源管理全部保留。
- 已有轮播图自动迁移:老设备 NVS 里没有
alive键,启动时按「前 N 槽有效」生成,
与旧的物理连续布局逐槽等价,图不会丢也不需要重新上传。 - 电量换算未变:100k:100k 与 1M:1M 的比值相同(×2.0),固件系数仍是
200/100,
换电阻不需要改固件。若读数与万用表差得多,需按实测重标BAT_FULLSCALE_MV。
兼容性
- api = 2:16 字节帧头与 2bpp 载荷零变动,分区表零变动 → 可与 R1.2.x / R1.3.x 互刷。
- 算法基线 B2 12/12 MATCH,色彩与几何规格未变。
- 编译:RAM 39,692 B(12.1%)/ Flash 1,009,216 B(77.0%),0 告警。
- 产物:
firmware.bin1,009,920 B / merged 1,075,456 B / zip 1,265,223 B。
资产说明
- MoInk-FlashKit-R1.3.4.zip —— Windows 一键刷机包,解压双击 bat 即可
(自动选串口、跳过蓝牙虚拟口);包内「使用说明.txt」含 V1~V10 验收清单。 - moink_R1.3.4_merged.bin —— 固件整包(R1.1.x 及更早线刷用,0x0 写入,控制页已内嵌)。
- moink_R1.3.4_app.bin —— OTA 升级包(R1.2.0 起网页升级用)。
- page-R1.3.4.html —— 控制页热更包(网页上传,免刷机)。
版本校验
刷完在「设置 → 设备信息」应显示:版本 R1.3.4 / 接口 2。
真机验收清单(本版重点 V8 / V9 / V10)
- V8 删除轮播图:图库放满 8 张 → 删第 1 张,应在 1 秒内完成(旧版约 10 秒);
剩下的图顺序正确前移、不缺张不重张;再传 1 张应落到末尾;断电重启后顺序不变。 - V9 电量显示:打开控制页,「设备信息 → 电量」应立即显示读数(不必再刷几次);
连刷几次页面读数稳定,不出现「未连接」。 - V10 上传通道分离:点「上传并刷新屏幕」→ 屏幕变、图库张数不变;
点「上传到图库」→ 图库 +1、屏幕不动,双击设备按键能轮到它。 - V1~V7 见包内说明(排线档引脚 / 电量 / 按键 / 唤醒来源 / 休眠 / 关机 / 定时唤醒切图)。
校验和(SHA-256 前 16 位)
| 资产 | 大小 | SHA-256 |
|---|---|---|
MoInk-FlashKit-R1.3.4.zip |
1,265,223 B | 6cdab27f7cde5501… |
moink_R1.3.4_merged.bin |
1,075,456 B | ff6d68c153dedde1… |
moink_R1.3.4_app.bin |
1,009,920 B | 3c3943837fffab9f… |
page-R1.3.4.html |
169,046 B | b12c5267d3f3d04d… |
墨印 MoInk 基线版本:R1.3.3(含 R1.3.1–R1.3.3)
墨印 MoInk 基线版本:R1.3.3
本 Release 合并说明 R1.3.1 / R1.3.2 / R1.3.3 三个版本的改动(后两版未单独发版)。
api 保持 2,分区表与帧格式零变动 —— 从 R1.2.0 及之后可直接网页 OTA。
历史 Release 继续累积保留,不删除。
一、R1.3.1 —— 排线档引脚改版 + 电池分压 1M:1M
1. 排线档引脚重新分配
gpio_preset = 1(排线)整表重排:
| 信号 | 新排线档 | 旧排线档(R1.3.0 及更早) |
|---|---|---|
| ADC(电池) | GPIO0 | GPIO0 |
| KEY(唤醒) | GPIO1 | GPIO5 ← 变了 |
| LOCK(自锁) | GPIO2 | GPIO2(固定,不在这八个脚里) |
| BUSY | GPIO3 | GPIO1 ← 变了 |
| RST | GPIO4 | GPIO3 ← 变了 |
| DC | GPIO5 | GPIO4 ← 变了 |
| CS | GPIO6 | GPIO6 |
| SCK | GPIO7 | GPIO7 |
| DIN(MOSI) | GPIO10 | GPIO10 |
默认档与整合板档未改动。
2. 电池分压 100k:100k → 1M:1M
分压比 (1M+1M)/1M = 2.0,与原值完全相同,所以固件系数 BAT_DIV_NUM/DEN
保持 200/100 不变 —— 这不是漏改,改电阻值不影响系数。
⚠️ 1M 源阻抗约 500 kΩ,ESP32-C3 的 ADC 在高阻源下读数偏低(几十 mV 量级),
电量百分比可能整体偏小。建议 ADC 端并联 100 nF 到地;换上板后用万用表实测,
必要时重标BAT_FULLSCALE_MV(当前 3100 mV @ 12 dB)。
二、R1.3.2 —— 按键语义重构 + 刷屏解耦 + 唤醒来源
修复
- 单击一次连刷两张图:R1.3.0 的
pending唤醒状态在短按分支从未清零,
松手后下一轮采样又命中「补切」。重写后一次性消费动作,不再重复触发。 - 松手弹跳二次触发:旧实现完全没有消抖。
- 刷屏失败仍推进轮播指针:改为「先刷屏、成功才写
cur」,失败保留原值,
下次按键不再「跳过一张」。 - 轮播元数据重复提交:
cnt/cur/widx改为多键一次 commit,
每次切图从 2 次 NVS 写降为 1 次,也避免掉电留下半套状态。
按键语义(新)
| 动作 | 判定 | 结果 |
|---|---|---|
| 单击 | 松手后 400 ms 内无第二击 | 只唤醒并重置空闲计时,不刷图 |
| 双击 | 两次按下间隔 ≤ 400 ms | 切到下一张 |
| 长按 | 持续按住 20 秒(原 5 秒) | 恢复出厂并重启 |
- 20 ms 采样 + 连续 3 次一致消抖(约 60 ms)。
- 深睡唤醒那一击只用于唤醒;若启动时键已松开,此后 1.5 秒内的首次单击
视为「第二击」直接切图。两击都落在启动窗口内则只判单击 —— 补按一下即可。
刷屏与按键解耦
button_task 只投 UI 事件 → 队列 → display_task 串行刷屏。按键采样不再被
2~4 秒的整屏刷新阻塞(长按计时准确)。后续新增刷屏触发源(定时轮播、页面按钮、
传感器等)统一走 ui_post()。
唤醒来源识别
新增 wake_src_t:button / timer / power_on / other,
/api/info 输出 wake_reason + wake_bits,控制页「设备信息」显示「本次唤醒」。
三、R1.3.3 —— 电源管理 + 定时唤醒切图 + WiFi 默认低功率
1. 「休眠与唤醒」→「电源管理」
| 项 | 内容 |
|---|---|
| 超时 | 1 / 3 / 5 分钟,或「不超时」 |
| 超时动作 | 休眠(默认) / 关机(断电) |
| 选休眠时 | 自动唤醒(关 / 1h / 12h / 1d)+ 定时唤醒后自动切图(默认勾选) |
| 选关机时 | 隐藏上面两项 |
- 关机实现:GPIO2 拉低 → 释放 MOS 自锁 → 断电。有自锁电路时约 100 ms 掉电;
没有自锁电路的板子无法真正断电,1 秒后退回休眠(控制页已明确提示)。 sleep_s = 0(不超时)时,休眠与关机都不执行。
2. 定时唤醒自动切图
wake_show 默认 开启:定时醒来后自动切到下一张;图库为空则只开热点、不切图。
3. WiFi 默认发射功率改为「低」
中(10dBm) → 低(8.5dBm)。
⚠️ 只影响出厂默认值。已有设备 NVS 里存着原wifi_pwr,升级不会自动变低,
需要时在「热点设置」里手动选一次。
升级须知
- R1.2.0 及之后可直接网页 OTA:设备页面「设置 → 系统维护与升级」,
上传moink_R1.3.3_app.bin即可(分区表未变)。 - R1.1.x 及更早必须线刷:用数据线整包刷
moink_R1.3.3_merged.bin。 - 排线档设备:档位号没变,升级后自动套用新引脚表,按新接线接好即可;
之前用「自定义」档手工填旧脚位的,必须进页面按新接线重选并重启。 - 升级不重置设置:热点名 / 密码 / 屏型 / GPIO 接法 / 超时 / 唤醒 / 功率全部保留;
已存的轮播图也保留(store 分区不受影响)。 - 传
.html只热更控制页,不重启,刷新浏览器即生效。
兼容性
- api = 2:16 字节帧头与 2bpp 载荷零变动,分区表零变动 → 可与 R1.2.x / R1.3.x 互刷。
- 算法基线 B2 12/12 MATCH,色彩与几何规格未变。
- 编译:RAM 39,692 B(12.1%)/ Flash 1,006,358 B(76.8%),0 告警。
- 产物:
firmware.bin1,007,056 B / merged 1,072,592 B / zip 1,261,302 B。
资产说明
- MoInk-FlashKit-R1.3.3.zip —— Windows 一键刷机包,解压双击 bat 即可
(自动选串口、跳过蓝牙虚拟口);包内「使用说明.txt」含 V1~V7 验收清单。 - moink_R1.3.3_merged.bin —— 固件整包(R1.1.x 及更早线刷用,0x0 写入,控制页已内嵌)。
- moink_R1.3.3_app.bin —— OTA 升级包(R1.2.0 起网页升级用)。
- page-R1.3.3.html —— 控制页热更包(网页上传,免刷机)。
版本校验
刷完在「设置 → 设备信息」应显示:版本 R1.3.3 / 接口 2。
真机验收清单
- V1 排线档引脚(R1.3.1):设为「排线」档 → 保存并重启 → 刷屏正常、四色正确。
黑屏 / 白屏先核对引脚表。 - V2 电量读数(R1.3.1):电量与万用表实测相符(误差 5% 内);1M 高阻源偏低时并 100 nF。
- V3 按键(R1.3.2):单击只唤醒不刷图;双击切一张(不再连刷两张);
长按 20 秒恢复出厂。 - V4 唤醒来源(R1.3.2):按键唤醒 / 定时唤醒 / 上电重启,「设备信息 → 本次唤醒」显示正确。
- V5 超时休眠(R1.3.3):超时 1 分钟 + 动作「休眠」→ 静置 1 分钟后睡着,按键可唤醒。
- V6 超时关机(R1.3.3 ★需自锁电路):「超时动作」选「关机」→ 静置到点应完全断电
(按键无法唤醒,需重新按开机键)。若只是休眠,说明板上没有自锁电路,属预期限制。 - V7 定时唤醒切图(R1.3.3):图库 ≥ 2 张、自动唤醒 1 小时、勾选「唤醒后切图」→
醒来应切到下一张;取消勾选则保持原图。
校验和(SHA-256 前 16 位)
| 资产 | 大小 | SHA-256 |
|---|---|---|
MoInk-FlashKit-R1.3.3.zip |
1,261,302 B | a6c7cc9a40b0f68b… |
moink_R1.3.3_merged.bin |
1,072,592 B | 15b6dc8fe856131d… |
moink_R1.3.3_app.bin |
1,007,056 B | 9d6dd789904d03b2… |
page-R1.3.3.html |
167,076 B | c3a97efdcbee4c5e… |
墨印 MoInk 基线版本:R1.3.1
墨印 MoInk 基线版本:R1.3.1
⚠️ 本版是硬件适配批次:排线档引脚重新分配 + 电池分压电阻改 1M:1M。
⚠️ 用【排线】接法的板子升级后必须按新接线核对(见下表),接错会不亮屏。
⚠️ 自本版起 Release 继续累积保留,历史版本不删除。
⚠️ 升级不重置设置,已有的轮播图也保留。
本次更新(相对 R1.3.0)
1. ★ 排线档引脚改版
gpio_preset = 1(排线)的引脚表整体重排:
| 信号 | 新排线档 | 旧排线档(R1.3.0 及更早) |
|---|---|---|
| ADC(电池) | GPIO0 | GPIO0 |
| KEY(唤醒) | GPIO1 | GPIO5 ← 变了 |
| LOCK(自锁) | GPIO2 | GPIO2(固定,不在这八个脚里) |
| BUSY | GPIO3 | GPIO1 ← 变了 |
| RST | GPIO4 | GPIO3 ← 变了 |
| DC | GPIO5 | GPIO4 ← 变了 |
| CS | GPIO6 | GPIO6 |
| SCK | GPIO7 | GPIO7 |
| DIN(MOSI) | GPIO10 | GPIO10 |
默认档(SCK=4 / DIN=6 / CS=7 / DC=1 / RST=3 / BUSY=10,唤醒=5,ADC=0)与
整合板档(SCK=4 / DIN=3 / CS=5 / DC=6 / RST=7 / BUSY=10,唤醒=1,ADC=0)未改动。
2. ★ 电池分压电阻 100k:100k → 1M:1M
分压比 (1M+1M)/1M = 2.0,与原来的 100k:100k 完全相同,所以固件里的
BAT_DIV_NUM/BAT_DIV_DEN 保持 200/100 不动 —— 这不是漏改,改电阻值不影响系数。
⚠️ 1M 电阻的源阻抗约 500 kΩ,ESP32-C3 的 ADC 在这种高阻源下读数会偏低
(几十 mV 量级),电量百分比可能整体偏小。建议 ADC 端并联 100 nF 到地;
若换上板后电量明显不准,用万用表实测电池电压后按实测值重新标定
src/power.c的BAT_FULLSCALE_MV(当前 3100 mV @ 12 dB)。
3. 版本与工具
- 版本号 R1.3.0 → R1.3.1;控制页 meta 同步,
src/index_html.h重新固化。 tools/smoke_page.js的版本断言改为动态读取src/version.h的
MOINK_VERSION与 CONTRACT 版头,后续升版不必再改门禁脚本。- 本版为纯参数 / 注释改动,无逻辑变更。
升级须知
- R1.2.0 及之后的设备可直接网页 OTA:进设备页面「设置 → 系统维护与升级」,
上传moink_R1.3.1_app.bin即可(分区表未变)。 - R1.1.x 及更早的设备必须线刷:分区表在 R1.2.0 变更过(新增 store 存储分区),
只能用数据线整包刷moink_R1.3.1_merged.bin。 - 排线档设备:档位号没变(仍为第 2 档),升级后会自动套用新表,按新接线接好即可;
但之前用「自定义」档手工填旧脚位的,升级后必须进页面按新接线重选一遍。
改动 GPIO 必须重启才生效(选完点「保存并重启」)。 - 升级不重置设置(沿用 R1.2.2 语义:只清
a1_mode/a11_var两个废弃键),
热点名与密码保留,已存的轮播图保留。 - 传
.html只热更控制页,不重启,刷新浏览器即生效。 - 本版固件仍没有
/api/ota与/api/web(R1.2.0 起删除),R1.1.x 的旧页面
无法升级本版设备,请使用本包内的页面。
兼容性
- api 保持 2:16 字节帧头格式与语义零变动,分区表零变动 —— 可与 R1.3.0 / R1.2.x 互刷。
- 算法基线 B2 12/12 MATCH,色彩与几何规格未变。
- 固件体积与 R1.3.0 相同(1,003,426 B / 76.6%),RAM 39,660 B(12.1%),0 告警。
资产说明
- MoInk-FlashKit-R1.3.1.zip:Windows 一键刷机包,解压后双击 bat 即可
(自动选串口、跳过蓝牙虚拟口);包内「使用说明.txt」含完整验收清单与排线档新旧对照表 - moink_R1.3.1_merged.bin:固件整包(R1.1.x 及更早线刷用,0x0 整包写入,含分区表,控制页已内嵌)
- moink_R1.3.1_app.bin:OTA 升级包(R1.2.0 起设备网页升级用)
- page-R1.3.1.html:控制页热更包(网页上传,免刷机)
版本校验
刷完在设备页面「设置 → 设备信息」应显示:版本 R1.3.1 / 接口 2。
真机验收清单(四项)
- V1 排线档引脚(★本版重点):设成「排线」档 → 「保存并重启」→ 重启后能正常刷屏、
四色正确、方向正常。若黑屏 / 白屏,先核对接线是否符合上表。 - V2 电量读数:接电池,控制页电量百分比与万用表实测电压相符(误差 5% 以内可接受);
1M 高阻源若读数明显偏低,并 100 nF 电容或重新标定。 - V3 轮播抽检(R1.3.0 功能):传一张图 → 屏幕显示且图库出现缩略图;短按按键切到下一张。
- V4 升级兼容:用
moink_R1.3.1_app.bin网页 OTA(分区表未变);
升级后已有的轮播图与设置都应保留。
墨印 MoInk 基线版本:R1.3.0
墨印 MoInk 基线版本:R1.3.0
⚠️ 本版新增「多图轮播图库」:设备内最多保存 8 张图,在机身上短按按键循环切换。
⚠️ 自本版起,Release 累积保留,不再删除历史版本。
⚠️ 升级不重置设置(屏型 / 风格 / GPIO 接法 / 休眠 / 唤醒 / 热点全部保留),已有的轮播图也保留。
本次更新(相对 R1.2.2)
1. ★ 多图轮播:R1.2.0 预留的 store 分区正式启用
设备内部划出 8 个 128 KB 图槽(共 1,088 KiB),每槽保存一张完整的 2bpp 帧。上电后短按机身按键即可循环切图,不需要手机、不需要联网。
- 存图追加到末尾,不再覆盖最早那张(旧行为是 round-robin 覆盖)。
- 每槽除主图外还可携带一张彩色缩略图,供控制页图库显示(见第 4 条)。
2. ★ 设备轮播图库(控制页新卡片)
「设置 → 设备轮播图库」:
- 8 个格子显示设备内已有图片的彩色缩略图,当前正在显示的那张带绿框;
- 点缩略图 → 全屏大图预览(方向与屏上一致);
- 每个格子右上角 × → 删除这一张,后面的图自动前移补位;
- 「清空轮播」→ 清空全部(只清索引,不擦 flash、不伤设备)。
3. ★ 上传即入轮播,另加「仅上传」
- 「上传并刷新屏幕」= 存进轮播 + 立即刷屏;
- 「仅上传」(新增)= 只存进轮播、不刷屏,连续加图时不用每次等刷屏。
4. 缩略图改用网页端离线生成的彩色 JPEG
2bit 抽稀缩略图在手机彩色屏上放大后必现色块,因此改为:控制页从未量化的彩色合成图离线生成 69×96 彩色 JPEG(约 2~3 KB)随帧上传,设备原样存入槽尾。老图(没有预存缩略)自动回退为固件现算。
5. 新增与变更的接口
GET /api/carousel/list—— 图库列表(元数据 + 每槽缩略图)GET /api/carousel/full?slot=N—— 单张整帧(大图预览用)POST /api/carousel/delete?slot=N—— 删除并紧凑前移POST /api/carousel/clear—— 清空轮播GET /api/frame新增save=1(存并显示)、save=1&noshow=1(只存不显示)、tlen=N(随帧携带缩略载荷)GET /api/info新增store_count/store_cur
6. 修复:内部迭代期的严重问题
- httpd 路由表容量不足 → 设备无限重启:注册兜底路由时触发
HANDLERS_FULL,ESP_ERROR_CHECKabort、反复重启、热点起不来。本版把上限提到 32,从根上解决。 - 缩略图「部分成功部分回退色块」:接收侧与写库侧的缩略长度上限不一致(7,500),彩色 JPEG 普遍 7~15 KB,超限被静默丢弃。两处上限统一为 20,000。
- 图库列表接口峰值堆内存过高(约 60 KB):改为单槽循环 + 按实际缩略大小分配 + base64 分块发送。
- 弱信号下
httpd_req_recv返回 0 被误判为 body 截断 —— 增加短暂等待重试。
7. 控制页细节
- 高级设置里滑块旁的「默认」角标现在可点击,一点即恢复该项默认值(13 个滑块全部生效)。
升级须知
- R1.2.0 / R1.2.2 的设备可直接网页 OTA:进设备页面「设置 → 系统维护与升级」,上传
moink_R1.3.0_app.bin即可(分区表未变)。 - R1.1.x 及更早的设备必须线刷:分区表在 R1.2.0 变更过(新增 store 存储分区),只能用数据线整包刷
moink_R1.3.0_merged.bin。 - 升级不重置设置(沿用 R1.2.2 语义:只清
a1_mode/a11_var两个废弃键),热点名与密码保留,已存的轮播图保留。 - 传
.html只热更控制页,不重启,刷新浏览器即生效。 - 本版固件仍没有
/api/ota与/api/web(R1.2.0 起删除),R1.1.x 的旧页面无法升级本版设备,请使用本包内的页面。 - 只想清空设备里的轮播图,不必刷机:控制页「设备轮播图库 → 清空轮播」即可。
兼容性
- api 保持 2:16 字节帧头格式与语义零变动,分区表零变动 —— 可与 R1.2.x 互刷。
- 旧分区表(没有 store 分区)的设备:
store_slots为 0,轮播自动不可用,其余功能不受影响。 - 算法基线 B2 12/12 MATCH,色彩与几何规格未变。
资产说明
- MoInk-FlashKit-R1.3.0.zip:Windows 一键刷机包,解压后双击 bat 即可(自动选串口、跳过蓝牙虚拟口);包内「使用说明.txt」含完整验收清单
- moink_R1.3.0_merged.bin:固件整包(R1.1.x 及更早线刷用,0x0 整包写入,含分区表,控制页已内嵌)
- moink_R1.3.0_app.bin:OTA 升级包(R1.2.0 起设备网页升级用)
- page-R1.3.0.html:控制页热更包(网页上传,免刷机)
版本校验
刷完在设备页面「设置 → 设备信息」应显示:版本 R1.3.0 / 接口 2。
真机验收清单(六项)
- V1 轮播添加(★本版重点):传第一张 → 屏幕立即显示、图库出现 1 张(彩色缩略 + 绿框);用「仅上传」传第二张 → 图库变 2 张但屏幕不变;再「上传并刷新」传第三张 → 屏幕切到第三张。设备重启后轮播仍在。
- V2 按键切图:设备睡着后短按按键 → 唤醒并切到下一张(不是重显当前张);连续短按在已有几张之间循环;长按 5 秒仍为恢复出厂。
- V3 图库管理:点缩略图 → 大图预览,方向 / 内容与屏上一致;点 × 删一张 → 后面的图前移、张数 −1;删掉当前显示那张后再按键不花屏;「清空轮播」→ 8 格全空、张数归 0。
- V4 满 8 拒绝:连续加到 8 张后再传 → 页面提示「轮播已满 8 张:请先删除或清空再上传」,且原图不被覆盖。
- V5 升级兼容:直接用
moink_R1.3.0_app.bin网页 OTA(分区表未变);升级后已有的轮播图与设置都保留。 - V6 回归(R1.2.2 已验收项,抽检):GPIO 四档仍能切、「保存并重启」正常、A1 屏无需留白(四个留白勾保持不勾)。
墨印 MoInk 基线版本:R1.2.2
墨印 MoInk 基线版本:R1.2.2
R1.2.0(该 Release 与 tag 已删除)。
本次更新(相对 R1.2.0;R1.2.1 未单独发版,其修复一并含在本版)
1. 屏幕设置精简:删掉「A1 驱动」二级菜单
A1 屏实测通过后只保留「768×552 顺序直写」一种策略,800×600 对照诊断档连同固件接收路径一并删除。A1 现在与 A0 一样 1:1 铺满可见区,不需要手动设白边。
2. 新增「GPIO 设置」:SPI 与唤醒 / ADC 接法可配
换板改线不用再改固件重新编译:
| 档位 | SCK | MOSI | CS | DC | RST | BUSY | 唤醒 | 电池 ADC |
|---|---|---|---|---|---|---|---|---|
| 默认 | 4 | 6 | 7 | 1 | 3 | 10 | 5 | 0 |
| 排线 | 7 | 10 | 6 | 4 | 3 | 1 | 5 | 0 |
| 整合板 | 4 | 3 | 5 | 6 | 7 | 10 | 1 | 0 |
| 自定义 | 逐脚选 | 限 GPIO0–5 | 限 GPIO0–4 |
- 「自定义」逐脚选 IO,已选过的 IO 自动从其它下拉里移除,不会撞车。
- 改完点「保存并重启」—— 引脚只在开机时初始化,必须重启才生效。
- GPIO2 固定留给自锁脚,不出现在这八个脚里。
3. MOS 一键开机:新增自锁脚 GPIO2
固件上电第一件事就把 GPIO2 拉高(早于 NVS / WiFi / 屏初始化),开机瞬间维持供电;深睡前锁存电平,避免数字域掉电导致自锁电路断供。
4. ★ 升级不再重置设置(本版重点行为变化)
以前刷固件会重置 屏型 / A1 档位 / 左右镜像 / 休眠 / 唤醒 / 发射功率。现在只清理本版已废弃的键(a1_mode、a11_var),其余设置包括 GPIO 接法、热点名与密码原样保留。
- 意义:A1 设备升级后不会被打回 A0 驱动;排线 / 整合板接法的设备不会被打回默认引脚(否则表现为「升级完屏不亮」)。
- 例外:首次从 R1.2.1 及更早升到本版,NVS 里还没有 GPIO 记录,会落到「默认」档 —— 排线 / 整合板接法的设备请进页面选档、点一次「保存并重启」,此后升级不再复现。
5. 修复:电量一直显示「未连接」
固件里写死的分压比是 470k:100k(×5.7),与实装的 100k:100k(×2.0) 不符,会把电量整体放大 2.85 倍,正常电池被判成超过上限 → 一律显示「未连接」。已按实装改正。
6. 含 R1.2.1 的修复(该版未单独发布)
- Captive Portal 修复:HTTP 通配兜底 + 303 绝对门户 URL,解决部分手机连上热点后不自动弹出配置页;DNS 劫持只对 A/IN 查询作答,兼容 iOS 解析器。
- WiFi 默认发射功率 18 dBm → 10 dBm:解决部分 ESP32-C3 supermini 高功率下手机难以连接的问题(高/中/低三档数值不变,可在页面切换)。
- 裁剪 / 缩放更丝滑:松手后再做重算。
- 文本框不再残留:文字对象只在当前页面会话有效,不再写入
localStorage。
升级须知
- R1.2.0 / R1.2.1 的设备可直接网页 OTA:进设备页面「设置 → 系统维护与升级 → ① 升级」,上传
moink_R1.2.2_app.bin即可(分区表未变)。 - R1.1.x 及更早的设备必须线刷:分区表在 R1.2.0 变更过(新增 store 存储分区),只能用数据线整包刷
moink_R1.2.2_merged.bin。 - 升级不再重置设置(见上文第 4 条),热点名与密码保留。
- 传
.html只热更控制页,不重启,刷新浏览器即生效。 - 本版固件仍没有
/api/ota与/api/web(R1.2.0 起删除),R1.1.x 的旧页面无法升级本版设备,请使用本包内的页面。
兼容性
- api 保持 2:帧头格式(16B 头 + 2bpp 载荷)零变动,只是不再接受
hdr[2]=2的 800×600 帧。 - 算法基线 B2 12/12 MATCH,色彩与几何规格未变。
资产说明
- MoInk-FlashKit-R1.2.2.zip:Windows 一键刷机包,解压后双击 bat 即可(自动选串口、跳过蓝牙虚拟口);包内「使用说明.txt」含验收清单
- moink_R1.2.2_merged.bin:固件整包(R1.1.x 及更早线刷用,0x0 整包写入,含分区表,控制页已内嵌)
- moink_R1.2.2_app.bin:OTA 升级包(R1.2.0 起设备网页升级用)
- page-R1.2.2.html:控制页热更包(网页「① 升级」上传,免刷机)
版本校验
刷完在设备页面「设置 → 设备信息」应显示:版本 R1.2.2 / 接口 2。
真机验收清单(五项)
- V1 固件升级 + 设置保留(★本版重点):升级前先改「休眠档」「发射功率」、屏型选 A1 → 只上传
moink_R1.2.2_app.bin→ 设备重启后版本显示 R1.2.2,且上述设置保持升级前的值,热点名 / 密码不变 - V2 控制页热更:只上传
page-R1.2.2.html→ 不重启,刷新浏览器即生效 - V3 A1 屏:屏幕选 A1(已无「A1 驱动」二级菜单)→ 用非对称测试图验证 满屏无裁切 / 四角编号齐全 / 方向正确 / 无白边无条纹;若之前为 800×600 档勾过留白,请去掉四个留白勾
- V4 GPIO 设置:四档轮流选并「保存并重启」,每次都能正常启动传图;自定义档验证已选 IO 自动消失、ADC 不能选到 GPIO4 以上或 GPIO2
- V5 左右镜像:A1 固定正向,该勾选框对 A1 不再有作用(保留给 A0)
墨印 MoInk 基线版本:fw R1.0.11 + page R1.0.26
墨印 MoInk 基线版本:fw R1.0.11 + page R1.0.26
固件 fw R1.0.11(相对上一基线 fw R1.0.8)
- 修复 A1 屏图像中部竖向白线:屏幕扫描分辨率改为控制器原生 800×600 全栅极驱动,内容垂直 552→600 / 水平 768→800 双向最近邻拉伸铺满(经真机两轮裁决定案:此前 768×552 欠驱动 48 条栅极所致;A0 屏不受影响)
- WiFi 热点信道改 6、发射功率三档可调,改档即时生效
- OTA 升级改逐扇区先擦后写 + 最小校验,更抗中断
- 保存配置节流、图像缓存双槽 LRU
- A1.1 屏(两半刷新批次)保留 V1–V8 驱动变体自查矩阵
- 占用:RAM 12.2% / Flash 60.9%(完整清单见仓库 docs/CHANGELOG.md)
创作页面 page R1.0.26(相对 page R1.0.22)
- 新增「标准」色彩档并设为默认:专业标定定稿参数(γ1.75,黄/红更亮更正),旧 sRGB 档保留可选
- WiFi 功率设置下拉、A1.1 变体下拉
- 拍立得 / 便签双模式、文字编辑、四色底色等沿袭 R1.0.22 全部能力(完整清单见仓库 docs/CHANGELOG.md)
资产说明
- MoInk-FlashKit-fwR1.0.11_pageR1.0.26.zip:Windows 一键刷机包,解压后双击 bat 即可;电脑没有 Python 时会引导自动下载安装(首次刷机还会自动 pip 安装 esptool)
- moink_R1.0.11_merged.bin:固件整包(USB 刷机,0x0 整包写入,页面已内嵌)
- moink_R1.0.11_app.bin:OTA 升级包(设备网页「设置」页上传;R1.0.8 及以上均可直升)
- page-R1.0.26.html:创作页面热更包(设备网页「设置」页上传,免刷机)
刷机方式
设备用数据线接电脑,解压刷机包后双击 MoInk一键刷机.bat,脚本自动选串口(跳过无 VID 的蓝牙虚拟口)。若卡在 "Stub running...",拔插 USB 后在命令行运行 python flash_on_pc.py --no-stub。
从旧版本升级(免数据线)
- 已能开机的设备:网页「设置」页先上传 moink_R1.0.11_app.bin(固件 OTA,失败自动回滚),重启后再热更 page-R1.0.26.html 即可;刷整包则一步到位。
- OTA 中途断传/校验失败会自动回滚旧固件,不会变砖,重传即可。
本版本为当前基线版本。
墨印 MoInk 基线版本:fw R1.0.8 + page R1.0.22
墨印 MoInk 基线版本:fw R1.0.8 + page R1.0.22
固件 fw R1.0.8
- 全面代码审查后的批量整合修复:残影清理与传图互斥、页面校验三态缓存提速、上传链路喂看门狗、NVS 写入收敛等(完整清单见仓库 docs/CHANGELOG.md)
- 占用:RAM 12.0% / Flash 60.5%
创作页面 page R1.0.22
- 拍立得 / 便签双模式、所见即所得文字编辑、四色底色与描边、竖屏编辑空间等(完整清单见仓库 docs/CHANGELOG.md)
资产说明
- MoInk-FlashKit-fwR1.0.8_pageR1.0.22.zip:Windows 一键刷机包,解压后双击 bat 即可;电脑没有 Python 时会引导自动下载安装(首次刷机还会自动 pip 安装 esptool)
- moink_R1.0.8_merged.bin:固件整包(USB 刷机,0x0 整包写入)
- moink_R1.0.8_app.bin:OTA 升级包(设备网页「设置」页上传)
- page-R1.0.22.html:创作页面热更包(设备网页「设置」页上传,免刷机)
刷机方式
设备用数据线接电脑,解压刷机包后双击 MoInk一键刷机.bat,脚本自动选串口(跳过无 VID 的蓝牙虚拟口)。若卡在 "Stub running...",拔插 USB 后在命令行运行 python flash_on_pc.py --no-stub。
本版本为当前基线版本。