打造增强型Raspberry Pi-液晶屏篇

对我来说,Raspberry Pi最吸引人的地方不是它的体积、功耗、性能之类的,而是它有两排很好用的接口,可以把软件和一些简单的硬件结合起来做点好玩的东西。对于学过做过单片机的同学来说,这些东西太小儿科了,可是对我来说还是一件非常新鲜的事情,在这里分享一下心得。

目标:为Raspberry Pi加上一个简易的液晶显示屏,可以用来显示Raspberry Pi的一些状态信息,也可以显示一个菜单,用红外线遥控器去操作菜单指挥Raspberry Pi执行相关的操作。

警告:任何时候,电流的速度都比你的反应要快,所以,在实验过程中,不正确的接线、不正确的程序、意外的短路、过载等都可能在瞬间烧掉你的Raspberry Pi或其它外围的硬件。Raspberry Pi的GPIO接口全都是没有保护电路的,一旦短路或输入过高电压,主芯片会马上被烧掉,基本上没有维修的可能性。

需要的硬件:

  • 一块面包板和若干连接线,用于组装电路。连接RPi与面板的线是母头转公头的,面包板上的连接线是两个公头的
  • 一块LCD1602液晶显示屏。如果你不会焊接,那就买一块预先焊好针脚的
  • 10K电位器一个
所需硬件

所需材料(其中红外接收管和遥控器这次用不上,下回要用)

面包板的使用方法:

可以把元件或接线直接插在面包板上连通电路,无需焊接。面包板上每一行的一组五个插孔之间是相互连通的,同一行上如果有两组五个插孔,则两组之间是断开的,适合插接集成电路或开关。面包板上行与行之间都是断开的。面包板两侧的如果有供电线插孔,则同一条供电线上的所有插孔都是连通的。

连接液晶屏:

LCD1602液晶屏提供了16列x2行的ASCII字符显示能力,工作电压5V,提供4位数据与8位数据两种工作模式,Raspberry Pi的GPIO口数量很有限,所以我们使用4位数据模式。

LCD1602液晶屏模块提供了16个引脚,我们只需接其中的12个即可:

1. VSS,接地,RPi PIN 6
2. VDD,接5V电源,PRi PIN 2
3. VO,液晶对比度调节,接电位器中间的引脚
4. RS,寄存器选择,接GPIO 14,RPi PIN 8
5. RW,读写选择,接地,表示写模式,PRi PIN 6
6. EN,使能信号,接GPIO 15,RPi PIN 10
7. D0,数据位0,4位工作模式下不用,不接
8. D1,数据位1,4位工作模式下不用,不接
9. D2,数据位2,4位工作模式下不用,不接
10. D3,数据位3,4位工作模式下不用,不接
11. D4,数据位4,接GPIO 17,RPi PIN 11
12. D5,数据位5,接GPIO 18,RPi PIN 12
13. D6,数据位6,接GPIO 27,RPi PIN 13
14. D7,数据位7,接GPIO 22,RPi PIN 15
15. A,液晶屏背光+,接5V,RPi PIN 2
16. K,液晶屏背光-,接地,RPi PIN 6

注意:

  1. 请注意GIPO引脚编号与Raspberry Pi上P1扩展口的PIN编号的区别,别搞混了。
  2. 如果你的液晶屏没有背光,则15,16脚可能不会引出,也就不用接线。
  3. LCD1602工作电压是5V,而RPi的GPIO口工作电压是3.3V,所以RW脚请确保接地进入写模式,否则尝试从LCD1602读取数据可能会烧掉RPi。
  4. VO脚接的是电位器,电位器的另外两个脚分别接5V和地。通过调节这个电位器,可以调节液晶屏的对比度。
  5. Raspberry Pi有Rev 1和Rev 2两个版本,它们对于PIN 13的定义是不同的。市面上现在大部分都是Rev 2版本,PIN 13对应GPIO 27。如果你的RPi是老的Rev 1版本,PIN 13对应是GPIO 21,你需要调整程序中的参数,把27改为21。

获取程序

git clone https://github.com/lifanxi/rpimenu.git

测试液晶屏:

