12.48inch e-Paper Module

来自丢石头百科
12.48inch e-Paper Module
12.48inch e-Paper Module
12.48inch e-Paper Module
基本信息

分类: 树莓派 e-Paper

品牌: Waveshare

功能简介
特性
  • 树莓派12.48英寸墨水屏
  • 分辨率:1304×984
  • 显示颜色:黑、白

接口

SPI接口 RPi接口

相关产品

特点

  • 尺寸: 12.48inch
  • 外形尺寸(裸屏):261.5mm × 211mm × 0.3mm
  • 外形尺寸(亚克力外壳):280mm x 229.5mm
  • 显示尺寸:252.976mm × 190.896mm
  • 工作电压:3.3V/5V
  • 通信接口:SPI
  • 点距:0.194mm × 0.194mm
  • 分辨率:1304 x 984
  • 显示颜色:黑、白
  • 灰度等级:2
  • 全局刷新 :8s
  • 刷新功耗 : 26.4mW(typ.)
  • 待机功耗 :<=0.017mW

【备注】: 刷新时间:刷新时间为实验测试数据,实际刷新时间会有误差,以实际效果为准。全局刷新过程中会有闪烁效果,这个是正常现象
功耗:功耗数据为实验测试数据,实际功耗由于驱动板的存在和实际使用情况的不同,会有一定误差,以实际效果为准

SPI 通信时序

E-paper-spi-timing.jpg
由于墨水屏只需要显示,这里将从机发,主机收的数据线(MISO)隐藏。
CS:从机片选,当CS为低电平的时候,芯片使能
DC:数据/命令控制引脚,当DC=0时写入命令;DC=1时写入数据
SCLK: SPI通信时钟
SDIN:SPI通信主机发送,从机接收
时序:CPHL=0, CPOL=0 (SPI0)
【备注】具体关于SPI通信的相关信息,可以自行网上搜索资料了解

屏幕图片刷新实质

上面了解到屏幕使用的是SPI通信,对于此屏幕可能有些客户会觉得奇怪为什么会有两个排线?
对于此问题的解释就是该屏幕是由4块小屏幕拼接而成变得大尺寸屏幕,因此对应着4路片选信号。

  • 刷新实质

简略图如下:
12.48inch e-paper-4part.png
我们把四部分分别命名为S2,M2,M1,S1,他们在程序中是依次进行传输的。
其中S2,M1是同样大小的分辨率:648*492,M2,S1是同样大小的分辨率:656*492.
他们的横竖加起来分辨率就是:1304*984

  • 控制原理

4个屏幕,那么他们就对应这4个SPI从机,所需要的控制线就是4个屏幕的总数:
一般SPI接口类显示屏具有以下4条控制线:MOSI,SCLK,CS,DC
然后需要最基本电源和复位:VCC,GND,RST
由于墨水屏的刷新特性,会一直闪烁,用于表示屏幕忙碌:BUSY
为了节省接口,其中4块屏幕共用VCC,GND,MOSI,SCLK;2块屏幕共用DC,RST
此时,重点来了,4块屏幕所需要电源线加控制线16条:
12.48inch e-paper-4part2.png

  • 核心代码分析

屏幕要进行工作,一般都会进行复位并初始化一些相关的寄存器,然后传输图像数据,最后打开显示。
这里主要讲述传输图像数据:
对于黑白或者红白,我们都可以认为是一张二阶灰度图片,那么一个字节的8个位就对应8个像素点,那么S2部分和M1部分:一行像素点有648点,将占用648/8 = 81个字节,有492列,总共占用81 * 492 = 39852个字节。同理M2部分与S1部分:一行像素点有656点,将占用656/8 = 82个字节,有492列,总共占用82 * 492 = 40344个字节。
12.48inch e-paper的寄存器0x13和0x10分别用于控制黑色图片数据和红色图片数据的传输。
他们的关系如下:

颜色 0x10 0x13
白色 0xff 0x00
黑色 0x00 0x00
红色 0xff/0x00 0xff

下面以黑白屏为例子:

void EPD_12in48_Display(const UBYTE *Image)
{
    int x,y;
    //S1 part 648*492
    EPD_S2_SendCommand(0x13);
    for(y = 0; y < 492; y++)
        for(x = 0; x < 81; x++) {
            EPD_S2_SendData(*(Image + (y*163 + x)));
        }

    //M2 part 656*492
    EPD_M2_SendCommand(0x13);
    for(y = 0; y < 492; y++)
        for(x = 81; x < 163; x++) {
            EPD_M2_SendData(*(Image+ (y*163) +x));
        }

    //S1 part 656*492
    EPD_S1_SendCommand(0x13);
    for(y = 492; y < 984; y++)
        for(x = 81; x < 163; x++) {
            EPD_S1_SendData(*(Image+ (y*163) +x));
        }

    //M1 part 648*492
    EPD_M1_SendCommand(0x13);
    for(y = 492; y < 984; y++)
        for(x = 0; x < 81; x++) {
            EPD_M1_SendData(*(Image+ (y*163) +x));
        }
        
    EPD_12in48_TurnOnDisplay();
}



我们提供了基于4个硬件平台的示例程序,分别是Raspberry Pi, Arduino UNO, STM32以及ESP32。您可以根据自己的需求查看。

前言

装入主机

由于您拿到货的时候是我们组装好的,是有底板的,需要拿配送的螺丝刀把背面的螺丝扭下来,装入主控。

  • 其中Raspberry Pi、Arduino UNO、ESP32是直接有提供接口连接的,具体控制引脚在后面的分节中有介绍。
  • 对应STM32而言,例程是基于STM32F103ZET6芯片,使用了我们Open103Z进行了测试,使用板子的排针进行连接。

软件说明

Raspberry Pi程序

我们提供了C与python两种程序驱动
C语言刷一帧图片大概需要8S,python需要10S左右。除了基本的刷图效果,python也添加了可以爬取天气的功能:

  • 对于国内版本,使用的https://www.tianqiapi.com这个API获取,ppid日限3万次,仅限于个人非商业用途, 希望学习到的不要过度使用。
  • 对于国外版本,我们使用的是爬取https://www.msn.com/en-us/Weather/?day=1网页的天气数据。

Arduino UNO

我们提供了C程序,.c后缀的改成.cpp就可以兼容CPP。
因为UNO的RAM是在是太小了,板载使用了3个23LC1024芯片为UNO进行内存扩容,需要先建一张整图的图片并初始化好,对于黑白图片需要1304/8*984=160392个字节,而1个23LC1024最大只能128K的大小,对于黑白红就需要160392*2 = 320784个字节,因此需要3个芯片,所以整帧图片显示的速度是很慢的,大概1分钟左右才能显示一张黑白图片。

STM32

我们提供了C程序

  • STM32F103ZET6由于没有直接使用的接口,因此需要拿配送的杜邦线进行连接,具体连接方式可以查看后面的管脚连图。这里只有部分示例,由于STM32F103ZET6也无法建立完整的图像缓存,只有部分屏幕例程。

ESP32

我们提供了一个C程序的Arduino测试程序以及一个可以使用网页控制的例程

  • Arduino:可以根据后面对应的ESP32章节进行使用,ESP32无法建立一个1304/8*984的缓存,因此换了一种方式进行刷新,一次传输4304/8*492个数据,黑白需要传输两次,黑白红传输4次。黑白刷新速度在8S左右,黑白红刷新速度在16S左右。
  • 网页控制:由于本人技术有限,对于前端是边学边研发网页,可能网页控制会有许些BUG,您可能忍不住吐槽,不过功能最后算是能够完成。串口上会显示出IP地址,在同一个wifi下,使用网页打开IP地址即可控制,在后续章节会详细介绍。

Raspberry Pi

硬件连接

