OLED 播放 GIF图片 Adruino
最近在玩硬件,发现没有什么能够便利生成AdruinoGIF库的工具,自己手搓了一个
ps:需求:打包版度盘链接,单个资源还在审核,通过后会更新进去
GIF图
拆帧工具:GifSplitter
取模工具:Img2Lcd(支持批量取模很舒适)
库以及添加工具:https://github.com/caoshifan/Gifshow
GIF动图调整工具(可以不用):GIF Movie Gear
目录
一、环境
二、具体实现
2.1 动图调整
2.2 拆帧
2.3 取模
2.4 集成到Adruino库
2.5 使用示例
一、环境
软件:Adruino
硬件:ssd1306驱动的oled屏128*64
(ps:如果你是其他驱动的,需要在源码里将初始化函数改一下)
基本流程思路:调整你的GIF图---拆帧---取模---使用工具集成到库---打包导入Adruino库---使用。(调整,拆帧,取模算是常规操作了,熟悉的可以直接跳转后面)
二、具体实现
2.1 动图调整
GIF Movie Gear导入GIF图后就在如下界面,界面下的每一帧都可以换位删除复制等等。如果有更进一步的需求,可以查阅相关资料。简单调整后点击左上角第三个图标保存即可。
2.2 拆帧
打开GifSplitter,选择输入的GIF图,如果勾选"以文件名自动创建输出文件夹",会在图片路径下自动生成帧拆解文件,当然你也可以指定文件夹输出。
ps:注意背景色调整。若GIF为白色背景,需要将背景改为白色。如果为黑色背景白色画笔则保持默认黑色即可
点击开始分离会在你选择的目录下生成每一帧的图片类似如下:
2.3 取模
打开Img2Lcd工具。打开之前文件夹的第一个.bmp文件
注意几个参数设置,输出为C语言数组,灰度为单色,宽高128*64,左下方无需勾选,然后点击批量转换即可。
转换完成后会生成一个Batch文件夹,其中就是我们需要的数组文件了。
2.4 集成到Adruino库
打开下载的Gifshow文件夹,其中add_gif_Tool是添加工具,MyLibrary是Adruino库文件
在MyLibrary/src/frames文件夹下,建立一个新的文件夹,文件名用来描述Gif图(注意全部小写),然后将batch文件夹下的.c文件全部拷贝到新建的文件夹下。我这里新建了一个bath文件夹,用来存放洗澡的Gif图。
然后打开add_gif_Tool/dist文件夹下的“GIFManager.exe”应用程序(非windows系统可以运行win_ui.py文件,这个需要python环境。)
点击选择GIF文件夹,路径指向Adruino库文件下你上一步新建的文件夹,然后点击更新库即可。
完成更新后将MyLibrary文件夹压缩为.zip文件(必须是.zip啊不能是rar,7z啥的),然后打开Adruino,项目---导入库---添加.zip库添加即可。
2.5 使用示例
导入库后,在文件---示例---MyLibrary---showgif使用示例
主要使用方式如下:注意啊,BATH就是你之前新建的文件夹名称的全大写,然后烧录即可
myDisplay.show(DisplayModel::BATH);
ps:别忘了初始化哈,这是示例代码,懒得找的可以直接用这个,完事
#include <Arduino.h>
#include "MyLibrary.h"
// 定义 OLED 屏幕的尺寸和复位引脚
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
// 初始化 MyLibrary
MyLibrary myDisplay(SCREEN_WIDTH, SCREEN_HEIGHT, OLED_RESET);
void setup() {
Serial.begin(115200);
myDisplay.begin(); // 初始化屏幕
myDisplay.setFrameDelay(20); // 设置每帧间隔时间(毫秒)
}
void loop() {
static bool isSnow = true; // 交替播放 SNOW 和 BATH
myDisplay.show(isSnow ? DisplayModel::DANCE : DisplayModel::BATH);
isSnow = !isSnow; // 切换模式
for (int i = 0; i < 200; i++) { // 播放 200 次帧动画后切换模式
myDisplay.update();
delay(50); // 防止过快刷新
}
}