⭐ 使用本教程前,请先支持一下这个开源项目:
- Star ⭐ — 点击 GitHub 仓库右上角 ⭐ Star,收藏本项目,方便以后找到
- Fork 🍴 — 点击 Fork,把项目复制到你的 GitHub 账号下,可以自由修改
- Download 📥 — 点击绿色 Code 按钮 → Download ZIP,下载到本地开始复刻
📸 操作示意图:
MindPaw 使用 128×64 OLED 显示屏 显示表情图标。图片需要经过以下流水线:
源文件 (BMP/PNG/JPG) → bmp.py → 128×64 二值 BMP → PCtoLCD2002 → C 数组 → image.cpp
pip install Pillowcd Picture\PCtoLCD2002
# 基本用法
python bmp.py -i input.png -o output.bmp
# 调整二值化阈值(浅色图片用低阈值)
python bmp.py -i input.png -o output.bmp -t 100
# 批量转换(示例批处理脚本)
for %f in (..\MindPaw_oled\*.png) do python bmp.py -i "%f" -o "..\MindPaw_oled\%~nf.bmp"| 参数 | 说明 | 默认值 |
|---|---|---|
-i, --input |
输入图片路径 | input.png |
-o, --output |
输出 BMP 路径 | output.bmp |
-t, --threshold |
二值化阈值 (0-255) | 128 |
阈值调优技巧:
- 原始图片偏暗 → 降低阈值(
-t 80) - 原始图片偏亮 → 提高阈值(
-t 180) - 线条画/漫画 → 保持
128即可
- 准备一张图片(建议 128×64 或更大)
- 先用
bmp.py转为 128×64 黑白 BMP:
python bmp.py -i Picture\MindPaw_oled\hi.png -o hi.bmp- 运行
Picture\PCtoLCD2002\PCtoLCD2002.exe - 界面说明:
- 左侧:图形预览区
- 右侧:参数设置区
- 底部:生成的 C 代码区
- 点击菜单 文件 → 打开图像
- 选择上一步生成的
.bmp文件 - 确认显示正常
在右侧面板设置:
| 参数 | 设置值 | 说明 |
|---|---|---|
| 取模方式 | 逐行式 | OLED 的 SSD1306 驱动方式 |
| 每行显示 | 128 点 | OLED 宽度 |
| 每页显示 | 64 点 | OLED 高度 |
| 字节内点阵 | 高位在前 | 与 U8g2 库匹配 |
| 输出格式 | C 语言 | 生成 C 代码 |
| 码制 | 十六进制 | 最常用 |
- 点击 参数 → 生成图像数据
- 底部代码区会生成类似内容:
{0x00, 0x80, 0x40, 0x20, ...} // 共 1024 字节 (128 × 64 / 8)- 将生成的数组复制到
image.cpp中 - 按照已有格式添加:
// 在 image.cpp 添加
const unsigned char myEmoji[] PROGMEM = {
// 粘贴 PCtoLCD2002 生成的代码
};- 在
main.cpp的drawXBMP()中调用:
do {
u8g2.drawXBMP(0, 0, 128, 64, myEmoji);
} while (u8g2.nextPage());Picture/MindPaw_oled/ 目录下的源文件:
| 文件名 | 对应表情 | image.cpp 常量名 |
|---|---|---|
hi.bmp |
开心/打招呼 | hi |
gogo.bmp |
生气 | angry |
did.bmp |
错误/困惑 | error |
dowhat2.bmp |
好奇 | dowhat |
love.bmp |
喜爱 | love |
error.bmp |
难过 | sick |
yun.bmp |
晕 | yun |
cloud.bmp |
多云天气 | cloud |
sun.bmp |
晴天 | sun |
rain.bmp |
雨天 | rain |
time-svgrepo-com.bmp |
时钟 | timeimage |
wifi-problem-svgrepo-com.bmp |
WiFi 断连 | wifi |
注意:部分文件名与
image.cpp中的常量名不完全对应。添加新表情时请先确认常量名再替换。
