RPi Zero PhotoPainter
|
| ||||||||||||||||||||||||||
| ||||||||||||||||||||||||||
说明
各项参数
| 显示尺寸 | 160.0mm × 96.0mm |
| 外形尺寸 | 154.0mm × 214.0mm × 32.0mm |
| 屏幕像素点距 | 0.2mm × 0.2mm |
| 屏幕分辨率 | 800 × 480 |
| 显示颜色 | 黑、白、绿、蓝、红、黄 |
| 灰度等级 | 2 |
| 刷新时间 | 12s |
| 充电电压/工作电压 | 5V |
- 刷新时间:刷新时间为实验测试数据,实际刷新时间会有误差,以实际效果为准。全局刷新过程中会有闪烁效果,这个是正常现象。
图片制作
- 使用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大模型
- 参考 Vito Plantamura 在 GitHub 上开源例程 https://github.com/vitoplantamura/OnnxStream
- 进入之前创建的目录并下载并安装 XNNPACK
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
- 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 即可
- 成功后会弹出如下提示
示例程序使用
墨水屏驱动
硬件连接
请注意,该电路的 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接口
- 重启树莓派:
sudo reboot
- 检查 /boot/config.txt,可以看到 'dtparam=spi=on' 已被写入
- 为了确保 SPI 没有被占用,建议其他的驱动覆盖暂时先关闭。可以使用 ls /dev/spi* 来检查 SPI 占用情况,终端输出 /dev/spidev0.0 和 /dev/spidev0.1 表示 SPI 情况正常
运行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 内核驱动
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
程序运行后会输出电池电压,电流,功率以及电池剩余电量百分比等数值。
![]()
注意:如果电流为负数则表示电池输出电流(可认为树莓派负载电流),电流为正数则表示电池充电电流。
RTC时钟使用
开启I2C接口
- 打开树莓派终端,输入以下指令进入配置界面
sudo raspi-config 选择 Interfacing Options -> I2C ->yes 启动 i2C 内核驱动
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前出现 * 号表示连接成功
资料
已经搭建好的系统
文档
程序
相关文件
开发资料
FAQ
问题:我使用 7.3inch e-Paper (E) Wiki中的程序下载的代码,无法驱动墨水屏
这个是 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的温度会持续上升,执行完成后,还未开始降温,就二次执行可能导致进入过温保护
建议生成图片后,间隔半小时以上在进行二次生图











