之前已經(jīng)實(shí)現(xiàn)過了隅熙,把OLED當(dāng)作一個(gè)狀態(tài)顯示器哲戚。但是,僅僅顯示文字肯定是不夠炫酷的杨蛋,因?yàn)橛衅聊坏牡胤骄蛻?yīng)該有Bad Apple。
這次我們嘗試一下把OLED播放一下 Bad Apple.
Bad Apple看似是一段視頻,但是我們這么來想這個(gè)問題逞力。視頻打散成很多張圖片曙寡,按照每秒12貞的播放,那不就是一個(gè)視頻了么寇荧。
首先举庶,我們來體驗(yàn)一次把圖片展示在OLED上面,需要展示的圖片要是pbm格式(PBM格式由Jef Poskanzer在20世紀(jì)80年代發(fā)明揩抡,為了便于通過電子郵件户侥,用ASCII碼表示單色位圖,能夠承受一般的文本格式的變動(dòng)峦嗤。)
from ssd1306 import SSD1306_I2C ,framebuf
from machine import Pin, SoftI2C
oled = None
class BadAppleOled:
def init_oled(self):
global oled
i2c = SoftI2C(sda=Pin(21), scl=Pin(22),freq=600000)
i2c.scan()
print(i2c)
oled = SSD1306_I2C(128, 64, i2c)
def show_pic(self):
global oled
show_pbm = '/data/pyamp/example/pbm/rangcha.pbm'
with open(show_pbm, 'rb') as f:
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()
del fbuf
調(diào)用代碼
bad_apple_oled = BadAppleOled()
bad_apple_oled.init_oled()
bad_apple_oled.show_pic()
最終結(jié)果如下
代碼解釋:
首先將文件讀取成二進(jìn)制 with open(show_pbm, 'rb')
將文件轉(zhuǎn)換成字節(jié)數(shù)組 data = bytearray(f.read())
將圖片的字節(jié)數(shù)組送入 framebuf 蕊唐,并指定大小。 fbuf= framebuf.FrameBuffer(data,128,64, framebuf.MONO_HLSB)
OLED 清屏烁设, 并展示framebuf內(nèi)容替梨,展示完成后,刪除 framebuf
oled.fill(0)
oled.blit(fbuf, 0,0)
oled.show()
del fbuf
完成了基礎(chǔ)的圖片展示后装黑,我們嘗試一下把一個(gè)視頻文件的連續(xù)PNG轉(zhuǎn)換成pbm并進(jìn)行展示副瀑。
from ssd1306 import SSD1306_I2C ,framebuf
from machine import Pin, SoftI2C
import uos
oled = None
class BadAppleOled:
def init_oled(self):
global oled
i2c = SoftI2C(sda=Pin(21), scl=Pin(22),freq=400000)
i2c.scan()
print(i2c)
oled = SSD1306_I2C(128, 64, i2c)
def show_pic(self):
global oled
show_pbm = '/data/pyamp/example/pbm/rangcha.pbm'
with open(show_pbm, 'rb') as f:
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()
del fbuf
def bad_apple_v1(self):
global oled
bpm_files_list = uos.listdir('data/pyamp/example/bpm_files')
for bpm_entity in bpm_files_list:
show_bpm = '/data/pyamp/example/bpm_files/'+bpm_entity
# print(show_bpm)
with open(show_bpm, 'rb') as f:
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()
del fbuf
但是,一般視屏都會(huì)很長的恋谭,不可能無限制的全部裝在在ESP32當(dāng)中糠睡。所以,有TF接口的開發(fā)板可以將圖片存在SD卡當(dāng)中進(jìn)行播放哦疚颊。