树莓派PICO-OLED图片和视频

树莓派PICO-oled图片和视频

一.思路

我们在使用micropython来控制oled时,使用到了ssd1306的库,通过ssd1306引入的framebuf我们可以实现将一帧图片数据写入帧缓冲区,然后oled可以显示一帧图片,通过连续写入帧,就可以让oled显示一段视频

然而oled12864属于黑白显示的一类,那么我们就需要对帧数据进行预处理:我们将一段视频.mp4或者动画.gif按照一定的码率剪切为单独的帧图片,将所有的帧图片转化为128x64的二值化图片,然后让单片机逐一播放,以达到我们想要的效果。

注:本案例将采用oled12864+micropython+raspberry pico完成,案例对于其他使用micropython编程的单片机比如:ESP32同样适用

本案例将用到的软件下载:Hrilug/CSDN (github.com)

二.实现数据预处理


       首先,对于视频文件,我们需要转换为.gif文件,你可以通过网络在线转化器Online File Converter (cdkm.com)。这里你需要设置.gif的帧数,这直接决定你后来oled的刷新率和你的文件大小了,但是oled12864的刷新率也是有极限的,我这里直接推荐你的使用1-10帧提取视频文件到gif。      


       现在你已经有了GIF文件,但是oled12864不能直接播放GIF动画而是一帧一帧的图片,所以我们把GIF文件拆开,这里我们需要使用软件gitsplitter,这是个软件以及类似软件很多,大家自行查找。然后得到一帧一帧的BMP格式的图片。


       然而,这还并不是我们想要的帧图片,我们需要将帧图片调整大小为128x64像素,我们可以使用批量图片处理软件图片转化器。

      

        最后,我们将BMP帧图片转换为PBM二值图片类型。我在这里先引入一个文件类型:PBM。对于.pbm的图片文件可以存储二值化的图片,并且占用内存小,同样也方便我们操作。使用PBM文件存储单独的帧,然后让单片机读取让oled显示,也是目前比较主流的oled视频播放的方法了,相对于一帧一帧地提取图片色值并把数组写进txt方便得多。我们使用python脚本实现转换。

       注:将BMP帧放在python脚本同一个文件夹下,PIL库下载pip3 install pillow

from PIL import Image
import time

for i in range(1,122):
    print(i)
    file=str(i)+'.bmp'
    im=Image.open(file)
    im=im.convert('1')
    im.save(str(i)+'.pbm')
    time.sleep(0.1)

三.实现


       我们将ssd1306.py库文件、main.py主程序、还有含有我们预处理好的PBM文件的PBM文件夹上载到PICO开发板。

       Main.py参考来自博主YunTianMingg

from ssd1306 import SSD1306_I2C
from machine import I2C,Pin
import time,machine,framebuf

i2c=I2C(0,sda=Pin(0), scl=Pin(1), freq=2000000)
display = SSD1306_I2C(128,64,i2c)

def show(dirt):
    with open(dirt,'rb') as f :
        f.readline()
        data = bytearray(f.read())
        fbuf = framebuf.FrameBuffer(data,128,64,framebuf.MONO_HLSB)
        display.fill(0)
        display.blit(fbuf,0,0)#如果不居中,可以修改中间的参数
        display.show()
        del fbuf#清理内存

for i in range(1,122):
    dirt = 'pbm/'+ str(i) + '.pbm' #文件地址
    show(dirt)
    time.sleep(0.2)#这个延时的长度取决于各自的帧率

参考:

 如何高效使用Micropython看你喜欢看的视频_YunTianMingg丶的博客

 ESP32 Python 用OLED播放Bad Apple_scott_xiao的博客

  • 13
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 树莓Pico是树莓推出的一款微型电脑,Pico中文版是针对中国市场推出的版本。Pico-Python-SDK是树莓官方提供的软件开发工具包,用于编写和运行Python程序。Pico-Python-SDK中文版是根据中国用户的需求进行本土化开发的版本。 树莓Pico是一款体积小巧但功能强大的微型电脑,搭载了ARM Cortex-M0+处理器和26个GPIO口,可用于连接各种传感器、执行各种控制任务。同时,Pico支持MicroPython和C/C++两种编程语言,非常适合初学者和嵌入式系统开发人员。 Pico-Python-SDK中文版是官方提供的软件开发工具包,它提供了一系列的API和库函数,可以帮助开发者更方便地编写和调试Python程序。无论是控制外部硬件设备还是实现各种功能,Pico-Python-SDK都提供了丰富的功能和示例代码,使开发工作更加便捷。 Pico-Python-SDK中文版还提供了中文文档和教程,有助于开发者更快速地上手。通过学习这些文档和教程,开发者可以了解Pico的基本原理、功能特性以及编程方法,从而高效地开发出各种应用。 总的来说,树莓Pico-Python-SDK中文版为中国用户提供了一个方便、易用的软件开发平台,帮助开发者快速上手并实现各种创意和项目。无论是学习编程还是进行嵌入式系统开发,Pico-Python-SDK中文版都是一个不错的选择。 ### 回答2: 树莓pico-python-sdk-中文版是为了方便中国开发者使用而推出的一款软件开发工具包。它是基于树莓pico微控制器设计的,通过使用Python语言进行开发。该SDK提供了丰富的功能和接口,使得使用者能够轻松地进行树莓pico的开发工作。 树莓pico-python-sdk-中文版包含了各种模块和库,如GPIO库、PWM库、I2C库、SPI库等,这些库可以帮助开发者通过编写Python代码来操控各种外设和传感器。例如,使用GPIO库可以控制LED灯的开关,使用PWM库可以控制舵机的转动,使用I2C库可以与其他设备进行通信,使用SPI库可以实现高速数据传输等等。 此外,树莓pico-python-sdk-中文版还提供了丰富的示例代码和文档,帮助开发者快速上手。开发者可以参考这些示例代码和文档,了解如何使用SDK中的功能和接口,从而加速自己的开发进程。 总之,树莓pico-python-sdk-中文版是一款功能强大、易于学习和使用的软件开发工具包。它不仅方便中国开发者使用树莓pico进行开发工作,还提供了丰富的功能和接口,使得开发者能够更加便捷地实现各种应用和项目。无论是初学者还是有经验的开发者,都可以通过使用这个SDK来实现自己的创意和想法。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值