体验了元太 E Ink Spectra™ 6 彩色电子墨水屏以后,虽然其 PPI 和色彩指标还没有达到常见屏幕的水平,但还是凭借纸质印刷般的质感和环保的特性吸引了我们,甚至多达十几秒的刷新时间问题反而转变成了一种期待美好呈现的仪式感。

我们脑海中也开始浮现出很多这块屏幕的应用场景。作为经常和软件打交道的开发者,这是一次少有的反向体验:手里拿着这块质感独特又很贵的屏幕,想的是什么样的数字内容值得用这块屏呈现,还想起了乔布斯说过的『硬件使大脑,软件是灵魂』,都说软件、硬件和服务的结合很重要,现在终于有了一点感觉。

因为脑海中浮现出来的场景大多是屏幕单独存在,但又需要刷新画面内容,所以需要方便插拔,元太 E Ink Spectra™ 6屏幕模组的接口明显不适合经常插拔:

直到我们发现了 微雪的 4inch 模块版,微雪的这款产品把墨水屏和驱动板粘在了一起,正好满足我们的需求,不仅解决了随时插拔的问题,还提升了屏幕的强度。
↑ 微雪 4inch e-Paper E6全彩色电子墨水屏模块 SPI通信 支持HAT+标准

尺寸4英寸
驱动板尺寸101.0 × 68.0mm
显示尺寸84.6 × 56.40mm
外形尺寸99.00 × 66.00 × 0.85mm
工作电压3.3V1 / 5V2(IO电平电压要和供电电压一致)
通信接口SPI
点距0.141 × 0.141mm
分辨率600 × 400
显示颜色E6全彩色
灰度等级23
刷新时间19s
刷新功耗< 70 mW(typ.)4
休眠电流< 0.01uA(接近0)5
工作温度0 ~ 50 ℃
存储温度-25 ~ 60 ℃

作为智能硬件新手,这里出现的每一个单词都是专业术语,还好学习这个层面的知识比较容易。接下来需要做的的事儿就清晰了:用树莓派驱动这个模块板,微雪的这款产品基于树莓派 40PIN 接口设计,可以直接插在树莓派的 40PIN 接口上(支持 HAT+ 标准),但是屏幕背板上的这个 40PIN 接口导致整个背板厚度增加了很多,而且很突兀,所以这个本来是亮点的 40PIN 接口,反而对于我们没有价值,甚至要想办法移除。当然这是在这款产品还支持 SPI 接口的前提下。
↑ 插在树莓派 40PIN 接口上的微雪的 4inch 模块版

既然不需要使用树莓派的 40PIN 接口,所以我们买了带定制外壳和风扇的树莓派5,使用 SPI 接口连接了屏幕模组和树莓派 (SPI 接口只需要占用 40PIN 中的一部分)。
↑ 树莓派 40PIN 引脚图示,参照 微雪的文档 「Raspberry Pi - 硬件连接」部分进行连接

软件部分

虽然是第一次上手树莓派,但受益于微雪细致的文档和很多用爱发电人士的分享,很顺利就点亮了墨水屏,这里分享一些关键点 (因为手头没有 Micro-HDMI 转接头,树莓派无法连接显示器,所以以下操作的场景是使用另一台电脑登录树莓派后执行刷新图像的程序) :

树莓派安装系统

推荐一个 B站的视频 供参考。 关于系统版本的选择:

  1. 根据存储卡容量合理选择系统版本,比如我用的 8GB 的存储卡推荐选择 Raspberry Pi OS Lite (64-bit)
  2. 根据是否方便连接显示器(需要 Micro-HDMI 转换头),如果不想连接显示器或者无法连接显示器,那没必要选择图形界面的系统版本。 关于写入操作系统前的配置:
  • 如果不想连接显示器或者无法连接显示器,设置用户名和密码,开启 SSH登录选项
  • 如果不想连接显示器或者无法连接显示器,还不方便插网线的话,在这一步配置 Wi-Fi

获取树莓派IP

  • 可以通过路由器查看新增的网络设备IP
  • 使用已经联网的电脑通过 nmap 工具扫描 nmap -sn 192.168.1.1/24

