树莓派可以这么玩:聚合信息,方便出行
本篇需要一点点技术背景,不用太多,一般理工科尤其是计算机学科的都能胜任,虽然涉及树莓派的文章评论区大都是“不明觉厉”,但本文教程部分尽量做到通俗易懂,目的明确,避免出现大脑成浆糊状的情况。
前言
一直长草树莓派,去年做项目需要快速出个原型,就趁机申请买了两个树莓派,后来由于需要屏幕,又购入了一个官方的7寸屏和一个第三方的10寸屏。等项目做完了,树莓派也闲置了,闲下来不是暴殄天物吗,于是我怀着一片好心把它带回了家,继续发挥余热。
树莓派其实就是一个小小的卡片电脑,运行linux操作系统,只不过增加了一些IO端口,可以更方便地和一些嵌入式模块比如一些传感器交互。不同的人有不同的玩法,你可以用树莓派控制家里的智能家居,也可以用来做简单的服务器,当然也可以脑洞大开,做一些新奇特别的玩意。而树莓派这么火的原因我想最主要的是有成熟的社区支持以及完善的生态圈,在用户使用的过程中,绝大部分问题都可以搜索到答案。
但有一点不可否认,要发挥树莓派的能力,需要很多基础知识,毕竟树莓派是个比较小众的东西,在极客手里能发挥出无穷想象,而在一般普罗大众手里还是吃灰的多。本人不敢自称技术达人,但为了不让树莓派吃灰,我决定充分利用手里现有的资源做点什么出来。
本来初衷可能是做一点智能家居,现在HomeAssistant和Homebridge在树莓派上的应用都已经成熟了,但想想手上一个iPhone都没有,各种智能家居套件也没有,控制什么?虽说再投入一点,技术上完全可以实现,但只有我一个人在折腾,后期维护成本也高,应用还是单一,而且对家人来讲还是太复杂,并不能使他们受益。后来有一天晚上睡觉抹黑拿手机看时间时,突然有了想法,于是经过一系列的摸索折腾,有了下面这个东东。
简单来说,就是用官方7寸屏实现了一个信息中心,包括时钟,天气预报和空气质量。最近又增加了一屏实时公交信息,计划以后增加一屏放一些ESP8266在家里各个角落收集传感器信息。
一开始开发时我是放在书桌上的:
后来搬到床头柜上了:
最后,直接上墙了:
目前已经稳定运行了半年以上,带给全家不少的便利。
准备工作
完成这个可能需要一些知识和技能,我也是一边弄一边摸索,具体来讲,需要如下技能:
一点点电路基础
编程基础
Linux基础
一点点泥瓦工基础
一点点木工基础
一点点油漆工基础
然后需要准备如下材料:
1. 树莓派3B
2. 官方7寸触摸屏
3. 官方屏外壳(可选)
4. 导线若干,有机玻璃板
5. DC-DC可调降压电源模块
6. 万用表,电烙铁,螺丝刀,锤子,凿子,手枪钻,锯子,黑胶布
7. 3M魔力扣
8. 涂料一桶
是不是被吓到了?其实不难,照着我这个教程做的话,敲不了几行命令,毕竟我已经把代码写好了,只需要下载下来运行一下即可。而且如果不需要上墙,放在桌子上用的话,仅仅需要前三项就可以了。
教程
准备树莓派
先把树莓派和屏幕合体。虽然有国产屏,但官方的屏幕做工精美,美观大方,不像国产的有比较浓郁的寨感,建议还是入官方屏。
接上软排线,线比较软,不要使蛮力,然后接上电源线,注意正负,别接反了,屏幕驱动板上标明了5V和GND,树莓派上面我接了2脚正5V,6脚接地。具体的GPIO可参考下图:
如果像我一样,最后把它安到墙上去,可以不用买外壳,省下一百多块,或者淘宝也有亚克力底座,20块的样子。装好官方外壳是这样的:
安装raspbian操作系统
为树莓派安装系统是第一步,网上教程非常多,过程也很简单。准备一张TF卡,容量不用太大,8G或16G就可以了,从官网下载镜像文件:
用相应的工具比如Win32 DiskImager将镜像写入TF卡中,然后将TF卡插入,再接入5V2A的电源给树莓派,屏幕就亮起来啦,第一次进入系统是这样的:
先期需要做的配置就是连上WIFI,由于自带屏幕了,插入鼠标键盘完全可以在小屏幕上操作。
初步运行
其实只需两行命令,即可运行起来。左上角是开始菜单,然后依次是浏览器,文件管理器,终端。先点击终端,敲入如下命令:
git clone https://github.com/szwchao/pi-info
解释:git是软件版本管理工具,目前raspbian里已经自带git,无需安装。这一步是从我的github上拉取代码,放在用户目录下
继续敲入第二行命令:
chromium-browser -kiosk ~/pi-info/index.html
解释:新版raspbian自带谷歌的chromium浏览器,chromium是chrome的开发板。这一步是用chromium打开刚才下载的网页,-kiosk让浏览器运行在全屏模式
一切顺利的话,已经可以看到屏幕变成了这样:
原理
别急,现在还没有数据,在继续之前先解释一下原理。其实原理非常简单,就是用树莓派来展示一个静态网页而已。这个网页会每秒更新一下时间,然后10分钟一次从网上提取天气数据。数据源选用的是和风天气的API,通过json直接读取当前的天气和未来三天的天气,同时也提供了PM2.5的数值。
然而思路很简单,做起来还是很难。对于前端大神来说,可能分分钟搞定,对于我这个搞嵌入式的来讲,写前端代码实在太痛苦,JavaScript还好,调整UI实在搞得精疲力尽,都是从网上找别人的资源修修改改,这方面没有基础,现在流行的前端框架react,vue什么的也不会,最后的效果都是靠调整html,css试出来的,走了相当多的弯路。最终的代码尽管能用,然而写得真是不专业,而且不是响应式的,只能适配固定的分辨率,有前端的同学能帮忙重构优化一下就好了。
获取数据
为了显示准确的数据,需要去和风天气(https://console.heweather.com/register)注册一下,然后进入控制台可以看到个人的key,和风天气提供每天4000次的查询次数,绝对够用了,而且不需要进一步的开发者实名认证,用邮箱注册个帐号就能用了,非常简单。
终端里敲入如下命令:
nano ~/pi-info/static/js/clockweather.js
将key填入第一行,并将城市改成你所在的城市名,中文即可。然后再次用chromium打开网页,应该有完整的页面了吧。
后续配置
虽然已经看到了最终成果,但为了更好地使用,还有一些配置需要做。
第一步,开机自动运行网页
mkdir ~/.config/autostart
解释:新建autostart目录,在此目录下的命令会随开机自动启动,相当于windows下开始菜单里的启动文件夹
新建一个desktop文件
nano ~/.config/autostart/browserAuto.desktop
填入如下内容
[Desktop Entry]
Type=Application
Exec=/usr/bin/chromium-browser --kiosk ~/pi-info/index.html
Hidden=false
X-GNOME-Autostart-enabled=true
Name=AutoBrowser
解释:新建一个快捷方式,开机自动启动chromium打开网页
第二步,禁用sleep模式,否则一会儿就黑屏了
sudo nano /etc/lightdm/lightdm.conf
在[SeatDefaults]里加入
xserver-command=X -s 0 dpms
第三步,全屏时隐藏鼠标
sudo apt-get install unclutter
新建一个desktop文件
nano ~/.config/autostart/unclutterAuto.desktop
填入如下内容
[Desktop Entry]
Type=Application
Exec=unclutter -idle 0.1
解释:安装unclutter软件,该软件支持在运行在全屏时隐藏鼠标指针,配置成开机自动启动
好了,到这里已经大功告成了。但,chromium虽说蛮好的,可有时候会弹出错误信息或直接崩溃掉,推荐用firefox替代。
安装firefox
sudo apt-get install iceweasel
解释:iceweasel是Mozilla Firefox浏览器的Debian再发布版
firefox并不支持命令行全屏运行,需要安装一个扩展。用firefox打开扩展管理,并安装如图所示扩展:
并修改browserAuto.desktop文件里的运行命令为:
Exec=firefox /home/pi/pi-info/index.html
最后,firefox仍有很低的频率会崩溃掉,我们可以再加一个定时任务
sudo crontab -e
在最后面添加:
1 3 */3 * * killall firefox-esr
2 3 */3 * * export DISPLAY=:0 && firefox /home/pi/pi-info/index.html
解释:每过三天半夜三点零一关掉所有firefox进程,然后过一分钟重新运行firefox
有了这些配置,到目前为止,树莓派已经稳定地运行了半年以上,一直在默默显示时间,天气,放在门口墙上为全家出行提供了便利。
上墙
背景是这样的:房子是精装的,门禁是开发商装好的,然而从第一天起就没工作过,门禁系统长期不用,成了摆设。另外,树莓派放床头柜用只能方便房间里看,想着把门禁换成树莓派,这样可以方便全家人。而且,门禁不是自家供电的,用的物业的电,省钱!
本来的门禁是这样的:
用的卡扣安装的,往上一推,面板就可以卸下来了,底板是这样的,在继续拆之前先用万用表按连接头上的标识找出正负极,测得电压为直流12V。
底板是通过四个膨胀螺丝固定在墙上的,进一步把底板卸下来,留好正负极两根电线,其它用黑胶布裹好。量了尺寸大概70mm宽,树莓派宽度满足,可以看见墙洞里是水泥块,要把树莓派塞进去需要加深,泥瓦工附体,拿起锤子凿子一顿敲,敲掉不少水泥块后终于能塞进去了。
淘宝几块钱购入DC-DC电压转换模块,输入端接入原有接线正负极,调整旋钮使得输出端输出直流5V的电压。
输出的5V接入树莓派,看GPIO图可以看出树莓派4脚可作为+5v输入,再找个地接上,我这里接了34脚。最终IO口需要接四根线,2脚接屏幕+5v,4脚接电源+5v,6脚接屏幕地,34脚接电源地。在电源线上最好加个开关方便一点。
为了固定在墙上,本来的想法是利用原来的膨胀螺丝,但经试验发现并不好操作,木工技能太差,不管用木板还是有机玻璃板,做出来的连接板都太差了,孔位开不准,而且露在外面,实在太丑,像这样的:
后来发现了这款神器,3M 高曼系列魔力扣,贴在墙上超薄无痕。
于是重新做了两块有机玻璃板,利用原来的螺丝固定在后面。
再贴上魔力扣,先把对应的另外两片魔力扣都贴上。
撕掉后面的贴纸露出3M胶,保持水平对准位置贴到墙面上,屏幕后面的四个铜柱正好能塞进墙上的洞里。
看一下正面,Perfect!!魔力扣承重3kg,这块屏也就四五百克,完全够用,内部可以栓根绳,防止万一哪天真掉下来。
从侧面看也很薄,远处看毫无违和感。
然后,需要把四个膨胀螺孔填充一下,重新刷墙,当油漆工的过程按下不表,总之一鼻子灰。最后的定妆照就是这样的:
下一步的计划
前面也说到了,后来又加了一屏,显示实时公交信息。小区门口有个公交站台,平时去坐公交时都是先拿出手机打开相应的App查询公交车位置。将其集成到网页里,可以在屏幕上手指往左一划,自动查询指定公交线路,距离小区外的站点还有多少站。就像这样:
目前已经基本完成了,然而这部分并没有相应的网站提供API,各个城市也不一样,套路不同不能通用,就不分享源码了。这里可以说一下大体思路,用Python加了个后端,用来抓取特定网站上的电子站牌信息,当手指划过屏幕便发起查询,计算出站点信息填充到页面上。做这个还是困扰于UI,废了无数脑细胞,才把界面调整好,做完后深深吐槽前端工作。
后面计划引入一些ESP8266这类的外部MCU,以树莓派为中心,再加一屏显示并控制一些外围设备。
后记
做这个小东西也耗了不少时间,做的过程中发现有很多坑要填,比如 ,一开始有亮度的问题,我写了个python脚本自动控制亮度,半夜时亮度很低,不影响睡眠。其实折腾的过程比结果意义更大,对于手里有树莓派的人来说,我建议,不管是模仿前人已有的项目还是有一些新奇的点子, 不管你基础如何,只要有颗折腾的心,不畏艰难,喜欢孜孜不倦去发现问题解决问题,那么树莓派就能给你带来乐趣。也欢迎同学们多多交流,一起折腾。
有兴趣的话后面再写一篇,介绍一下另一个树莓派配合10寸屏是怎么用来同步展示家里所有人手机里的照片的。


































校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案