Raspberry Pi通电后,正常情况下液晶屏会初始化。上面一行显示黑色方块,下面一行空白。如果屏幕一片空白或一片黑,可以尝试调节一下电位器,看看对比度是否合适。

直接以root权限运行程序包中的Adafruit_CharLCD.py,LCD上会显示两行字符:LCD 1602 Test, 123456789ABCDEF,这样就说明液晶屏已经工作正常了。

如果你想让液晶屏显示些别的东西,可以参考lcdmenu.py代码和Adafruit_CharLCD.py中所暴露的接口。

LCD1602液晶屏测试

LCD1602液晶屏测试(右上角的红棕两根线是预留给红外接收管的,目前插在那里相当于悬空,没用)

下期预告:

下期会介绍如何把红外线接收管接上去,并配置LIRC去接收遥控器的信号,从而实现用遥控器控制Raspberry Pi的目的。

参考资料:

  1. 面包板的使用
  2. Drive a 16×2 LCD with the Raspberry Pi
  3. Raspberry Pi GPIO接口信息

题外话:

细心的同学在上图中可以发现我的Raspberry Pi的电源口附近有一个体积和样子都很违和的电解电容。这里原本是一个给电源滤波用的贴片电解电容C6(15V, 220μF),但是我在给Raspberry Pi接线时,轻轻的在上面借了一点力,它就掉下来了……

根据Raspberry Pi官网Wiki的说法,C6掉了是常见病。只要你的电源质量不非常差,C6有没有都无所谓。所以,如果你的C6也掉了,除非你是焊接熟练工,或者跟我一样手贱,那可以找个相似型号的电容焊上去(电解电容,一定要注意极性),不然的话,不去管它是一个更好的选择。

用Raspberry Pi打造真正的“豆瓣FM”

想用床头的收音机收听豆瓣FM吗?如果你有一台Raspberry Pi,这个愿望就可以满足。

Raspberry Pi,中文名树莓派,是一台廉价的单板机,ARM架构,可以运行Linux操作系统,它由英国的树莓派基金会开发,目的是以低价硬件及自由软件促进校园中的计算机科学教育。是的,它设计初衷其实是给小朋友们学电脑用的,不是给你们这些Geek来折腾玩的。

用Raspberry Pi搭建一个豆瓣FM的调频广播台其实并不是一件很困难的事情,为实现这个目标,要解决的两个问题是:

  • 从豆瓣FM网站上下载MP3音乐码流并解码
  • 把音频信号调制成调频信号发射出去

造轮子的事情不要自己做,这两个问题其实已经都解决了:Github上的fmd项目实现了一个通过本地声卡播放豆瓣FM的服务器;这篇文章则介绍了如何写程序对音频信号进行调制并控制Raspberry Pi的GPIO端口把信号发送出去。所以剩下的事就是把它们组合起来就可以了。

组合代码这种脏活累活我也给大家做好了,可以从Github上获取。嗯,这份代码目前的质量是It just works,各位make一下就好,没事就不要vim它了……

git clone git://github.com/lifanxi/fmd.git

代码下载后在Raspberry Pi上可以直接make编译,如果缺少依赖,可能需要安装libcurl4-openssl-dev, libjson0-dev, libmpg123-dev, libao-dev这些依赖包(我用的是Raspbian发行版)。

fmd的使用方法可以参考Github上的说明,我所实现的扩展就是在fmd.conf配置文件中可以把driver配成”pifm”,然后把device配成88MHz~108MHz之间的某个指定的调频发射频率值(这是大多数国家调频收音机所支持的频率范围,如果你有别的无线电接收设备,这个值也可以设成是<250的任意值)来实现FM广播的发射。当driver配成pifm而不是默认的alsa时,fmd就会工作在FM广播模式。

注意,由于FM发射的代码需要直接mmap /dev/mem设备,所以把driver配成pifm让fmd工作在FM广播模式时,需要以root权限来执行fmd。以root权限运行fmd时,注意HOME目录可能会变成/root,所以相关配置文件也得改放到/root/.fmd中。

fmd运行起来后,按照文档的说明,可以telnet到127.0.0.1:10098上或用fmc执行play命令开始广播,把收音机(带收音功能的手机当然也可以)调到device参数所指定的频率上就可以收听了。