连接树莓派的时候,直接把树莓派插入即可。
12in48-epaper-RPIconnet.JPG

如果要知道具体控制的管脚,您可以在原理图或者程序中看到,如下: 12in48-epaper-rpi1.png

开启SPI接口

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

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

sudo reboot

请确保SPI没有被其他的设备占用,你可以在/boot/config.txt中间检查

安装库

  • 安装BCM2835, 打开树莓派终端,并运行一下指令
wget http://www.airspayce.com/mikem/bcm2835/bcm2835-1.60.tar.gz
tar zxvf bcm2835-1.60.tar.gz 
cd bcm2835-1.60/
sudo ./configure
sudo make
sudo make check
sudo make install
# 更多的可以参考官网:http://www.airspayce.com/mikem/bcm2835/
  • 安装wiringPi
sudo apt-get install wiringpi
#对于树莓派4B可能需要进行升级:
cd /tmp
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.70版本,如果没有出现说明安装出错
  • 安装Python函数库

例程支持python2/python3,您不需要两者都安装

#python2
sudo apt-get update
sudo apt-get install python-pip
sudo apt-get install python-pil
sudo pip install RPi.GPIO
sudo pip install spidev
#python3
sudo apt-get update
sudo apt-get install python3-pip
sudo apt-get install python3-pil
sudo pip3 install RPi.GPIO
sudo pip3 install spidev

下载测试程序

打开树莓派终端,执行:

sudo apt-get install p7zip-full
wget http://wiki.diustou.com/w/upload/9/9a/12.48inch_e-Paper_Module_Code_RPI.7z
7z x 12.48inch_e-Paper_Module_Code_RPI.7z  -r -o./12.48inch_e-Paper_Module_Code
sudo chmod 777 -R 12.48inch_e-Paper_Module_Code
cd 12.48inch_e-Paper_Module_Code

运行测试程序

  • C语言
cd c
nano examples/main.c 

确认你是用的黑白还是黑白红屏幕。
黑白如下:
12in48-epaper-rpi-c1.png
黑白红如下:
12in48-epaper-rpi-c1.png
按ctrl+x,Y保存退出,执行如下命令:

make clean
make
sudo ./epd
  • python
cd python/examples
#黑白屏幕运行:
sudo python epd_12in48_test.py
#黑白红屏幕运行:
sudo python epd_12in48B_test.py
  • python显示天气-中文

由于使用的是这个网站站主的免费账号做的例程,因此获取的网站会有变动,你需要检查代码。
如果你要用于商业用途,最好向站长申请账号购买。
建议自己注册一个账号进行使用,打开网站https://www.tianqiapi.com/user/login.php,进行注册:
12in48-epaper-rpi-python1.png
12in48-epaper-rpi-python2.png
然后登陆,在这里你得到了自己的ID和秘钥:
12in48-epaper-rpi-python3.png
打开城市IDhttps://gitee.com/wangjins/weather_api/blob/master/city.sql,可以找到你所在的城市,例如深圳市福田区,最前面的101280603就是城市ID,后面需要用到:
12in48-epaper-rpi-python6.png
打开天气API网站首页https://www.tianqiapi.com,可以看到CURL的格式:
12in48-epaper-rpi-python4.png
复制这一段网址信息,打开Weather目录下的Show_CN_Weather.py,找到第20行代码。这里的ur就是获取的数据流。
12in48-epaper-rpi-python5.png
替换掉这一段url,把cityid=101110101后面的数字替换成前面的城市ID(这里举例子用的是深圳市福田区):101280603,把[appid]替换成自己的ID,把[appsecret]替换成自己的秘钥,保存退出

cd python/examples
#黑白屏幕运行:
sudo python Show_CN_Weather.py
#黑白红屏幕运行:
sudo python Show_CN_Weather.py B
#帮助: 
sudo python Show_CN_Weather.py help
  • python显示天气-英文

