2.9寸墨水屏制作互联网时钟填坑手记

2.9寸墨水屏制作互联网时钟填坑手记

解决方案goocz2025-01-16 10:17:4114A+A-

说明:由于这个东西做的时间有点早,有些代码的路径可能已改变,有兴趣的朋友可以私信,共同研究。

先上一个改进图:

这个是没加蓝牙和喇叭的样子。现在已经加了,可以手机浏览器控制。

制作要求:显示公历日期/农历日期/天气/风向/温度/节日/提醒(屏幕较小,先显示这么多)。派加电即可显示,派正常关机屏幕白 屏(休眠)以保护墨水屏,天气相关信息每12小时更新一次。天气信息来源于爬取的内容,每天用cron(定时任务)定时爬取,爬取时间在墨水屏刷新前半个小时。

注意事项:根据某雪官方的说法,目前只有黑白墨水屏支持局部刷新,可以做时钟显示,其他三色屏是不支持局部刷新的。这个2.9寸的屏局部刷新是0.2秒,全部刷新是2秒。而且墨水屏最好24小时要全刷一次,不然会留残影,严重导致屏幕不可修复的损坏,所以我设定是每天全刷新两次。原程序代码设定,全刷时,屏幕闪两次黑屏两次,局刷没有明显变化。

改进计划:

1.显示不同地区的基本天气。

2.定制闹钟并显示。

3.红外感应没人时屏幕休眠或显示其他内容。

4.手机控制屏幕显示不同内容(高级功能)。

5.语音控制显示内容(高级功能)。

硬件及软件:

1、2.9inch e-Paper Module(2.9寸墨水屏带驱动,祼屏不行。)

树梅派3B(以后想改成zero w货还没到,先用这个)

raspbian系统最新版,python3.7,BCM2835, wiringPi,PIL,borax.

制作过程:

硬件连接:(raspbian系统的安装及操作方法这里不讲,请自行百度)

连接派:(注意vcc是接在3.3V上,而不是5V,我也不知道接到5V上会不会坏,反正我没敢)

对应引脚

图片不是3B的不过一样,对应40脚的图.

2、开启派SPI口。

  • 软件安装:(raspbian系统的安装及操作方法这里不讲,请自行百度)
  1. 相关库下载及安装:说明:由于我是在root用户下操作的,所以下面的命令都没有加sudo。由于raspbian默认用户是pi,所以给最后面的工作增加了一点麻烦,不过我还是按我的思路和实现方法来说明,以免造成误导。

安装BCM2

wget http://www.airspayce.com/mikem/bcm2835/bcm2835-1.60.tar.gz
tar zxvf bcm2835-1.60.tar.gz 
cd bcm2835-1.60/
./configure
make
make check
make install

安装wiringpi


apt-get install wiringpi  #对于树莓派4B可能需要进行升级:
cd /tmp
wget https://project-downloads.drogon.net/wiringpi-latest.deb
dpkg -i wiringpi-latest.deb
gpio -v
# 运行gpio -v会出现2.52版本,如果没有出现说明安装出错
文

安装Python函数库

apt-get update

apt-get install python3-pip

apt-get install python3-pil

apt-get install python3-numpy

pip3 install RPi.GPIO

pip3 install spidev

如果是最新的系统,大部分的python库都已安装。

微雪官方测试程序下载:

 clone https://github.com/waveshare/e-Papercd e-Paper/RaspberryPi\&JetsonNano/

执行测试程序:

python3 epd_2in9_text.py

到此就应该可以看以墨水屏有显示了。基础工作已做完。

以上内容来自微雪官方网址:http://www.waveshare.net/wiki/2.9inch_e-Paper_Module

2.必须库下载及安装

PIL安装:(PIL是Python一个强大方便的图像处理库)

pip install Pillow

农历库Borax1.3安装 (Borax是一个的 Python3 开发工具集合库,不限于显示农历)

pip install borax

到此环境已搭建完成,下面是关键的代码部分。

  • 关键代码理解及解释:

def nianyueri():

#年月日星期

time_draw.rectangle((5, 5, 185, 25), fill = 255)