如果你的收音机离你的Raspberry Pi太远,收音效果不好,可以在Raspberry Pi主板上的GPIO 4口上插一根20cm左右长的杜邦线做天线,广播范围和信号强度就会大大提高了。

Raspberry Pi正在102.4 MHz上播放豆瓣FM的音乐

Raspberry Pi正在102.4 MHz上播放豆瓣FM的音乐

目前这个豆瓣FM广播台还有两个大问题需要解决:

  • 立体声调频广播:现在实现的版本是单声道的,理论上应该也可以把音频调制成立体声的。这需要一些我所不具备的调频广播的知识,待我有空再钻研钻研。
  • CPU占用率:现在的版本在做调制和发射时,对CPU的占用率比较高。如果Raspberry Pi正在忙于做别的事情的话,你可能会听到一些杂音或者是唱机/磁带机没电了的时候的音响效果。

其实吧,这样收听豆瓣FM可真是多此一举。直接把耳机插在Raspberry的耳机插孔用fmd播放不就完事了么……天行健,君子以折腾不息!

2013新年好

2012年,我做了这些事:

– 写了14篇博客

博客空间总访问量44096 PageView(Google Analytics数据),比去年上涨54%。首页、calibre常见问题Kindle Paperwhite使用报告体验WPS for LinuxSSH隧道Emacs入门教程这几个页面的PV占总PV的50%。博客的RSS订阅数不详,因为Google Webmaster Tools停止提供这个数据了。饭否发消息267条,其中照片22张。

把以前自己用Emacs Muse + PHP + MySQL搭建的博客系统改成了WordPress,实在是自己忍受不了Muse的折腾了,倒不是说用起来有多不方便,主要是原因的功能太弱了,而要加上一个新功能是一件极为麻烦的事情。在WordPress中手工改了一大堆的CSS,勉强让整个页面的风格基本上保持了原来的样子。显然WordPress默认做的SEO就比我自己土法炮制的要好,在Blog内容质量没有进步的情况下,流量还是增加了不少。

– 有关2012年的计划

2012年初制定的两个年度计划都没有完成:博客的数量只完成了58%,这个某种程度上也不算坏事吧,不写总比写太多废话浪费观众的时间要好;暴走50km+的计划,本来是安排在杭州举行马拉松比赛的那天的,计划好的路线也部分参考了马拉松的路线,结果那天一早醒来就发现自己发烧了,挣扎了一下没起得来,再后来这事就给耽搁了。

虽然没有完成预定的计划,不过倒是有个小小的意外收获:参照hundredpushups.com的训练计划,居然坚持了三个月左右的俯卧撑训练。每天的训练个数从开始的不到15个增加到100+,单次exhaustion test的结果由个位数(如果写具体数字,那就比写“个位数”更丢人了)上升到接近50。我觉得这个训练计划之所以可以对我奏效,很重要的原因是整个计划把训练过程分解成很多可以达到的目标,所以可以不断的从过程中获得信心与成就感。同时通过pushupslogger.com记录训练的进度,也能很有效的达到自我激励和事后回顾的作用。这些方法其实在很多领域都是可以适用的。

– 自由软件相关

日常操作系统由Debian换成了Arch Linux,原因仅仅是因为公司办公用的笔记本上装Debian会频繁出现系统死锁问题,淡淡的觉得自己有点对不起Debian……

杭州Linux用户组杭州GDG等自由软件团体积极的打酱油,九月份以HZLUG的名义与浙江大学LUG@ZJU及杭州GDG合作举办了Software Freedom Day杭州站的活动。

– 几个IT产品

Nexus 7平板:基本上还算值。平板的用处就是在不想打开电脑时,可以比用手机更高效的完成一些简单的工作。

三星830 128G SSD:很值。3年半前的笔记本换上SSD后,性能提升还是很明显的,比加内存效果明显多了,尤其对于Windows而言。

Kindle Paperwhite:很值。我很有在黑暗中阅读的需求,但我又没办法接受用背光屏幕或外置LED灯阅读。Paperwhite的前光照明虽然不完美,但我已经满意了。