申明:我们没有找到一个比较好的国外天气API免费账号,所以这里是利用python爬虫来进行爬取国外的天气信息。

cd python/examples
#黑白屏幕运行:
sudo python Show_EN_Weather.py
#黑白红屏幕运行:
sudo python Show_EN_Weather.py B
#帮助:
sudo python Show_EN_Weather.py help

12in48-epaper-rpi-weather2.jpg

Arduino UNO

硬件连接

连接UNO的时候,直接把UNO插入即可。
12in48-epaper-Arduinoconne.JPG
如果要知道具体控制的管脚,您可以在原理图或者程序中看到,如下:
12in48-epaper-arduino1.png

运行程序

在产品百科界面下载程序,然后解压。Arduino程序位于 ~/Arduino/…
将12in48epd整个文件夹复制到Arduino的安装目录下的libraries目录下(这个目录一般为:C:\Program Files (x86)\Arduino\libraries):
然后打开Arduino IDE,在工具栏-》开发板选择:arduino UNO:
12in48-epaper-arduino2.png

点击文件-》示例,下面找到EPD12in48,选择对应的demo
12in48-epaper-arduino3.png
如果是使用黑白屏,右边选择epd12in48-demo
如果是使用黑白红屏,右边选择epd12in48b-demo
最后选择对应COM口,然后点击编译并下载即可。

  • 注意,刷新过程可能比较漫长,可以打开串口监视器查看进度,一般黑白需要1分钟,黑白红需要2分钟。

STM32

前置说明

提供基于STM32F103ZET6,,使用的Open103Z,当然你有自己的开发板可以。
使用的例程均是使用STM HAL库进行开发的。

Open103Z

连接Open103Z的时候,需要自己使用配送的杜邦线连接板子的2*8PIN的座子。
12in48-epaper-STM32connet.JPG
具体控制的管脚,您可以在e-paper.ioc(使用STM32CUBEMX打开)中看到,如下:
12in48-epaper-STM32-5.png
12in48-epaper-STM32-6.png

打开目录:STM32\NUCLEO-F103RB\MDK-ARM\e-paper.uvprojx,编译并选择好开发板,下载即可。
黑白屏幕大概需要10S,黑白红大概需要20S

ESP32

前置说明

我们提供了2个例程都是在Arduino环境进行开发的,首先就需要搭建Arduino下面的ESP32环境,这个可以单独在ESP32用户手册中学习,不过为了教程的完整性,这里也可以再次介绍:
1.如果您电脑之前并没有安装有 Arduino IDE,或者 IDE 的版本比较老。建议到 Arduino 官方网站根据自己的系统型号下载最新的 IDE 并安装。
-官网链接:https://www.arduino.cc/en/Main/Software
2. 下载 Arduino-ESP32 支持包:https://codeload.github.com/espressif/arduinoesp32/zip/master. 并将压缩包里面的文件解压到 Arduino IDE 安装目录下的Hardware->espressif->esp32 路径。(注意,如果在安装目录下没有相应文件夹的话,可以手动创建一下)。
12in48-epaper-esp32-1.png
3.打开tools,并以管理员身份运行一下get.exe文件。
4.等待安装完成后,把下载程序的中esp32-epd-12in48文件夹复制都Arduino目录下的Hardware->espressif->esp32 ->libraries(一般情况下他的目录为:C:\Program Files (x86)\Arduino\hardware\espressif\esp32\libraries)
12in48-epaper-esp32-2.png

硬件连接

两个例程均使用e-Paper ESP32 Driver Board进行了验证,e-Paper ESP32 Driver Board可以直接插在驱动板上的ESP32接口上。
12in48-epaper-esp32connet.JPG 其硬件具体的管脚连接可以在原理图或者程序中查找到:
12in48-epaper-esp32-connet1.png

Arduino例程

打开Arduino IDE,点击文件->示例,可以找到如下两个例程
12in48-epaper-esp32-3.png
如果你是黑白屏,请使用epd12in48-demo;
如果你是黑白红屏,请使用epd12in48B-demo;

