电子纸时钟的一些后续

这个东西无疑是我的无聊创意中,比较实用的一款,目前换了亚克力外壳,放在餐柜上,小学一年级的闺女现在吃早饭会自己看天气。

右边是树莓派的1.0版本,左边的后面介绍

在实际使用的过程中发现,树莓派会时不时的因为磁盘IO问题死机,断电重启不行,必须格式化重新写入系统才能恢复。隐约感觉可能是SD卡的问题,于是买了一张Sandisk的SD换上,问题消失,应该就是之前的金士顿卡不太兼容。

再说图中左边那个看起牛逼不少的版本。

去年冬天的某个时间,闲逛某宝时发现微雪出了一个7.5寸的双色电子纸屏,而且有ESP8266的驱动板,便想着做个低功耗电池版的放办公室用用。显示天气是其次,主要是当时还比较关注股市,可以显示下大盘指数什么的···抬头间指点股市,激扬代码~~

ESP8266这个版本就叫2.0吧。受限于ESP8266的硬件限制,虽然自带WIFI,但是内存小,频率低,跟树莓派一样直接获取和渲染信息不现实。于是采取了Server端生成图片,ESP8266下载后渲染的方式。ESP8266下载渲染完毕便可以进入休眠状态,理论上电池供电的话用个把月应该没问题(吧?,具体我也没试,还没到这一步项目就over了)。

捣鼓出来了之后,跟1.0一比,屏幕显示效果好到爆,对比度高,还有双色加持。但是有个挺要命的缺点:刷新速度太慢。双色版本刷新一次要16秒(官方数据),如果1分钟刷一次,有1/3的时间都在刷屏过程中。所以后来我改成了2分钟一刷,放在办公桌上,试运行了一段时间,然后就···没有然后了,因为屏幕坏了··· 从它的超长刷新时间来看,我隐约觉得这个屏可能经不住这么刷,再买一块试试还挺贵的,就终止了项目😂

项目放到github了,有兴趣可以鼓捣下,不包“售后”~ https://github.com/emptyhua/epaper_board

坏掉的屏幕
反色的效果

Asterisk PJSIP configuration example

pjsip.conf

[transport-udp]
type=transport
protocol=udp
bind=0.0.0.0
allow_reload=yes
external_media_address=172.217.25.78 // server ip address
external_signaling_address=172.217.25.78 // server ip address

pjsip_wizard.conf

[user_defaults](!)
type = wizard
endpoint/transport=transport-udp
endpoint/context=from-internal
endpoint/rtp_symmetric=yes
endpoint/rewrite_contact=yes
endpoint/force_rport=yes
endpoint/disallow=all
endpoint/allow=ulaw,gsm
aor/max_contacts=2
aor/qualify_frequency=30

[user1](user_defaults)
inbound_auth/username = 101
inbound_auth/password = password101

[user2](user_defaults)
inbound_auth/username = 102
inbound_auth/password = password102

Mount network location in Golang on Windows

import (
	"syscall"
	"unsafe"
)

type NETRESOURCE struct {
	Scope        uint32
	Type         uint32
	DisplayType  uint32
	Usage        uint32
	lpLocalName  *uint16
	lpRemoteName *uint16
	lpComment    *uint16
	lpProvider   *uint16
}

func MountWindowsNetworkLocation(location string, username string, password string) error {
	h := syscall.MustLoadDLL("mpr.dll")
	c := h.MustFindProc("WNetAddConnection2W")

	nr := NETRESOURCE{
		Type:         uint32(1),
                // lpLocalName: syscall.StringToUTF16Ptr("R:"), uncomment this line to map a local device
		lpRemoteName: syscall.StringToUTF16Ptr(location),
	}
        dwFlags := uint32(1)

	r1, _, err := c.Call(uintptr(unsafe.Pointer(&nr)),
		uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(password))),
		uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(username))), uintptr(dwFlags))

	if r1 != 0 {
		return err
	}

	return nil
}

全球首款配备电子纸屏幕的抽纸盒~

IMG_1927

用树莓派+电子纸屏做了一个时钟,很偶然的搭配一个抽纸盒作为外壳,虽然并不是第一款电子纸屏的时钟,但绝对是全球甚至宇宙第一款带有电子纸屏幕的抽纸盒。。

先放图:

IMG_1912

内部构造,模块和跳线全部用热熔胶固定

IMG_1916

后视:

IMG_1918

检查一下这款时钟的抽纸盒功能。。

IMG_1919

 

IMG_1920

图就贴到这,下面聊聊我为啥突发奇想做出这么个东西。某天我想在淘宝上买个简单的闹钟,在搜索栏输入 简约 闹钟 俩关键词,出来结果里面有个很合心意,是这样的:

屏幕快照 2016-04-25 下午5.16.14

外观简单,白屏黑字,对比好强烈,好高大上。。于是我又看了一下评论里的买家show

屏幕快照 2016-04-25 下午5.18.47

WTF, 差距也忒大了吧,果断放弃,再找,然后发现基本都是描述里屏幕P的很白,实物就是另一番面貌了。 揍在这个时候,想起了吃灰已久的kindle,如果用kindle的电子纸屏来做个闹钟一定很理想,然后在google找到了下面的图片:

E-Paper-Display-HAT

显示效果符合预期,而且图中时钟是基于树莓派做的,正好我也有两块树莓派,于是很快做了一个决定:自己DIY一块电子纸屏的时钟,这块时钟除了显示基本的日期时间,还可以显示天气和室内的温湿度(如果只能显示日期,优越感何在。。)。果断在淘宝采购了材料:4.3寸串口电子纸屏,DHT22温湿度传感模块,还有一块树莓派3(没错,虽然我是一个拥有了1代和2代的男人,但是还是忍不住购买了3代。。)后面,经过一阵python乱舞,原型很快出来了:

IMG_1879

搞到这里,加个壳子就算完活了。但是如何利用自身现有条件DIY一个即合身又高大上的壳恰恰是个难点。。。

我最开始设想的材料是:超轻粘土。这东西可塑性超高,自己捏捏就OK,不用神马3D打印之类的高科技。但是后面实际操作的结果是:1.  没有耐心,手残,很难把这个东西的表面处理的平整 2. 表面粗糙,没有光泽,体现不出高大上的效果。

经过一番考虑,又想出一个方案:自己淘宝买一个尺寸和样式合适的实木收纳盒,然后自己打个孔,改造一下。实际操作的结果就是:只有这个抽纸盒符合我的心意。。 反正桌子上也是要放抽纸的,就让他们结合吧。。。

IMG_1928

最后,Python脚本已开源,欢迎参观指导:https://github.com/emptyhua/epaper_clock

PHP中直接读取zip中的指定文件

碉堡。。不愧是世界上最好的语言,只需要一个函数:

file_get_contents('zip://test.zip#test.txt');

来自:http://stackoverflow.com/questions/10420112/how-to-read-a-single-file-inside-a-zip-archive