东风标致408 2.0 MT:把汽车也凑合算成是一个IT设备吧,也在这里提起一下。虽然我不太懂得如何去折腾它,就凑合着用用吧。

– 旅游

徽杭古道徒步一日游,大明山滑雪两日游,黄山三日自助游(第三次去黄山,本次收获是看到了雾凇,但因为冰冻仍没有爬成莲花峰),泰国五日游,苏州穹窿山一日游,南京两日游,若干次杭州景点一日游。

今年的铁路运转里程出乎意料的少,仅为一次往返杭州南-南京的1038公里。自驾车行程约6000公里。轨道交通方面,体验了苏州与杭州的地铁,同为浦镇的B型车,整体体验苏州的要好于杭州的。

展望2013年:

别的不说,先要找个春暖花开的时候把去年欠下的徒步目标完成了,顺便再练练俯卧撑,把单次exhaustion test的目标值定在100。

……

要不……就先这样吧。

关注2013维也纳新年音乐会

继续维持传统,第九次写名为关注xxxx维也纳新年音乐会的Blog。前几篇在:2005 2006 2007 2008 2009 2010 2011 2012

2013维也纳新年音乐会CD封面

2013维也纳新年音乐会CD封面

今年的曲目单比较诡异:

01 Josef Strauss – Die Soubrette; Polka; op. 109 – 女高音歌手波尔卡 *

02 Johann Strauss II – Kuss; Walzer; op. 400 – 亲吻圆舞曲 *

03 Josef Strauss – Theater-Quadrille; op. 213 – 剧院四对舞 *

04 Johann Strauss II – Aus den Bergen; Walzer; op. 292 来自山中圆舞曲 *

05 Franz von Suppé – Die Leichte Kavallerie; Ouvertüre – 轻骑兵序曲

06 Josef Strauss – Sphärenklänge; Walzer; op. 235 – 天体乐声圆舞曲

07 Josef Strauss – Die Spinnerin; Polka francaise; op. 192 – 纺织女工法兰西波尔卡 *

08 Richard Wagner – “Lohengrin”, Prelude (3. Akt) – 罗恩格林第三幕前奏曲 *

09 Joseph Hellmesberger Jr. – Unter vier Augen; Polka Mazur – 私下玛祖卡波尔卡 *

10 Josef Strauss – Hesperus-Bahnen; Walzer; op. 279 – 金星的轨迹圆舞曲 *

11 Josef Strauss – Gallopin; Polka schnell; op. 237 – 奔跑快速波尔卡 *

12 Joseph Lanner – Steyrische Tänze; op. 165 – 施蒂亚德的舞蹈 *

13 Johann Strauss II – Melodien-Quadrille; op. 112 – 旋律四对舞 *

14 Giuseppe Verdi – Don Carlos; Ballettmusik (3. Akt) – 唐·卡洛斯第三幕芭蕾音乐 *

15 Johann Strauss II – Wo die Zitronen blüh’n; Walzer; op. 364 – 柠檬树开花之处圆舞曲

16 Johann Strauss I – Erinnerung an Ernst oder Der Carneval in Venedig; op. 126 – 威尼斯狂欢节的梦幻回忆

17 Josef Strauss – Plappermäulchen; Polka schnell; op. 245 – 小嘴不停快速波尔卡

18 Johann Strauss II – An der schönen blauen Donau; Walzer; op. 314 – 蓝色多瑙河圆舞曲

19 Johann Strauss I – Radetzky-Marsch; op. 228 – 拉德茨基进行曲

其中第16首不太确定,因为原曲目单上写的是小约翰的作品,这里列出的是老约翰的,因为似乎小约翰没有这个曲子。第17首不确定是正式曲目单的最后一首还是加演的第一首,如果是前者,那17和18之间还要插入一首加演第一首,不过以小嘴不停的风格来说,我比较相信它就是加演的第一首。

这个曲目单诡异之处在于:居然有12首以前未在新年音乐会上演奏过的新曲目;居然出现了8名作曲家;居然有7个约瑟夫的曲子;居然上半场只有4个曲子;居然用波尔卡做开场曲……

