宅男必备:配备电子纸屏幕的抽纸盒

20160514220653351-0
用树莓派+电子纸屏做了一个时钟,很偶然的搭配一个抽纸盒作为外壳,虽然并不是第一款电子纸屏的时钟,但绝对是全球甚至宇宙第一款带有电子纸屏幕的抽纸盒。。
先放图:
20160514220653335-0
内部构造,模块和跳线全部用热熔胶固定
20160514220653181-0
后视:
20160514220653495-0
检查一下这款时钟的抽纸盒功能。。
20160514220653786-0
图就贴到这,下面聊聊我为啥突发奇想做出这么个东西。某天我想在淘宝上买个简单的闹钟,在搜索栏输入 简约 闹钟 俩关键词,出来结果里面有个很合心意,是这样的:
20160514220653859-0
外观简单,白屏黑字,对比好强烈,好高大上。。于是我又看了一下评论里的买家show
20160514220653567-0
WTF, 差距也忒大了吧,果断放弃,再找,然后发现基本都是描述里屏幕P的很白,实物就是另一番面貌了。 揍在这个时候,想起了吃灰已久的kindle,如果用kindle的电子纸屏来做个闹钟一定很理想,然后在google找到了下面的图片:
20160514220653267-0
显示效果符合预期,而且图中时钟是基于树莓派做的,正好我也有两块树莓派,于是很快做了一个决定:自己DIY一块电子纸屏的时钟,这块时钟除了显示基本的日期时间,还可以显示天气和室内的温湿度(如果只能显示日期,优越感何在。。)。果断在淘宝采购了材料:4.3寸串口电子纸屏,DHT22温湿度传感模块,还有一块树莓派3(没错,虽然我是一个拥有了1代和2代的男人,但是还是忍不住购买了3代。。)后面,经过一阵python乱舞,原型很快出来了:
20160514220653406-0
搞到这里,加个壳子就算完活了。但是如何利用自身现有条件DIY一个即合身又高大上的壳恰恰是个难点。。。

我最开始设想的材料是:超轻粘土。这东西可塑性超高,自己捏捏就OK,不用神马3D打印之类的高科技。但是后面实际操作的结果是:1. 没有耐心,手残,很难把这个东西的表面处理的平整 2. 表面粗糙,没有光泽,体现不出高大上的效果。
经过一番考虑,又想出一个方案:自己淘宝买一个尺寸和样式合适的实木收纳盒,然后自己打个孔,改造一下。实际操作的结果就是:只有这个抽纸盒符合我的心意。。 反正桌子上也是要放抽纸的,就让他们结合吧。。。
20160514220653151-0
最后,Python脚本已开源,欢迎参观指导:https://github.com/emptyhua/epaper_clock

制作方法
所用的硬件
1、树莓派3
2、微雪4.3寸串口电子墨水屏
3、DHT22温湿度传感模块

硬件连接
屏幕\树莓派
DIN\TX(GPIO14)
DOUT\RX(GPIO15)
GND\GND
VCC\3V

DHT22\树莓派
DOUT\1-Wire(BCM4)
GND\GND
VCC\V

DHT22 DOUT引脚也可以接到其他gpio脚上,不过要相应的修改home_air_sensor.py中read_retry第二个参数

准备软件环境
禽兽,放开那个串口。。
树莓派的串口默认是用于linux串口终端登录用的,如果要通过串口控制屏幕,就需要把它解放出来~

树莓派3的串口BUG
在释放串口之前,我们要先解决一下树莓派3的BUG(如果用1,2代请忽略这一步)树莓派3的硬件串口被分配分配给了蓝牙模块,而GPIO14和GPIO15的串口是由内核模拟的,不稳定(可以说基本不能用),所以首先要把GPIO14和GPIO15改成硬件驱动

第一步 确保SD卡刷了最新的raspbian jessie镜像
第二步 系统启动,并连接了网络
第三步 执行

sudo apt-get update
sudo apt-get upgrade

第四步 编辑 /boot/config.txt 添加一行

dtoverlay=pi3-miniuart-bt

最后 禁用自带蓝牙

sudo systemctl disable hciuart

释放串口
编辑 /boot/cmdline.txt,默认是下面这样

dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait

或者这样

dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=/dev/mmcblk0p2 kgdboc=serial0,115200 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait

把console=ttyAMA0,console=serial0,kgdboc=***这两个参数删掉 变成下面这样

dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait

之后sudo reboot重启系统 串口就可以正常使用了

安装软件依赖

sudo apt-get install python-requests python-lxml python-serial git build-essential python-dev
git clone https://github.com/adafruit/Adafruit_Python_DHT.git
cd Adafruit_Python_DHT
sudo python ./setup.py install

准备串口屏幕的图片和字体资源
这个串口屏是通过TF卡加载字体和图片资源的(好坑爹的设计。。),所以你需要准备一张TF卡,格式化为 FAT32 文件系统,分配单元大小选择 4096 字节,然后把tf_card文件夹中的文件全部copy到TF卡根目录,并把TF卡查到屏幕的卡槽里。串口屏的更多资料见:http://www.waveshare.net/w/upload/archive/4/4a/20150408073133!4.3inch-e-Paper-UserManual-CN.pdf

终于可以运行了~~

在运行之前先编辑一下weather_time_render.py,找到下面2行,把注释取消掉,运行时会把屏幕TF卡中的文件加载到屏幕自带的NandFlash中,之后就不需要插TF卡了~~

# screen.load_pic()
# time.sleep(5)

运行脚本

sudo ./home_air_sensor.py
./weather_fetcher.py
./weather_time_render.py

没有特殊情况,屏幕将和成品显示同样的画面,第一次运行之后就可以把加载图片的2句代码再次注释掉了~

转自 蓝色的华



17 评论

  1. 楼主,我想问下你,我经常会出现[Errno 11] Resource temporarily unavailable 或者 [Errno 5] Input/output error
    请问这是为什么,有时候正常有时候不正常

发表评论

你的邮件地址不会公开


*