(4)ESP32 Python 用OLED播放Bad Apple

简介: 有屏幕的地方就有bad apple

之前已经实现过了,把OLED当作一个状态显示器。但是,仅仅显示文字肯定是不够炫酷的,因为有屏幕的地方就应该有Bad Apple。

这次我们尝试一下把OLED播放一下 Bad Apple.

Bad Apple看似是一段视频,但是我们这么来想这个问题。视频打散成很多张图片,按照每秒12贞的播放,那不就是一个视频了么。

首先,我们来体验一次把图片展示在OLED上面,需要展示的图片要是pbm格式(PBM格式由Jef Poskanzer在20世纪80年代发明,为了便于通过电子邮件,用ASCII码表示单色位图,能够承受一般的文本格式的变动。)


fromssd1306importSSD1306_I2C ,framebuffrommachineimportPin, SoftI2Coled=NoneclassBadAppleOled:
definit_oled(self):
globaloledi2c=SoftI2C(sda=Pin(21), scl=Pin(22),freq=600000)
i2c.scan() 
print(i2c)
oled=SSD1306_I2C(128, 64, i2c)
defshow_pic(self):
globaloledshow_pbm='/data/pyamp/example/pbm/rangcha.pbm'withopen(show_pbm, 'rb') asf:
f.readline()
f.readline()
data=bytearray(f.read()) 
fbuf=framebuf.FrameBuffer(data,128,64, framebuf.MONO_HLSB)
oled.fill(0)
oled.blit(fbuf, 0,0)
oled.show()
delfbuf


调用代码


bad_apple_oled=BadAppleOled()
bad_apple_oled.init_oled()
bad_apple_oled.show_pic()


最终结果如下


image.png


代码解释:

  1. 首先将文件读取成二进制  with open(show_pbm, 'rb')
  2. 将文件转换成字节数组 data = bytearray(f.read())
  3. 将图片的字节数组送入 framebuf ,并指定大小。  fbuf= framebuf.FrameBuffer(data,128,64, framebuf.MONO_HLSB)
  4. OLED 清屏, 并展示framebuf内容,展示完成后,删除 framebuf



oled.fill(0)
oled.blit(fbuf, 0,0)
oled.show()
delfbuf



完成了基础的图片展示后,我们尝试一下把一个视频文件的连续PNG转换成pbm并进行展示。

fromssd1306importSSD1306_I2C ,framebuffrommachineimportPin, SoftI2Cimportuosoled=NoneclassBadAppleOled:
definit_oled(self):
globaloledi2c=SoftI2C(sda=Pin(21), scl=Pin(22),freq=400000)
i2c.scan() 
print(i2c)
oled=SSD1306_I2C(128, 64, i2c)
defshow_pic(self):
globaloledshow_pbm='/data/pyamp/example/pbm/rangcha.pbm'withopen(show_pbm, 'rb') asf:
f.readline()
f.readline()
data=bytearray(f.read()) 
fbuf=framebuf.FrameBuffer(data,128,64, framebuf.MONO_HLSB)
oled.fill(0)
oled.blit(fbuf, 0,0)
oled.show()
delfbufdefbad_apple_v1(self):
globaloledbpm_files_list=uos.listdir('data/pyamp/example/bpm_files')
forbpm_entityinbpm_files_list: 
show_bpm='/data/pyamp/example/bpm_files/'+bpm_entity# print(show_bpm)withopen(show_bpm, 'rb') asf:
f.readline()
f.readline()
data=bytearray(f.read()) 
fbuf=framebuf.FrameBuffer(data,128,64, framebuf.MONO_HLSB)
oled.fill(0)
oled.blit(fbuf, 0,0)
oled.show()
delfbuf



image.png



但是,一般视屏都会很长的,不可能无限制的全部装在在ESP32当中。所以,有TF接口的开发板可以将图片存在SD卡当中进行播放哦。

目录
相关文章
|
8月前
|
Python
Python使用pygame播放MP3
Python使用pygame播放MP3
104 0
|
6月前
|
Python
【Python】已解决:re.error: bad escape \z at position 4
【Python】已解决:re.error: bad escape \z at position 4
424 0
|
4月前
|
编解码 Python Windows
python有没有包 可以检测 这个视频是否可以播放
python有没有包 可以检测 这个视频是否可以播放
|
4月前
|
Python
python朗读播放中文和英文
python朗读播放中文和英文
|
IDE Java 程序员
10w+播放!自动化办公,用到了哪些实用的Python技术?
10w+播放!自动化办公,用到了哪些实用的Python技术?
|
存储 Python
Python 还能播放音频,而且花样多多?
Python 还能播放音频,而且花样多多?
|
8月前
|
数据采集 JSON API
使用Python获取B站视频并在本地实现弹幕播放功能
使用Python获取B站视频并在本地实现弹幕播放功能
173 0
|
8月前
|
计算机视觉 Python
OpenCV实现视频的暂停播放和继续播放功能实战(附Python源码)
OpenCV实现视频的暂停播放和继续播放功能实战(附Python源码)
398 0
|
自动驾驶 API 语音技术
无人驾驶之交通识别项目--用Python实现语音播放“提示”
无人驾驶之交通识别项目--用Python实现语音播放“提示”
176 0
|
传感器 运维 监控
这个夏天太热了,只能用他来保命,ESP32 + Python做一个检测紫外线设备
这个夏天太热了,只能用他来保命,ESP32 + Python做一个检测紫外线设备
192 0