WIFI控制

ESP32是支持WiFi的,并且可以作为服务器和从机,因此我们可以对他进行编程,以实现网页控制墨水屏。这个在E-Paper ESP32 Driver Board里面有实现控制其他屏幕,是之前公司老外搞的,可能对部分的初学者的使用门槛比较高,因此这里进行重置,由于这个网页是边学边写的(一个电子工程师半路出家搞前端,可累坏我了),不免有BUG,测试时不一定能全部发现,希望您帮我们指出不足,我们会努力改进。
在esp32目录下面的wifi,因为是wifi的条件下使用,所以你不能直接使用例程,需要修改程序里面的WIFI账号密码:
打开目录下的Web_App.cpp,在第50行和51行有账号密码,自行修改成您的:
12in48-epaper-esp32-4.png
然后打开wifi.ino,编译下载到您的ESP32中,打开串口监视器,稍等片刻会连上WIFI,得到局域网IP地址:
12in48-epaper-esp32-5.png
打开浏览器(测试了QQ、谷歌、火狐均可以使用),输入IP地址,第一次加载可能需要一点时间,因为需要去下载jq包:
12in48-epaper-esp32-html0.png
上面显示了IP地址并可以选择12.48inch e-paper和12.48inch e-paper b分别对应黑白屏和黑白红,根据您自己的屏幕自行选择。

以12.48inch e-paper(黑白)为例子讲解

点击12.48inch e-paper,右边将会显示出6个功能,可以实现画点、先、框、圆、字符、图片6个功能,网页主页将会显示墨水屏的像素以及可以显示的颜色,注意一下的颜色都是使用BLACK,如果white,什么都不会显示出来:
12in48-epaper-esp32-html1.png
工欲善其事,必先利其器,图片坐标系一般不同于我们的数学坐标系:
12in48-epaper-esp32-html2.png
1.画点
点击Draw Point,右侧会弹出以下,有4个选项:对应点的坐标,颜色,像素点大小。(注意坐标不要超出图片的最大像素,否则不会显示),都选择好之后,点击任意位置即可显示效果
12in48-epaper-esp32-html3.png

2.画线
点击Draw Line,右侧会弹出以下,有7个选项:对应线的起始坐标(4个),颜色,线宽,实线虚线。(注意坐标不要超出图片的最大像素,否则不会显示),都选择好之后,点击任意位置即可显示效果
12in48-epaper-esp32-html4.png

3.画框
点击Draw Rectangle,右侧会弹出以下,有7个选项:对应框的起始坐标(4个),颜色,线宽,内部是否填充。(注意坐标不要超出图片的最大像素,否则不会显示),都选择好之后,点击任意位置即可显示效果
12in48-epaper-esp32-html5.png

4.画圈
点击Draw Circle,右侧会弹出以下,有6个选项:对应圆心的坐标,半径,颜色,线宽,内部是否填充。(注意坐标不要超出图片的最大像素,否则不会显示),都选择好之后,点击任意位置即可显示效果
12in48-epaper-esp32-html6.png

5.写字符
点击Draw Circle,右侧会弹出以下,有5个选项:对应字符的左顶点坐标,字符内容,字体大小,颜色。(注意坐标不要超出图片的最大像素,否则不会显示),都选择好之后,点击任意位置即可显示效果
12in48-epaper-esp32-html7.png

6.显示图片
点击Show Picture,右侧会弹出以下,有7个选项:对应图片的左顶点坐标,显示的图片,四种图片处理算法,对应:黑白色阶算法、三色色阶算法、黑白抖动算法、三色抖动算法(注意坐标不要超出图片的最大像素,否则不会显示),都选择好之后,点击任意位置即可显示效果
点击upload image,可以选择电脑本地的图片,选择对应图片,点击打开:
12in48-epaper-esp32-html8.png
将右边的条幅,拉到最下,可以看到原图:
12in48-epaper-esp32-html9.png
这里需要则对应的算法:由于使用的黑白屏幕,因此只支持:黑白色阶算法和黑白抖动算法(下面两张图片将会展示图片的效果),其他的两者红色如果点击会有弹窗警告您:
12in48-epaper-esp32-html10.png
12in48-epaper-esp32-html11.png