没听过的新曲实在太多,有点不知道该如何点评。在已经听过的曲子中,下半场开场的“轻骑兵序曲”和“天体乐声”都算是我比较喜欢的作品,我第一次自己录制新年音乐会是在1997年,“轻骑兵序曲”同样是1997年新年音乐会下半场的开场曲。那年的录音我听了如此多遍,以致于我几乎还能记得那时赵忠祥对这个曲子的解说词:“音乐会下半场将要演出的第一首曲目是弗朗茨·冯·苏佩的轻骑兵序曲,意大利血统的苏佩出生在克罗地亚,他在以匈牙利为背景的歌剧《轻骑兵》中融入了浓郁的意大利风格,我想,可能由于指挥穆蒂来自意大利,所以今年他选用了这个曲目”。

威尼斯狂欢节的梦幻回忆在2007年刚刚由梅塔指挥演出过,那一年,梅塔在这个曲子中融入了与整个乐队互动的噱头,气氛热烈,让人忍俊不禁,记忆很深刻。不知道这次的音乐会中会出现什么有意思的噱头,虽然噱头之是音乐会中的一个小小花絮,不过每年倒也都挺期待的。

2013年是瓦格纳和威尔弟这两位作曲家的200年诞辰纪念,所以这次新年音乐会中也会出现他们的曲目,这似乎是第一次在同一场音乐会中引入对两位作家纪念的作品,也是为什么这次破天荒出现8位作曲家作品的重要原因这一。

2013年维也纳新年音乐会的指挥是奥地利本土指挥家弗朗兹·威尔瑟-莫斯特(Franz Welser-Möst),这是他第二次执捧维也纳新年音乐会,前一次是在2011年。曲目单上经典的天体乐声圆舞曲的出现,让一些人开始调侃他是否会遭遇“天体乐声大魔咒”,因为1979年波斯科夫斯基、1987年卡拉扬、1992年克莱伯、2004年穆蒂、2009年巴伦博伊姆都是在维也纳新年音乐会上指挥过这个曲子之后就再也没有在新年音乐会的指挥台上出现过了。

其实,今年,我完全把提前关注维也纳新年音乐会曲目单这件事给忘了,要不是有人把我拉入了一个新年音乐会的QQ群,导致我去维也纳新年音乐会贴吧瞄了一眼,可能我现在还没想起这件事来。跟2006-2008年那段时间相比,现在对音乐的热情有了明显的下降, 一天还是24小时,但总是觉得可以安静的沉浸在音乐中的时间越来越少,那些曾经熟悉的旋律也慢慢开始变得陌生起来。不过在百度贴吧上,还是能看到很多熟悉的ID,活跃而深入的讨论着有关新年音乐会的一切。花了几个小时关注了一下相关的信息,所有的陌生感很快就变得烟消云散。

因为,传统,终究是传统;习惯,也不是那么好改变的。

相关链接:

Kindle Paperwhite使用报告

从第一代Kindle出现到现在一直很关注E Ink设备,帮人买过Kindle 2, Kindle 3, Kindle 4各一台,不过自己倒是一直没有Kindle,这次Kindle Paperwhite发布,感觉有点中毒。虽然手上已经有了汉王N510、盛大Bambook,还有一台免费试用的网读电纸书测试机,不过考虑到一直以来开发calibre时没有Kindle作为测试机所带来的尴尬,于是就发布当天在Amazon上订购了一台。9月6日预定,Amazon10月4日发货,10月22日到手,无税,这次海淘基本顺利。

我的E Ink设备们

我的E Ink设备们:从左到右为汉王N510 (with OpenInkpot),盛大Bambook,网读,Kindle Paperwhite

Kindle Paperwhite的包装一如既往的使用Amazon的Frustration-Free Packaging包装盒,无需外包装加固且易于打开。打开包装后里面的东西也是老三样:Kindle主机、USB线、快速入门卡,无充电器。

由于E Ink屏不通电也能保持显示的特性,全新的Kindle屏幕上默认显示了电源开关的位置和开机方式,所以无须说明书即可轻松使用。开机后,默认照明光是开启的,并会自动进入一个使用引导的界面,通过步步指引,教会你使用Kindle所需要的基本技能。由于Kindle Paperwhite取消了所有的实体按键,这个入门指引的功能非常有必要,否则很可能不知道应该怎么操作。总的来说,Kindle从开箱到开机使用的整个过程,包括无线配置和Amazon帐号绑定过程,都设计得极为人性化,体验无可挑剔。

