RPi Zero PhotoPainter

来自Waveshare Wiki
跳转至: 导航搜索
{{{name2}}}
{{{name3}}}
功能简介
特性 E6全彩墨水屏电子相框
分辨率 800 × 480
显示颜色 黑、白、绿、蓝、红、黄
' 无特性,不解释
' 无特性,不解释
接口

图片制作

  • 使用PS等工具制作散点图,请参考:使用Photoshop制作散点图
  • 使用我们编写的工具转换图片,应用程序及源代码:六色抖动图片转换工具
    • 该程序可将图片转换成合适的分辨率并使用抖动算法进行优化,支持绝大多数格式的图片,会识别图片的方向并自动拉伸和剪裁
    • 使用方法:直接将图片拖放到“convert.exe”上面可以进行单张转换图片,或者将所有图片放到文件夹中然后双击“converterTo6color_all.cmd”进行批量转换
    • 注意:该程序仅为了方便客户使用而开发并开源,不对其提供技术支持

Windows使用工具

  • 单张图片转换

将图片拖到 convert.exe 上即可

  • 批量转换图片

将图片、convert.exe、converterTo6color_all.cmd 放在一个文件夹里面,然后双击converterTo6color_all.cmd 即可

MAC使用工具

将图片、convert、converterTo6color_all 放在一个文件夹
打开终端,进入对应的文件夹

cd xxxx/xxx/xxx/
  • 单张图片转换

输入命令,给予convert可执行权限

sudo chmod +x convert

转换图片

./convert 图片名称
  • 批量转换图片

要先对 convert 文件进行权限操作给予后才行
输入命令,给予converterTo6color_all.sh可执行权限

sudo chmod +x converterTo6color_all.sh

转换图片

./converterTo6color_all.sh

预搭建系统简介

  • 默认搭建好 AI 大模型,可以直接使用
  • 默认使用0时区的时间,可以通过时区设置章节进行修改
  • 默认更新时间为 8 点整,可以通过定时刷新章节进行修改
  • 建议定期清除对应的日志,参考脚本代码使用,定时刷新
  • 用户名:pi
  • 密码:raspberry
  • 主机名:zero2w

AI模型搭建

参考 Dylan 在 GitHub 上开源程序进行搭建 https://github.com/dylski/PaperPiAI
搭建相对比较复杂,需要科学上网,国内客户建议使用我们已经搭建好的系统

硬件准备

  • 32GB 内存卡,搭建过程中,全程会新增约 20GB 的内容
  • 系统选择建议为:Raspberry Pi oS (64-bit)
  • Raspberry Pi Zero 2 W (PS:我直接使用这个进行安装的)
  • ETH/USB HUB HAT (可选,PS:主要用于接入网线,使用WiFi没有使用网线下载稳定)

软件搭建

  • 将系统烧录到内存卡中
  • 更新源,并更新软件(国内建议换源)
sudo apt-get update
sudo apt-get upgrade
  • 安装git,下载存储库
sudo apt install git
  • 下载参考存储库(可选)
git clone https://github.com/dylski/PaperPiAI.git
cd PaperPiAI
scripts/install.sh  # 国内用户不推荐直接使用安装脚本,建议一步一步执行 Shell 文件中的命令
  • 安装必要的工具
sudo apt-get -y install tmux vim
sudo apt-get -y install cmake
sudo apt-get -y install python3-dev python3-venv python3-pip
sudo apt-get -y install imagemagick
sudo apt-get -y install git git-lfs
sudo apt-get -y install libopencv-dev  python3-opencv
  • 创建一个文件夹,并进入(我这里是直接下载的存储库,因此直接使用这个)
cd PaperPiAI
  • 创建一个虚拟环境(只创建一次,如果后面在创建,需要重新下载一些软件包)
python3 -m venv venv
PS:为什么要安装虚拟环境
    在python官方的要求下,有些python库只能在虚拟环境下进行安装
    树莓派最新系统也跟着这样弄了
  • 进入虚拟环境(退出命令: deactivate)
