一、项目背景与准备工作
上次写的python模拟数组有点难用导致点赞的人太少了,这次出个超简单的,有手就能实现的教程,仅用30行代码就能实现45s左右的oled视频播放。
首先,我们需要准备以下硬件:
- ESP8266 开发板
- 合适的 OLED 显示屏(如 SSD1306 等)
- 连接线路若干
在软件方面,确保已经安装好 Arduino IDE,并添加了 ESP8266 开发板支持库以及相应的 OLED 驱动库。
二、环境搭建
1、安装Arduino IDE的应用
Arduino下载、安装及配置(含中文配置步骤)_arduino官网下载-CSDN博客
记得把界面改为中文更好用!
2、安装U8g2lib的库
安装成功
3、导入esp8266的硬件库
8266_package_3.1.1_arduinome.exe官方版下载丨最新版下载丨绿色版下载丨APP下载-123云盘
https://www.123pan.com/s/dJrKVv-b1GB
下载,解压,安装一气呵成。然后重启arduino的界面就可以看见这里有选择了。
NodeMCU 0.9和NodeMCU 1.0随便选都行。
到达这里我们已经完成99%,环境已经搭建完成。只差代码了。
4、新建项目代码copy
把image.h文件和程序文件ino同一个文件夹目录下!
把image.h文件和程序文件ino同一个文件夹目录下!
把image.h文件和程序文件ino同一个文件夹目录下!
演示文件链接:https://pan.quark.cn/s/5ee10a74032b
5、接线示意图
#define SCL 12
#define SDA 13
//然后这个可以修改,根据ESP8266对于Arduino的映射图按照实际连线
// SCL -----12----D7
// SDA -----13----D8
三、代码实现步骤
代码很简单就只有30行。
核心就是调用U8g2的库对生成的显示数组进行播放。
为啥用ESP8266呢,原因有2;
1、ESP8266用空间太多了,在不接内存卡的情况下,把显示数组放进去flash里面调用,正常存个60秒简简单单。
2、ESP8266基于arduino开发属于有手就行的,容易上手,不需要太多基础。
整套代码难点在生成头文件的工具不好找,还有就是需要使用合适的方法把显示数组代码放进去flash内。
成功实现的朋友记得给我点个赞吧!感谢!!!
#include <Arduino.h>
#include <U8g2lib.h>
#include <Wire.h>
#include "image.h"
#define SCL 12
#define SDA 13
#define dx 113
#define dy 64
U8G2_SSD1306_128X64_NONAME_1_SW_I2C u8g2(U8G2_R0, /* clock=*/ SCL, /* data=*/ SDA, /* reset=*/ U8X8_PIN_NONE);
void dispaly(void)
{
for(int i=0;i<584;i++) {
u8g2.firstPage();
do {
u8g2.drawXBMP(8, 0, dx, dy, BMP1[i]); // (0,0)为显示的起始位置;(113,64)为图片的大小,需要根据实际图片的大小来更改
} while (u8g2.nextPage());
delay(30);
}
}
void setup()
{
u8g2.begin();
}
void loop()
{
dispaly();
}
#ifndef IMAGE_H
#define IMAGE_H
//width:113 heights:'64
#undef ICACHE_RODATA_ATTR
#define ICACHE_RODATA_ATTR __attribute__((section(".irom.text")))
#undef PROGMEM
#define PROGMEM ICACHE_RODATA_ATTR
const unsigned char BMP1[][960]PROGMEM = {
{
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x01,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x01,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x01,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x01,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x01,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x01,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x01,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x01,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x01,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,
0xF1,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xF5,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xEF,0xFF,
0xFF,0xCF,0xF8,0xFF,0xDF,0xFF,0xFF,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xEF,0xFF,0xFF,
0xFB,0xF3,0xFF,0xEF,0xFF,0xFF,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF9,
0xE7,0xFF,0xAF,0xFF,0xFF,0x01,0xFF,0xFF,0xFF,0xFF,0x7F,0xDE,0xFF,0xFF,0xFD,0xEF,
0xFF,0xB7,0xFF,0xFF,0x01,0xFF,0xFF,0xFF,0xFF,0xBF,0x3F,0xFC,0xFF,0x1E,0xCF,0xFF,
0xF7,0xFF,0xFF,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFD,0xFF,0xBE,0xCF,0xFF,0x78,
0xFC,0xFF,0x01,0xFF,0xFF,0xFF,0xFF,0xDF,0xFF,0xFD,0xFF,0xBE,0xDF,0xBF,0xFF,0xFF,
0xFF,0x01,0xFF,0xFF,0xFF,0xFF,0xDF,0xFF,0xFD,0xFF,0xAE,0xDE,0x7F,0xFF,0xFB,0xFF,
0x01,0xFF,0xFF,0xFF,0xFF,0xDF,0xBF,0xFD,0xFF,0xFE,0xDE,0x7F,0xFF,0xFB,0xFF,0x01,
0xFF,0xFF,0xFF,0xFF,0xDF,0xBF,0xFD,0xFF,0xFE,0xDF,0xFF,0xFE,0xF9,0xFF,0x01,0xFF,
0xFF,0xFF,0xFF,0xDF,0xBF,0xFD,0xFF,0xFE,0xDF,0xFF,0xFE,0xFD,0xFF,0x01,0xFF,0xFF,
0xFF,0xFF,0xDF,0xBF,0xFD,0xFF,0xFF,0xEF,0xFF,0xFE,0xFC,0xFF,0x01,0xFF,0xFF,0xFF,
0xFF,0xDF,0xBF,0xFE,0xFF,0xFD,0xEF,0xFF,0xFE,0xFE,0xFF,0x01,0xFF,0xFF,0xFF,0xFF,
0xBF,0x3F,0xFE,0xFF,0xFB,0xF7,0xFF,0xFE,0xFE,0xFF,0x01,0xFF,0xFF,0xFF,0xFF,0x7F,
0xC6,0xFF,0xFF,0xE7,0xF9,0xFF,0xCE,0xFE,0xFF,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0x1F,0xFC,0xFF,0xBC,0xFE,0xFF,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFF,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x01,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x01,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x01,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x01,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x01,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x01,
}, /*0000.png*/
//省略500+数组>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
#endif
然后用我自制的MP4转数组工具生成头文件,自制的python文件在上一篇文章中。
注意:暂时没更新最新的,但最新的代码在仓库,惩罚那些没有看清楚的朋友,现有教程只能生成行列式的,而这次需要的逐行式的生成方式。
(python)一键生成ikun的oled的显示数组-CSDN博客
把显示数组放进flash的核心就是五行代码,重新定义PROGME,并且把数组放进".irom.text"位置
#undef ICACHE_RODATA_ATTR
#define ICACHE_RODATA_ATTR __attribute__((section(".irom.text")))
#undef PROGMEM
#define PROGMEM ICACHE_RODATA_ATTR
const unsigned char BMP1[][960] PROGMEM = {}
esp8266显示meme动画