从握持的手感来说,Kindle Paperwhite明显比Kindle 4要重一些,跟Kindle Touch差不多。如果跟Kindle 3比的话总的来说是小巧了很多,而且设备边缘做的比前几代产品要圆滑一些,所以手感不错。之前非常纠结的没有了实体翻页键的问题,从实际使用上来说不算是非常严重的问题,而且大姆指的摆放位置也可以更舒适一些,不过触屏终究是不能提供一个理想的按键反馈,尤其是当设备反应有些迟缓的时候,无法判断是不是翻页成功了。

从显示效果来说,如果不仔细比对,全新的高分辨率屏(212 ppi)带来的体验提升并不是非常的明显,不过屏幕的对比度还是有了一个明显的提高,更“白底黑字”一些。Paperwhite支持黑体和宋体两种中文字体和6种英文字体切换,但默认的两种中文字体都比较丑陋。还好新的KF8文件格式很强大,包括calibre在内的一些第三方软件可以生成内嵌字体的awz3文件,从一定程度上可以弥补这个问题。

白天情况下最亮与最暗照明对比

白天情况下最亮与最暗照明对比,不是非常明显;但如果是晚上,最亮照明其实是非常亮的

Paperwhite最重要的新特性就是前置照明光, 照明光亮度可以有24档调节,但无法完全关闭。从总体感受来说,光照很柔合,看着还是很舒服的,效果远好于以前用过的一些外置前照LED灯。但照明还是没有想象中的那么均匀,尤其在晚上,屏幕下方是可以看到明显的4道照明光束,一定程度上来说也存在很多人所抱怨的照明光的红绿斑块的问题。如果你追求一种“完美”的均匀照明,恐怕Paperwhite还不能称得上是理想。

这次实际拥有并使用了Kindle后,感觉它跟想象中和以前的试用感受很一致,就是阅读体验确实做得很好,除了看书这件事本事以外,你不需要太多考虑别的东西。但是原生系统不支持EPUB格式以及对PDF的简陋的支持也是一大问题。对于普通中文用户来说,没有中文界面及中文输入法(意味着无法搜索书籍)、丑陋且不易更换的中文字体更是一个很不方便的地方。换句话说,对于一般的中文用户来说,在不谈第三方固件的前提下,Kindle并没有传说中的那么“神器”,某些国产品牌的电子书也没有传说中那样烂到不能让人接受。

细心的同学可以在上面的图片中注意到Paperwhite的书架上有一本“全球Kindle用户指南中文版”,这是似乎是Amazon第一次官方提供中文的用户指南,而且里面写明了Amazon.cn或中国境内销售商售出的Kindle由北京卓越亚马逊提供售后,并且还列出三包条款和一些中国GB标准适用性。原生系统中提供了两种中文字体,并且还提供了英汉词典和新华字典。不知道这些小细节是不是预示着Kindle已经做好了进入中国市场的前期准备。

最后吐槽一下正在免费试用的“网读”电子书,这款产品的最大的卖点是智能PDF重排,可以支持扫描版或非扫描版的PDF文件在6寸屏幕上的自动重新排版。对于扫描版的PDF,它会进行图像分割和拼接来实现重排,在E Ink设备有限的计算资源情况下,这个技术还是颇有可圈可点之处。但是,技术再牛,没有一个好的产品去支撑依然是个废品。以做技术POC的态度去做产品,最终恐怕是很难开拓出一个良好的市场的。虽然我很喜欢折腾E Ink设备,但最终我的目的还是阅读本身,我没有办法接受打开一个文件准备阅读时还要纠结于在N种“智能排版”模式中费心选择一种的阅读体验。我很敬重像网读这样专注于技术的公司,不过对于网读阅读器这个产品,试用后的结论还是:“退货”。

2012-11-09 更新:Amazon为Kindle Paper发布了新的5.3.0固件,提供了更美观的中文字体,还提供了中文界面和输入法,改善了漫画阅读功能。请参考http://www.amazon.com/gp/help/customer/display.html/?nodeId=201064850#download