登录树莓派

ssh qisi@192.168.1.102

配置 Wi-Fi

也可以在安装系统时设置 编辑 wpa_supplicant.conf 文件:

sudo nano /etc/wpa_supplicant/wpa_supplicant.conf`

在文件末尾添加以下内容:

network={
    ssid="你的WiFi名称"
    psk="你的WiFi密码"
    key_mgmt=WPA-PSK
}

保存文件并退出 (Ctrl + X, 然后按 Y 保存)。 然后重启树莓派:sudo reboot

上传图片

4inch 屏幕对应分辨率:600 * 400

scp ~/Desktop/d1.bmp qisi@192.168.1.102:~/4inch_e-Paper_E/RaspberryPi_JetsonNano/python/pic

准备刷新程序

微雪的文档内介绍了如何在树莓派内下载刷新程序,并提供了示例代码,示例代码实现了先后显示文字和图像,最后会清空画布,如果我们想让自己的图像保留在屏幕上,可以基于示例代码进行精简(以下代码只需要替换图片名称即可):

#!/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 epd4in0e
import time
from PIL import Image,ImageDraw,ImageFont
import traceback
logging.basicConfig(level=logging.DEBUG)

try:
	logging.info("epd7in3f Demo")
	epd = epd4in0e.EPD()
	logging.info("init and Clear")
	epd.init()
	epd.Clear()
	Himage = Image.new('RGB', (epd.width, epd.height), epd.WHITE)
	# read bmp file
	logging.info("2.read bmp file")
	Himage = Image.open(os.path.join(picdir, 'd1.bmp'))
	epd.display(epd.getbuffer(Himage))
	logging.info("Goto Sleep...")
	epd.sleep()

except IOError as e:
	logging.info(e)
	
except KeyboardInterrupt:
	logging.info("ctrl + c:")
	epd4in0e.epdconfig.module_exit(cleanup=True)
	exit()

上传刷新程序

scp ~/Desktop/draw.py qisi@192.168.1.102:~/4inch_e-Paper_E/RaspberryPi_JetsonNano/python/examples

也可以登录树莓派后直接修改代码

执行刷新程序

cd ~/4inch_e-Paper_E/RaspberryPi_JetsonNano/python/examples
python draw.py

可能遇到的问题

安装 spidev 报错

sudo pip3 install spidev
error: externally-managed-environment

这是由 PEP 668 定义的 “externally-managed-environment” 错误。这意味着树莓派的操作系统使用了一个受管的 Python 环境,默认不允许通过 pip 在系统范围内安装 Python 包。

如果 spidev 已作为系统包提供,可以使用 apt 安装:

sudo apt update
sudo apt install python3-spidev

Mac OS 转换 BMP 格式图片

微雪的文档内系统介绍了如何转换图片,这里额外分享 Mac OS 转换 BMP 格式的工具:ImageMagick,可以通过 Homebrew 安装它: brew install imagemagick

使用命令行转换 GIF 为 BMP: convert input.gif output.bmp

最后分享一下一个智能硬件小白首次使用树莓派并点亮彩色墨水屏的感受,我们所处的时代太幸福了,物质文明和科技文明已经如此繁茂,人类的分工越来越精细化,其实是另一种形式的合作,只要敢想,敢于创造,就可以站在别人的肩膀上,如搭积木般构建出有模有样的产品,所以还等什么呢~

Footnotes

  1. 树莓派 5 使用 USB-C 电源,推荐的供电电压为 5V,并且电流要求是 5V/3A(15W)。

  2. 树莓派 5 的 GPIO 引脚6电平为 3.3V

  3. 灰度等级2 意味着只有 2种灰度,即黑和白,属于最低的灰度分辨率。这通常对应 1位的图像(每个像素只有两个可能的值,0 或 1)。

  4. 1 瓦 (W) = 1000 毫瓦 (mW)

  5. 1 uA = 0.000001 A

  6. GPIO(英语:General-purpose input/output),通用型之输入输出的简称