time_draw.text((5, 5), time.strftime('%Y年%m月%d日 %a'), font = font18, fill = 0)

newimage = time_image.crop([5, 5, 185, 25])

time_image.paste(newimage, (5,5))

墨水屏的显示原理是画图,跟其他的显示设备不一样。

在这里我定义了一个函数,因为后面还要用到这些代码,原测试程序里不是,测试代码实现的功能也比较简单。

time_draw.rectangle((5, 5, 185, 25), fill = 255)

这行是画一个矩形,(5, 5, 185, 25)显示是左上角x,y坐标,和右下角x,y坐标。fill=255是白色填充。还有一个参数outline=’black’我觉得很有用,在布局的时候可以帮助定位。

time_draw.text((5, 5), time.strftime('%Y年%m月%d日 %a'), font = font18, fill = 0)

在这个框内画的内容:

time.strftime('%Y年%m月%d日 %a')显示当前日期及星期,格式为:XXXX年XX月XX日

%a为英文星期的简写,如周一显示:Mon。font=font18为字体大小(font后面解释)。fill=0为黑色填充。

newimage = time_image.crop([5, 5, 185, 25])这个我没认真研究,估计要显示的新内容。

time_image.paste(newimage, (5,5))也没研究,估计是在(5,5)这个位置显示newimage内容。

特别说明:显示内容和布局是必须要改的,其他不用改,在布局的时候有几个关键的地方要注意:

1.字体的大小。字体的大小要不断的试。而且大小直接影响布局。

我这里定义了4种字体大小,示例程序只带了一种字体font.ttc,位置在上一级的pic目录下其他字体没安装也没试。

2.矩形online参数。加了这个参数后有利于看显示情况,再进行调整。

3.每设置完一个显示区域最后再增加一条。epd.display(epd.getbuffer(time_image))对不起,这条也没懂,getbuffer我看函数说明也没看懂。必须要加,但不是每一个都加,这个有时间延迟,如果很显示一个区域都加这个,每个都会延迟1秒左右显示 ,看起来延好看。但如果加了计数的话,每段代码的执行时间就延长,计数时间也就长(原示例代码是执行5次退出。)。

4.相关函数:

函数:

nianyueri() #显示年月日星期

shijian() #显示时间

nongli() #显示农历

tianqi() #显示天气

wendu() #显示温度

fengxiang() #显示风向

shidu() #显示湿度

richeng() #显示日程(节日等,可自定义)

整个内容分成2大块,常刷新的,时间,和其他不常刷的,比如年月日星期/农历/天气/温度。。。时间的刷新是通过循环实现的。其他只要显示在那就可以了,不刷新内容不会消失(墨水屏的特点。)。

农历的显示:


def nongli():

#农历位置

today=LunarDate.today()

time_draw.rectangle((195, 5, 295, 25), fill = 255)

time_draw.text((195, 5), today.strftime('农 %M月%D'), font = font18, fill = 0)

newimage = time_image.crop([195, 5, 295, 25])

time_image.paste(newimage, (195,5))

today=LunarDate.today()

这段代码必须放在一起,不然农历过了0点也不会变。

5、必须要提一点:天气相关数据的显示。天气是从天气网上爬下来的,代码是从别人那拿来用的,不是我写的。网上有很多这样的代码,但多数都不太好用,这个正好符合要求。

(主程序和爬天气代码太长,排版很累,又不好看。有兴趣的可以私信我,无偿贡献。)

  • 写在最后

本例实现的各个文件位置:

1、epd_2in9_test.py(主程序)

/root/e-Paper/RaspberryPi\&JetsonNano/python/examples/epd_2in9_test.py

2、天气爬取程序位置同上。

3、weather.txt文件。/root/weather.txt因为自动爬取程序生成这个文件自动放在root目录,我本来是想放在主程序同目录的,目前还不知道怎么改。

这么个小东西,花了三天时间研究代码,填各种坑,玩代码真是很辛苦,没办法,喜欢。从中也学习和复习了很多东西。

最后上一张多半成品的图:

点击这里复制本文地址 以上内容由goocz整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!

果子教程网 © All Rights Reserved.  蜀ICP备2024111239号-5