. venv/bin/activate
  • 安装一些软件(国内用户推荐换源,基于原本的图像处理脚本,使用我们修改后的无需)
python -m pip install opencv_contrib_python
python -m pip install inky[rpi]==1.5.0
python -m pip install pillow

安装AI大模型

cd  ~/PaperPiAI
git clone https://github.com/google/XNNPACK.git
cd XNNPACK
git checkout 1c8ee1b68f3a3e0847ec3c53c186c5909fa3fbd3
mkdir build
cd build
cmake -DXNNPACK_BUILD_TESTS=OFF -DXNNPACK_BUILD_BENCHMARKS=OFF ..    # 这里需要从 github 上下载一些相应的存储库,国内客户需要科学上网
cmake --build . --config Release    # zero 2W 编译超过三小时 
  • 进入之前创建的目录并下载并安装 OnnxStream
cd ~/PaperPiAI
git clone https://github.com/vitoplantamura/OnnxStream.git
cd OnnxStream
cd src
mkdir build
cd build
cmake -DMAX_SPEED=ON -DOS_LLM=OFF -DOS_CUDA=OFF -DXNNPACK_DIR="${INSTALL_DIR}/XNNPACK" ..      # 这里需要从 github 上下载一些相应的存储库,国内客户需要科学上网
cmake --build . --config Release      # zero 2W 编译在十几分钟 
  • 下载大模型资源
cd ~/PaperPiAI
mkdir models
cd models
git clone --depth=1 https://huggingface.co/vitoplantamura/stable-diffusion-xl-turbo-1.0-anyshape-onnxstream
# 下载约 9G

AI模型使用

增加交换尺寸以进行编译

  • zero的交换尺寸默认为 512 ,在生成图像与解析图像时,容易掉WiFi与死机
  • 输入命令
sudo nano /etc/dphys-swapfile
  • 将conc_swapsize的值更改为1024

RPi Zero PhotoPainter-16.jpg

  • Ctrl + O 保存,Ctrl + C 退出
  • 重新启动 dphys-swapfile
sudo /etc/init.d/dphys-swapfile restart

自行搭建的模型

  • 下载我们的程序包
wget https://files.waveshare.net/wiki/RPi_Zero_PhotoPainter/RPi_Zero_PhotoPainter.zip
unzip -o RPi_Zero_PhotoPainter.zip -d RPi_Zero_PhotoPainter
cd RPi_Zero_PhotoPainter
cp -r Waveshare_E-Paper ~/PaperPiAI     # PaperPiAI 为之前搭建大模型的路径
cd cd ~
  • 运行大模型
cd PaperPiAI 
python Waveshare_E-Paper/generate_picture.py --steps 1  # 使用默认配置随机指令生成图像
python3 Waveshare_E-Paper/display_picture.py -m epd7in3e

下载我们配置好的系统

  • 运行大模型
cd PaperPiAI 
python Waveshare_E-Paper/generate_picture.py --steps 1  # 使用默认配置随机指令生成图像
python3 Waveshare_E-Paper/display_picture.py -m epd7in3e

命令解析

generate_picture.py

  • 默认输出路径(如果要修改,需要将目录放到最后面)
PaperPiAI/output_dir
  • 默认json获取(图片的生成词)
Waveshare_E-Paper/flowers.json
  • 其他
