程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

2023-06(4)

六一节,赋诗一首

发布于2021-06-07 19:50     阅读(1354)     评论(0)     点赞(27)     收藏(2)


上周四开始感冒发烧,到今天还在咳嗽,所以也就完美错过带女儿过六一节。想想还是不甘心,翻箱倒柜一番又找出了之前做的墨水屏盒子,赋诗一首看看能不能骗过幼儿园小朋友。

盒子里面是个树莓派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:

  1. <!DOCTYPE html>
  2. <html lang="en" xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta charset="utf-8" />
  5. <title>test</title>
  6. </head>
  7. <body>
  8. <form action="show.php" method="post">
  9. 标题:<input type="text" style="width:300px" name="txt1"/>
  10. <br/>
  11. 行一:<input type="text" style="width:300px" name="txt2" />
  12. <br />
  13. 行二:<input type="text" style="width:300px" name="txt3" />
  14. <br />
  15. <hr/>
  16. <input type="submit" value="upload"/> <input type="reset" value="reset" />
  17. </form>
  18. </body>
  19. </html>

 2、PHP:

  1. <?php
  2. $t = $_POST['txt1'];
  3. $l1 = $_POST['txt2'];
  4. $l2 = $_POST['txt3'];
  5. $t = urlencode($t);
  6. $l1 = urlencode($l1);
  7. $l2 = urlencode($l2);
  8. $cmd = "sudo python3 /home/pi/src/ePaper/python3/show.py $t $l1 $l2";
  9. #echo $cmd;
  10. exec($cmd);
  11. ?>

 3、PYTHON:

  1. #!/usr/bin/python3
  2. # -*- coding:utf-8 -*-
  3. import epd2in9
  4. import time
  5. import sys
  6. from PIL import Image,ImageDraw,ImageFont
  7. import traceback
  8. import urllib.parse
  9. epd = epd2in9.EPD()
  10. epd.init(epd.lut_full_update)
  11. lineTitle = '';
  12. lineC1 = '';
  13. lineC2 = '';
  14. if len(sys.argv) == 4:
  15. lineTitle = urllib.parse.unquote(sys.argv[1])
  16. lineC1 = urllib.parse.unquote(sys.argv[2])
  17. lineC2 = urllib.parse.unquote(sys.argv[3])
  18. try:
  19. epd.Clear(0xFF)
  20. Himage = Image.new('1', (epd2in9.EPD_HEIGHT, epd2in9.EPD_WIDTH), 255) # 255: clear the frame
  21. draw = ImageDraw.Draw(Himage)
  22. fontTitle = ImageFont.truetype('/usr/share/fonts/msfonts/msyh.ttc', 18)
  23. fontMain = ImageFont.truetype('/usr/share/fonts/truetype/wqy/wqy-microhei.ttc', 25)
  24. fontMain7 = ImageFont.truetype('/usr/share/fonts/msfonts/STSONG.TTF',18)
  25. draw.text((0, 0), lineTitle, font = fontTitle, fill = 0)
  26. draw.line((0, 30, 295, 26), fill = 0)
  27. draw.text((0, 36), lineC1, font = fontMain7, fill = 0)
  28. draw.text((0, 80), lineC2, font = fontMain7, fill = 0)
  29. epd.display(epd.getbuffer(Himage))
  30. Himage = None
  31. draw = None
  32. except:
  33. print('traceback.format_exc():\n%s',traceback.format_exc())
  34. exit()

 



所属网站分类: 技术文章 > 博客

作者:jjjjjjjj

链接:http://www.phpheidong.com/blog/article/89406/08bf5a943dc80441065e/

来源:php黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

27 0
收藏该文
已收藏

评论内容:(最多支持255个字符)