7.上传图片
点击左侧的upload image,上传图片,稍等10S左右黑白屏幕就会显示
12in48-epaper-esp32-html12.png
你可以打开Arduino IDE的串口监视器,里面详细的刷新调试信息
12in48-epaper-esp32-html13.png
你也可以在浏览器中按F12打开调试界面,可以看到对应的调试信息:
12in48-epaper-esp32-html14.png

FAQ


问题:
电子墨水屏的使用环境?
答复:
  • 【工作条件】温度范围:0~50°C ;湿度范围:35%~65%RH
  • 【存储条件】:温度范围:30°C以下; 湿度范围:55%RH以下;存储最长时间:6个月
  • 【运输条件】:温度范围:-25~70°C ;运输最长时间:10天
  • 【拆包后】:温度范围:20°C±5°C ; 湿度范围:50±5%RH;存储最长时间:72小时内完成组装



问题:
电子墨水屏刷新注意事项
答复:
  • 刷新模式
    • 全刷:电子墨水屏在刷新过程中会闪烁多次(闪烁次数取决于刷新时长),闪烁是为了清除残影达到最佳的显示效果
    • 局刷:电子墨水屏在刷新过程中无闪烁效果。使用局刷功能的用户注意在刷新几次之后,要进行一次全刷操作清除残影,否则残影问题会越来越严重,甚至损坏屏幕(目前只有部分黑白电子墨水屏支持局刷,具体参考产品页面说明)
  • 刷新频率
    • 使用过程中,建议客户设置电子墨水屏的刷新间隔至少为180秒(支持局刷功能的产品除外)
    • 待机过程(即刷新操作后)建议客户将电子墨水屏设置为睡眠模式,或者断电操作(可以将墨水屏供电部分用模拟开关断开), 可以降低功耗并且延长电子墨水屏寿面的功能。(部分电子墨水屏如果长时间处于上电状态的话,会出现屏幕损坏无法修复的情况
    • 三色电子墨水屏在使用的过程中,建议客户至少每24小时更新一次显示画面(如果屏幕长时间保持同一个画面,会出现烧屏情况难以修复)
  • 使用场所
    • 电子墨水屏建议是在室内使用。如果在户外使用,需要避免电子墨水屏受阳光直射,同时要做好紫外线防护措施。在设计电子墨水屏产品的时候,客户主要确定好使用环境是否满足电子墨水屏的温湿度要求


问题:
Arduino3.3V能不能驱动墨水屏?
答复:
  • 可以,现在已经板载了电平转换芯片,支持3.3V驱动


问题:
使用一段时间之后屏幕刷新(全刷)出现严重残影问题无法修复?
答复:
  • 长时间上电开发板,在每次刷新操作之后,建议将屏幕设置为睡眠模式或者直接断电处理,否则屏幕长时间处于高电压状态下可能烧坏屏幕


问题:
e-Paper显示偏黑或者颜色偏浅?
答复:
  • 可以调节程序中Vcom的值改变显示对比度,带局刷的屏幕改善效果特别明显。


问题:
e-Paper显示黑边框?
答复:
  • 可以通过Border Waveform Control寄存器 或者VCOM AND DATA INTERVAL SETTING寄存器设置边框显示颜色。


问题:
屏幕排线接口是什么规格?
答复:
  • 0.5mm间距,24Pin。


问题:
运行python程序的时候报错ImportError: No module named Image?
答复:
  • 使用指令sudo apt-get install python-imaging 安装一下imaging函数库



Icon-mail.png 联系 丢石头

我们的工作时间是: 09:00-18:00 (UTC+8 周一到周六)