--prompt     直接使用提示符,覆盖提示符文件(默认为空)
--prompts    提示配置文件路径(默认 Waveshare_E-Paper/flowers.json)
--seed	      随机种子繁殖
--steps      生成步骤数(更高=质量更好,但速度更慢,默认5,建议使用 1 步
                 zero2w :1 步约34分钟;5 步约 1.5小时
                 Pi5 :1 步约5分钟;5 步约34分钟
--width      图像的宽度(默认 800)
--height     图像高度(默认 480)
--sd         稳定扩散二进制路径(不建议动)
--model      稳定扩散模型路径(不建议动)
--overwrite  覆盖现有的输出文件
--no-copy    不复制到共享文件

display_picture.py

  • 默认图像输入路径
PaperPiAI/output_dir/output.png
  • 默认裁剪后图像输入路径
PaperPiAI/output_dir
# 输出名称为:  processed_当前时间.png
  • 其他:
-o  输出路径及名称
-p  纵向模式(强制旋转90°)
-c  中心裁剪,而不是智能裁剪
-r  只调整图像大小而不裁剪
-s  模拟显示,没有实际输出
-m  显示型号(如:epd7in3e)
--skip-fit  如果图像大小与显示完全匹配,则跳过调整

使用指定位置的图像数据(图片位置要放置在命令的最后面,无需输入对应的操作命令)

python3 Waveshare_E-Paper/display_picture.py -m epd7in3e ./output_dir/processed_20250729_122744.png

脚本代码使用

  • 上面的生成图像的命令与墨水屏刷新命令是分开的,我们要等待图像生成后在刷新图片,非常不方面,因此我们提供了一份脚本代码自动的完成这一过程
  • cron_flower.log 为英文日志输出
  • cron_flower-CN.log 为中文日志输出
# 下载程序(已下载可跳过)
wget https://files.waveshare.net/wiki/RPi_Zero_PhotoPainter/RPi_Zero_PhotoPainter.zip
unzip -o RPi_Zero_PhotoPainter.zip -d RPi_Zero_PhotoPainter

# 进入脚本目录
cd RPi_Zero_PhotoPainter/script_code
cp -r cron_flower.sh ~/PaperPiAI     # PaperPiAI 为搭建大模型的路径
# 如果您希望显示中文日志请传输下面这个脚本
# cp -r cron_flower-CN.sh ~/PaperPiAI

# 进入项目目录(根据您自己的大模型文件夹进行修改)
cd /home/pi/PaperPiAI
  • 必须为脚本添加可执行权限,否则无法运行:
chmod +x /home/pi/PaperPiAI/cron_flower.sh
  • 运行脚本文件
./cron_flower.sh
  • 日志将会正常打印在终端上,同时日志也会保存在 /home/pi/PaperPiAI/image_update.log 文件中,建议定期删除
> /home/pi/PaperPiAI/image_update.log
  • 如果您使用的是 cron_flower-CN.sh ,日志将会保存在 /home/pi/PaperPiAI/cron_flower.log 文件中
  • 删除命令为
> /home/pi/PaperPiAI/cron_flower.log

定时刷新

  • 确保您以进行了上述的大模型安装、程序与脚本
  • 输入命令
crontab -e
  • 如果是第一次输入,会进入编译器选择页面,建议选择 nano 编辑器;输入1,然后按下回车即可
Select an editor.  To change later, run 'select-editor'.
  1. /bin/nano        <---- easiest
  2. /usr/bin/vim.basic
  3. /usr/bin/vim.tiny
  4. /bin/ed

Choose 1-4 [1]: 
  • 将光标移动到最后,然后输入定时执行命令
0 8 * * * /home/pi/PaperPiAI/cron_flower.sh >> /home/pi/PaperPiAI/cron_log.log 2>&1
  • 命令解析(可以将其理解为手机的闹钟设置,呈现的效果基本一致)
0 8 * * *
  0:分钟
  8:小时
  * * *:年月日
/home/pi/PaperPiAI/cron_flower.sh
  脚本路径
>>
  日志追加输出 → 每次脚本运行的日志会添加到 cron_log.log 的末尾,文件会随着每次运行持续变大;
/home/pi/PaperPiAI/cron_log.log
  日志保存的路径
2>&1
  把错误日志也重定向到同一个文件,和正常日志混在一起;
  • 建议定期清除对应的日志文件,命令如下
> /home/pi/PaperPiAI/cron_log.log

时区设置

  • 系统默认设置为 0 时区的时间,也就是本初子午线(0度经线)的时间
  • 可以通过如下命令进行设置,以中国为例
  • 输入命令
sudo dpkg-reconfigure tzdata
  • 选择Asia,然后再选择 Shanghai 或 Beijing 即可

RPi Zero PhotoPainter-13.jpg
RPi Zero PhotoPainter-14.jpg

  • 成功后会弹出如下提示

RPi Zero PhotoPainter-15.jpg

示例程序使用

墨水屏驱动

硬件连接

请注意,该电路的 PWR 脚与我们通用例程中使用 PWR 脚不一样,如果使用通用例程中的程序注意修改

树莓派连接引脚对应关系
e-Paper Raspberry Pi
BCM2835编码 Board物理引脚序号
VCC 3.3V 3.3V
GND GND GND
DIN MOSI 19
CLK SCLK 23
CS CE0 24
DC 25 22
RST 17 11
BUSY 24 18
PWR 27 13

开启SPI接口

  • 打开树莓派终端,输入以下指令进入配置界面:
sudo raspi-config
选择Interfacing Options -> SPI -> Yes 开启SPI接口

RPI open spi.png

  • 重启树莓派:
sudo reboot
  • 检查 /boot/config.txt,可以看到 'dtparam=spi=on' 已被写入

RPI open spi 1.jpg

  • 为了确保 SPI 没有被占用,建议其他的驱动覆盖暂时先关闭。可以使用 ls /dev/spi* 来检查 SPI 占用情况,终端输出 /dev/spidev0.0 和 /dev/spidev0.1 表示 SPI 情况正常

RPI open spi 2.jpg


运行C语言例程

  • 安装 lg 库
#打开树莓派终端,并运行以下指令:
wget https://github.com/joan2937/lg/archive/master.zip
unzip master.zip
cd lg-master
make
sudo make install
# 更多的可以参考源码:https://github.com/gpiozero/lg
  • 安装 gpiod 库(可选)
#打开树莓派终端,并运行以下指令:
sudo apt-get update
sudo apt install gpiod libgpiod-dev
  • 安装 BCM2835(可选)
#打开树莓派终端,并运行以下指令:
wget http://www.airspayce.com/mikem/bcm2835/bcm2835-1.71.tar.gz
tar zxvf bcm2835-1.71.tar.gz 
cd bcm2835-1.71/
sudo ./configure && sudo make && sudo make check && sudo make install
# 更多的可以参考官网:http://www.airspayce.com/mikem/bcm2835/
  • 安装 wiringPi(可选)
#打开树莓派终端,并运行以下指令:
sudo apt-get install wiringpi
#对于树莓派2019年5月之后的系统(早于之前的可不用执行),可能需要进行升级:
wget https://project-downloads.drogon.net/wiringpi-latest.deb
sudo dpkg -i wiringpi-latest.deb
gpio -v
# 运行 gpio -v 会出现 2.52 版本,如果没有出现,说明安装出错。

#Bullseye 分支系统使用如下命令:
git clone https://github.com/WiringPi/WiringPi
cd WiringPi
./build
gpio -v
# 运行 gpio -v 会出现 2.60 版本,如果没有出现,说明安装出错。
  • 下载程序(已下载可跳过)
wget https://files.waveshare.net/wiki/RPi_Zero_PhotoPainter/RPi_Zero_PhotoPainter.zip
unzip -o RPi_Zero_PhotoPainter.zip -d RPi_Zero_PhotoPainter
cd RPi_Zero_PhotoPainter/7in3_e-Paper_E
  • 编译程序(说明:-j4 为使用4线程编译,数字可自行修改)
# 此时在 RPi_Zero_PhotoPainter/7in3_e-Paper_E 位置
cd c
sudo make clean
sudo make -j4
  • 运行程序
sudo ./epd

运行python例程

  • 安装函数库
sudo apt-get update
sudo apt-get install python3-pip
sudo apt-get install python3-pil
sudo apt-get install python3-numpy
sudo pip3 install spidev
  • 安装函数库(python2)
sudo apt-get update
sudo apt-get install python-pip
sudo apt-get install python-pil
sudo apt-get install python-numpy
sudo pip install spidev
  • 安装gpiozero库(系统默认已安装,如果没有安装请按照以下命令进行安装)
sudo apt-get update
# python3
sudo apt install python3-gpiozero
# python2
sudo apt install python-gpiozero
  • 下载程序(已下载可跳过)
wget https://files.waveshare.net/wiki/RPi_Zero_PhotoPainter/RPi_Zero_PhotoPainter.zip
unzip -o RPi_Zero_PhotoPainter.zip -d RPi_Zero_PhotoPainter
cd RPi_Zero_PhotoPainter/7in3_e-Paper_E
  • 运行程序
# 确保在 RPi_Zero_PhotoPainter/7in3_e-Paper_E 位置
cd python/examples/
python3 epd_7in3e_test.py

UPS监控

  • UPS的启停为硬件自动控制,该程序主要是监控电池电量,以及输入输出

开启I2C接口

  • 打开树莓派终端,输入以下指令进入配置界面
sudo raspi-config 
选择 Interfacing Options -> I2C ->yes 启动 i2C 内核驱动

RPI open i2c.png
然后重启树莓派:

sudo reboot

运行示例程序

  • 下载程序(已下载可跳过)
wget https://files.waveshare.net/wiki/RPi_Zero_PhotoPainter/RPi_Zero_PhotoPainter.zip
unzip -o RPi_Zero_PhotoPainter.zip -d RPi_Zero_PhotoPainter
cd RPi_Zero_PhotoPainter/UPS
python3 INA219.py

程序运行后会输出电池电压,电流,功率以及电池剩余电量百分比等数值。
RPi Zero PhotoPainter-1.jpg
注意:如果电流为负数则表示电池输出电流(可认为树莓派负载电流),电流为正数则表示电池充电电流。

RTC时钟使用

开启I2C接口

  • 打开树莓派终端,输入以下指令进入配置界面
sudo raspi-config 
选择 Interfacing Options -> I2C ->yes 启动 i2C 内核驱动

RPI open i2c.png
然后重启树莓派:

sudo reboot

C

  • 安装 lg 库
#打开树莓派终端,并运行以下指令:
wget https://github.com/joan2937/lg/archive/master.zip
unzip master.zip
cd lg-master
make
sudo make install
# 更多的可以参考源码:https://github.com/gpiozero/lg
  • 安装 BCM2835(可选)
#打开树莓派终端,并运行以下指令:
wget http://www.airspayce.com/mikem/bcm2835/bcm2835-1.71.tar.gz
tar zxvf bcm2835-1.71.tar.gz 
cd bcm2835-1.71/
sudo ./configure && sudo make && sudo make check && sudo make install
# 更多的可以参考官网:http://www.airspayce.com/mikem/bcm2835/
  • 安装 wiringPi(可选)
#打开树莓派终端,并运行以下指令:
sudo apt-get install wiringpi
#对于树莓派2019年5月之后的系统(早于之前的可不用执行),可能需要进行升级:
wget https://project-downloads.drogon.net/wiringpi-latest.deb
sudo dpkg -i wiringpi-latest.deb
gpio -v
# 运行 gpio -v 会出现 2.52 版本,如果没有出现,说明安装出错。

#Bullseye 分支系统使用如下命令:
git clone https://github.com/WiringPi/WiringPi
cd WiringPi
./build
gpio -v
# 运行 gpio -v 会出现 2.60 版本,如果没有出现,说明安装出错。
  • 下载程序(已下载可跳过)
wget https://files.waveshare.net/wiki/RPi_Zero_PhotoPainter/RPi_Zero_PhotoPainter.zip
unzip -o RPi_Zero_PhotoPainter.zip -d RPi_Zero_PhotoPainter
cd RPi_Zero_PhotoPainter/RTC
  • 运行程序
cd c
make clean
make -j8 
sudo ./main

Python

  • 安装函数库
sudo apt-get update
sudo apt-get install ttf-wqy-zenhei
sudo apt-get install python3-pip
sudo pip3 install spidev
  • 下载程序(已下载可跳过)
wget https://files.waveshare.net/wiki/RPi_Zero_PhotoPainter/RPi_Zero_PhotoPainter.zip
unzip -o RPi_Zero_PhotoPainter.zip -d RPi_Zero_PhotoPainter
cd RPi_Zero_PhotoPainter/RTC
  • 运行程序
 cd python
 #设置RTC时间,并循环显示时间、日期、温度
 sudo python3 main.py
 #将RTC时间同步至系统中,仅限于没有联网的系统使用
 sudo python3 Set_system_time.py
  • 树莓派启动时同步RTC时间:

注意:该过程不能联网。

添加内核方式驱动

注意使用这种方法,就不可以使用上面的示例程序
修改 /boot/config.txt 末尾添加

dtoverlay=i2c-rtc,ds3231
# 重启树莓派
sudo reboot

同步系统时钟 -> 硬件时钟

sudo hwclock -w

同步硬件时钟 -> 系统时钟

sudo hwclock  -s
 #需要关闭网络,或者关闭网络对时,否则会被改回去

设置硬件时钟时间:

sudo hwclock --set --date="9/8/2021 16:45:05"

查看硬件时钟

sudo hwclock -r

显示版本信息

sudo hwclock --verbose

WiFi连接

  • 这里提供一个比较方便连接WiFi的方式;主要供终端使用,如果有接HDMI的可以直接使用图形化界面操作
  • 输入命令
sudo nmtui
  • 按照下图所示,选择对应WiFi,输入密码等待连接,对应WiFi前出现 * 号表示连接成功

RPi Zero PhotoPainter-8.jpgRPi Zero PhotoPainter-9.jpgRPi Zero PhotoPainter-10.jpgRPi Zero PhotoPainter-11.jpgRPi Zero PhotoPainter-12.jpg


资料

已经搭建好的系统

已经搭建好的系统

文档

程序

相关文件

开发资料


FAQ

问题:我使用 7.3inch e-Paper (E) Wiki中的程序下载的代码,无法驱动墨水屏

PWR引脚使用的不一致,该PCB板使用的PWR脚为 BCM编号的27,需要再程序中修改后,重新进行编程

  • c 打开文件 RaspberryPi_JetsonNano/c/lib/Config/DEV_Config.c;按图示进行修改

RPi Zero PhotoPainter-2.jpg

  • python 打开文件 RaspberryPi_JetsonNano/python/lib/waveshare_epd/epdconfig.py;按图示进行修改

RPi Zero PhotoPainter-3.jpg


这个是 OnnxStream 库当中的一个BUG,目前只有等待 Vito Plantamura 对其进行修复,没有其他更好的解决方式


使用 ps 命令查找正在运行的脚本进程:

ps aux | grep cron_flower.sh

你可能会看到类似下面的输出:

pi        1234  0.0  0.1   4200  1024 pts/0    S+   10:00   0:00 /bin/bash ./cron_flower.sh
pi        1235  0.0  0.0   7220   596 pts/0    S+   10:00   0:00 sleep 600
pi        1240  0.0  0.0   6432   880 pts/1    R+   10:01   0:00 grep --color=auto cron_flower.sh

第一行就是你的脚本主进程,1234 是它的进程 ID(PID)。
第二行是由脚本启动的 sleep 子进程。
使用 kill 命令终止脚本主进程:

kill 1234

其中 1234 是你找到的脚本进程的 PID。
终止主进程后,sleep 子进程也会随之结束,整个脚本就停止了。


具体原因如下:
1、zero的可执行内存较小,在生成图片后,内存还未释放就又开始写入数据,导致内存不够从而使zero崩溃
2、在生成图片的时候,zero的温度会持续上升,执行完成后,还未开始降温,就二次执行可能导致进入过温保护
建议生成图片后,间隔半小时以上在进行二次生图



售后

联系人:张工
邮箱:3004637648@qq.com
QQ:3004637648
微信:扫下方二维码添加
QRCode SiminZhang.png

说明:进行售后服务前,请准备好客户信息(定货单位、定货人等),以供验证