一、测试连接

 https://www.waveshare.net/w/upload/7/71/E-Paper_code.zip

解压后cd到examples目录

cd /e_paper/RaspberryPi_JetsonNano/python/examples

将40pin引脚插好或使用杜邦线连接好8条线

python3 epd_3in52_test.py#例如3.52英寸的墨水屏

若屏幕能正常显示则说明连接无误

二、配置环境

首先建立一个虚拟环境否则ffmpeg库可能无法正常下载

python3 -m venv --system-site-packages .slowmovie#  .为隐藏的
source .slowmovie/bin/activate#启动虚拟环境
pip3 install ffmpeg-python
pip3 install pillow
#请自行安装所需的库
pip  list#查看

三、程序

使用不同的屏幕请注意在不同的例程中进行修改,这里是3.52寸,不同屏幕在刷新时,代码略有不同

ffmpeg.input('视频的路径 格式/x/x/x.mp4',ss=frame_number/30).output('存储截取出来帧的地方/frame.bmp', vframes=1, s=f'{360}*{240}')分辨率修改为与对应屏幕相同这里是360*240

#!/usr/bin/python
# -*- coding:utf-8 -*-
import sys
import os
picdir = os.path.join(os.path.dirname(os.path.dirname(os.path.realpath(__file__))), 'pic')
libdir = os.path.join(os.path.dirname(os.path.dirname(os.path.realpath(__file__))), 'lib')
if os.path.exists(libdir):
    sys.path.append(libdir)

import logging
from waveshare_epd import epd3in52#屏幕型号
import time
from PIL import Image,ImageDraw,ImageFont
import traceback
import ffmpeg

logging.basicConfig(level=logging.DEBUG)

try: 
    logging.info("epd3in52 Demo")
    
    epd = epd3in52.EPD()
    logging.info("init and Clear")
    epd.init()
    epd.display_NUM(epd.WHITE)
    epd.lut_GC()
    epd.refresh()

    epd.send_command(0x50)
    epd.send_data(0x17)
    time.sleep(2)
 
    
    total_frames = int(ffmpeg.probe('视频的路径 格式/x/x/x.mp4')['streams'][0]['nb_frames'])
    for frame_number in range(total_frames):
        ffmpeg.input('视频的路径 格式/x/x/x.mp4',ss=frame_number/30).output('存储截取出来帧的地方/frame.bmp', vframes=1, s=f'{360}*{240}').run(overwrite_output=True)
        logging.info(f"display frame {frame_number + 1}/{total_frames}")
        Himage = Image.open(os.path.join(picdir, 'frame.bmp'))
        epd.init()
        epd.display(epd.getbuffer(Himage))
        epd.lut_GC()
        epd.sleep()
        time.sleep(100)
        epd.refresh()

    logging.info("Clear...")
    epd.Clear()
    
    logging.info("Goto Sleep...")
    epd.sleep()
    
except IOError as e:
    logging.info(e)
    
except KeyboardInterrupt:    
    logging.info("ctrl + c:")
    epd3in52.epdconfig.module_exit(cleanup=True)
    exit()

通过修改time.sleep()来实现不同延时

四、效果

参考文献:https://github.com/TomWhitwell/SlowMovie.git

                  https://www.waveshare.net/w/upload/7/71/E-Paper_code.zip

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