上周四开始感冒发烧,到今天还在咳嗽,所以也就完美错过带女儿过六一节。想想还是不甘心,翻箱倒柜一番又找出了之前做的墨水屏盒子,赋诗一首看看能不能骗过幼儿园小朋友。
盒子里面是个树莓派Zero WH。
老规矩,一步步分解任务:
1、做个python脚本用来显示内容。简单起见有三个参数,标题、第一行、第二行;
2、从windows自带的字体库中复制相应的字体文件给树莓派供墨水屏显示时使用;
3、可以访问树莓派上的一个网页,自行定义要展示的内容。具体实现本质上就是还需要一个php调用第一步中的python。
第一步里,点亮墨水屏可以参考 https://blog.csdn.net/ki1381/article/details/89929279?spm=1001.2014.3001.5501。官方也提供了示例,想要显示自己的文字参照着改写代码就行。
python脚本接收参数也不难,用好sys.argv[]即可。sys.argv[0]是脚本本身,自定的参数从1开始编号。
第二步里,直接复制windows\fonts目录下相关ttc或ttf(比如msyh就是微软雅黑)文件到树莓派的某个目录(比如创建/usr/share/fonts/msfonts目录),然后cd到该目录,运行下mkfontscale命令即可。
第三步里有坑。我遇到了php调用python不支持中文参数的问题。网上找了几种解决方案,最终采用了php里urlencode中文,python脚本里urllib.parse.unquote的办法。
以下为测试代码:
1、HTML:
<!DOCTYPE html><html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head><meta charset="utf-8" /><title>test</title>
</head>
<body><form action="show.php" method="post">标题:<input type="text" style="width:300px" name="txt1"/><br/>行一:<input type="text" style="width:300px" name="txt2" /><br />行二:<input type="text" style="width:300px" name="txt3" /><br /><hr/><input type="submit" value="upload"/> <input type="reset" value="reset" /></form>
</body>
</html>
2、PHP:
<?php$t = $_POST['txt1'];
$l1 = $_POST['txt2'];
$l2 = $_POST['txt3'];$t = urlencode($t);
$l1 = urlencode($l1);
$l2 = urlencode($l2);$cmd = "sudo python3 /home/pi/src/ePaper/python3/show.py $t $l1 $l2";
#echo $cmd;
exec($cmd);?>
3、PYTHON:
#!/usr/bin/python3
# -*- coding:utf-8 -*-import epd2in9
import time
import sys
from PIL import Image,ImageDraw,ImageFont
import traceback
import urllib.parseepd = epd2in9.EPD()
epd.init(epd.lut_full_update)lineTitle = '';
lineC1 = '';
lineC2 = '';if len(sys.argv) == 4:lineTitle = urllib.parse.unquote(sys.argv[1])lineC1 = urllib.parse.unquote(sys.argv[2])lineC2 = urllib.parse.unquote(sys.argv[3])try:epd.Clear(0xFF)Himage = Image.new('1', (epd2in9.EPD_HEIGHT, epd2in9.EPD_WIDTH), 255) # 255: clear the framedraw = ImageDraw.Draw(Himage)fontTitle = ImageFont.truetype('/usr/share/fonts/msfonts/msyh.ttc', 18)fontMain = ImageFont.truetype('/usr/share/fonts/truetype/wqy/wqy-microhei.ttc', 25)fontMain7 = ImageFont.truetype('/usr/share/fonts/msfonts/STSONG.TTF',18)draw.text((0, 0), lineTitle, font = fontTitle, fill = 0) draw.line((0, 30, 295, 26), fill = 0)draw.text((0, 36), lineC1, font = fontMain7, fill = 0)draw.text((0, 80), lineC2, font = fontMain7, fill = 0)epd.display(epd.getbuffer(Himage))Himage = Nonedraw = None
except:print('traceback.format_exc():\n%s',traceback.format_exc())exit()