书名:树莓派实战秘籍
ISBN:978-7-115-37919-1
本书由人民邮电出版社发行数字版。版权所有,侵权必究。
您购买的人民邮电出版社电子书仅供您个人使用,未经授权,不得以任何方式复制和传播本书内容。
我们愿意相信读者具有这样的良知和觉悟,与我们共同保护知识产权。
如果购买者有侵权行为,我们可能对该用户实施包括但不限于关闭该帐号等维权措施,并可能追究法律责任。
• 著 [美]Ruth Suehle Tom Callaway
译 符鹏飞 马立新 潘铁军
责任编辑 陈冀康
• 人民邮电出版社出版发行 北京市丰台区成寿寺路11号
邮编 100164 电子邮件 315@ptpress.com.cn
• 读者服务热线:(010)81055410
反盗版热线:(010)81055315
Simplified Chinese Edition, jointly published by O’Reilly Media, Inc. and Posts & Telecom Press, 2015. Authorized translation of the English edition, 2011 O’Reilly Media, Inc., the owner of all rights to publish and sell the same.
Copyright © 2011 by O’Reilly Media, Inc.
All rights reserved including the rights of reproduction in whole or in part in any form.
本书中文简体版由O’Reilly Media, Inc.授权人民邮电出版社出版。未经出版者书面许可,对本书的任何部分不得以任何方式复制或抄袭。
版权所有,侵权必究。
Raspberry Pi(中文名为“树莓派”)是基于Linux系统设计的一款世界上最小的计算机,外形只有信用卡大小,但功能强大。自问世以来,树莓派受到众多计算机发烧友和创客的追捧,甚至到了一“派”难求的地步。
本书涵盖了65个使用树莓派的技巧,共6章,分别为黑客配置技巧、为树莓派做Linux黑客、房间内的树莓派、室外的树莓派、多媒体树莓派以及扩展树莓派几个方面全方位地介绍了树莓派,引导读者创造出更多复杂的创客应用。
本书内容通俗易懂、示例丰富。对于那些具备一定Linux基础知识并且对树莓派感兴趣的读者,这是一本不可多得的启发式教程。
这是一本为爱好者准备的书籍,因此读者需要具备一些对树莓派和Linux的一些基本知识。它包含了很多有用的、极具挑战性和实用性的各种案例,内容无所不包,甚至会让你匪夷所思。你可以在这里学习到智能家居(物联网)的内容,也可以领略3D打印的风采,甚至于可以将你的Pi做成计算机集群或者参与到SETI的搜索外星人项目中(你也可以推而广之,将Pi作为矿机并参与到比特币的挖掘大潮中)。
当然,本书也包括了很多比较“常规”的应用,比如使用Pi做为文件服务器或打印服务器、连接传感器与外设(甚至可以将它作为一块Arduino使用)、航空摄影、灯光控制以及各种多媒体应用等。可以说,书的内容覆盖了几乎所有Pi的基础应用,你完全可以根据这些基础应用做进一步的组合及拓展,创造出独有的复杂的创客应用。
然而,本书可以对你提供的帮助并不止于此,它还是一本创客的基础教材,涵盖了一个合格的创客所必须具备的知识点。比如怎样建立你的交叉编译器,如何自定义内核,怎样更新固件,如何添加并更改外设的驱动等。当然,本书也包括了对树莓派主板本身的介绍,如GPIO的定义、各种连接方式、内存分配方法和供电注意点等,这些都是要成为一个合格的Hacker所必不可少的基本知识。
本书的作者是两位Red Hat的资深专家,对Fedora有非同寻常的了解,因此,本书会略微偏重于Pidora,但又同时兼顾了Raspbian及其他发行版本。由于本书内容覆盖很广,因此有部分章节是由精通该领域的Master亲自撰写的,而本书的作序者即为树莓派的创始人,因此全书内容的广度和权威性毋庸置疑。更难得的是,全书行文方式举重若轻,繁简有度,实在是一个学习Linux及开源硬件并在此基础上进行进一步创客工作的极好的教材。
这也是我们翻译的第三本树莓派相关的书籍了,前两本主要是聚集于某一方面的应用,而这一本内容较多,涉及的知识点也比较广。工作之余进行翻译工作,无论是对意思的理解、案例的复现或模拟,以及字句的斟酌,都颇为辛苦。不过本书的内容是我兴趣所在,而且两位作者显然不仅是树莓派的超级粉丝,同时也是科幻小说的爱好者,恰好这也是我的一个小小的爱好。无论如何,在推敲字句之余,常能有会心一笑之时,可谓苦中有乐了。
本书能够出版,我要特别感谢陈冀康编辑,他给了我翻译这样一本杰作的机会,并在翻译过程中提供了很多帮助。
在本书将要完成之际,我的母亲需要动一个手术,爸爸妈妈为了不影响我们,自己联系了医院就住了进去,这么多年来他们一直就是这么为子女默默奉献,并把我们姐弟三人都培养到硕士毕业。如今他们逐渐变老,父母之恩,难以为报,谨代表我的姐姐和弟弟将此书献给我们亲爱的爸爸妈妈,愿他们永远健康长寿!
感谢好友张倩和Ying,他们对全书做了专业而全面的审核;必须感谢於博华和苏丞铭,感谢她们辛苦的校对工作。
我还要感谢我的家人,翻译本书的过程中几乎占据了我所有的业余时间,没有他们的支持我难以想象能按时完成这项工作!
临近付梓之际,心中难免惴惴,虽然我尽力做了很多努力以避免错误,也广邀同好做了审阅,不过错误或不妥之处可能难免。如果各位读者发现了这些错误或希望能和我进行探讨,请发送邮件到这个邮箱:fupengfei8@hotmail.com,我将尽我所能答复,并对你提供的帮助表示由衷地感谢。
符鹏飞
符鹏飞
多年从事移动通信相关研发工作,对最新的移动制式、通信方法以及嵌入式实现有一定的理论与实践积累。对各种开源技术很感兴趣,包括开源硬件如树莓派、Arduino等,以及开源软件如Linux、LAMP、Hadoop、OpenCV等,最近的兴趣在大数据搜索方面,此外,在一些GitHub上的项目有所贡献。
马立新
山东大学和北京工业大学硕士生导师,德国3S软件有限公司大中华区总裁。他还担任中国人工智能学会理事、中国机器人产业联盟副理事长、中国人工智能学会智能产品与产业工委会副主任等社会职务。已出版著作2部,发表论文20多篇。
潘铁军
潘铁军教授是硕士生导师、浙江省首届教学团队、浙江省科技创新重点团队主要成员,宁波市4321人才、宁波市领军与拔尖人才,南京市321领军型科技创业人才,多次荣获教学特别贡献奖、教学成果一等奖、教学建设优秀奖、先进工作者、“育人建功五个一”先进个人及2014年浙江省优秀教师等。发表论文20多篇,获得软件著作权20多项,创立企业多家,在智能家居、信息互联网应用、移动支付等方面成果颇丰。
O’Reilly Media通过图书、杂志、在线服务、调查研究和会议等方式传播创新知识。自1978年开始,O’Reilly一直都是前沿发展的见证者和推动者。超级极客们正在开创着未来,而我们关注真正重要的技术趋势——通过放大那些“细微的信号”来刺激社会对新科技的应用。作为技术社区中活跃的参与者,O’Reilly的发展充满了对创新的倡导、创造和发扬光大。
O’Reilly为软件开发人员带来革命性的“动物书”;创建第一个商业网站(GNN);组织了影响深远的开放源代码峰会,以至于开源软件运动以此命名;创立了Make杂志,从而成为DIY革命的主要先锋;公司一如既往地通过多种形式缔结人与信息之间的纽带。O’Reilly的会议和论坛集聚了众多超级极客和高瞻远瞩的商业领袖,共同描绘出开创新产业的革命性思想。作为技术人士获取信息的选择,O’Reilly现在还将先锋专家的知识传递给普通的计算机用户。无论是通过书籍出版、在线服务或者面授课程,每一项O’Reilly的产品都反映了公司不可动摇的理念——信息是激发创新的力量。
业界评论
“O’Reilly Radar博客有口皆碑。”
——Wired
“O’Reilly凭借一系列(真希望当初我也想到了)非凡想法建立了数百万美元的业务。”
——Business 2.0
“O’Reilly Conference是聚集关键思想领袖的绝对典范。”
——CRN
“一本O’Reilly的书就代表一个有用、有前途、需要学习的主题。”
——Irish Times
“Tim是位特立独行的商人,他不光放眼于最长远、最广阔的视野而且切实地按照Yogi Berra的建议去做了:‘如果你在路上遇到岔路口,走小路(岔路)。’回顾过去,Tim似乎每一次都选择了小路,而且有几次都是一闪即逝的机会,尽管大路也不错。”
——Linux Journal
2011年4月,正值我在剑桥大学MBA课程结束,我满心期待着能和我的妻子利兹共度一段美好时光。老笑话说,MBA代表结婚但是缺席(Married But Absent),不过两年的聚少离多后,充斥我们心中的就是赶快开始一段新生活。
但是接下来的一个月里,传来了树莓派教育计算机项目意外发布的消息(请参阅花絮“有趣的故事”),我们别无选择,只能让步并尽量促成。利兹是一个自由撰稿人,她放弃了一切来运行我们的新兴社区www.raspberrypi.org。而我和我在Broadcom的同事们以及我在树莓派基金的信托人伙伴皮特·洛马斯,开始研究如何实现25美元的ARM/Linux盒子(一个我们如此轻率承诺要实现的东西)。
有趣的故事
我们去拜访BBC的Rory Cellan-Jones,希望可以使用闲置的“BBC Micro”商标。他把我们的产品原型视频放在了博客上,并在两天之内就收到了600 000多个YouTube评论。向超过50万的人承诺将为他们制作价值25美元的计算机,没有什么意外比这更能让人精神集中的了。
9个月后,我们推出了B型树莓派,并在首日就获得了100 000个订单,我们的两个分销商网站在几个小时内完全瘫痪。之后的18个月里,我们在80多个国家中销售了近200万台树莓派。
这台小小的教育计算机本来只是为剑桥大学计算机科学荣誉学位的几百申请人设计用的,那么,是什么使得它如此受欢迎呢?毫无疑问,Pi社区的爆炸性增长应归功于爱好者的创造力和热情,他们将Pi视为一种简单的连接传感器、驱动器、显示器以及网络的方式,并可以用它来做一些很酷的新东西。在项目开展的第一年,利兹的博客中全是我们的工作内容:我们首先努力设计出Pi,然后不停地增加东西以使之跟上需求,而今天她的绝大多数帖子都是关于你用Pi干了什么之类的内容了。
我很难从曾经看到过或在网站中精心挑选的众多项目中选出最喜欢的,但作为一个尚未悔改的太空幻想家,从我脑海中脱颖而出的是Dave Akerman的高空气球和Cristos Vasilas的天文摄影实验。Dave的工作特别承诺把一个预算内的太空计划送达发达世界的每一所小学,并且作为使用Pi教育年轻人的更广泛趋势的一部分,这个教育项目不仅是关于计算机编程的,而且涵盖了科学、技术、工程和数学(Science、Technology、Engineering、Mathematics,STEM)整个范围的科目。此领域的另一大发展是Mojang公司在2012年年底决定将Minecraft[1]移植到Pi上,创建了可编写脚本的Minecraft的Pi版,并孵化出数量众多的教育软件项目。
当我们进入2014年,并正在走向树莓派推出两周年之际,我们非常期待看到你使用Pi都做到了什么?不过有一点是肯定的:我今天的想象一定描绘不出它的未来。
——埃本·厄普顿
树莓派基金会之创办人暨信托人
[1] Minecraft是Mojang公司开发的一个几乎无所不能的沙盒游戏,中文非官方译名为《我的世界》、《当个创世神》、《麦块》等。这个游戏让每一个玩家在三维空间中自由地创造和破坏不同种类的方块,当然它也可以干别的,比如Mojang和联合国人居署合作的“Block by Block”计划,利用Minecraft玩家的设计帮助肯尼亚内罗毕地区的村庄发展建设。
树莓派的灵感诞生于埃本·厄普顿在剑桥大学负责计算机科学专业学生工作期间(参见前言中的描述),他发现准大学生需要有更多的机会获得编程经验才可以达到大学水平。如我们现在所知的,关于什么将会成为Pi的第一个概念设计诞生于2006年,阿尔法版在2011年年底通过验证,最初的10块板在2012年年初被拍卖,价格高达16 000英镑。
首批10 000台树莓派于开始销售,截至2011年年底,它的SD卡映像文件已经被下载超过了50000次,暗示其普及时代即将来临。当时两家英国的销售商Premier Farnell和RS Components的产品在几分钟内就销售一空,事后统计当天共收到100000多个订单。厄普顿因为教育(尤其是Python语言)的目的而设计了树莓派,因此他使用了“Pi”这个词作为其名称的一部分,不过这块小小的主板吸引的却是有经验的程序员以及电子黑客的注意。当本书撰写之时,在首日销售之后又过去了一年半,树莓派的销量已超过了200万台。
然后它们中大概有195万个被扔在办公室的抽屉里,而它们的主人在和他们黑客空间的朋友聚会时会一边举着啤酒一边彼此叹息:“是啊,我买了Pi,不过我还没有想好怎么处理它。我想我可能会用它来做一台时间机器,并尝试研究一下K-Pg[1]事件中的人类,或者我可能只是把XBMC装上就完事了。”
本书是为这些读者准备的:他们还在为Pi苦思冥想,无法决定到底用它做什么。当然,如果你只是准备安装XBMC,那么你可以参考技巧54,参考完之后再阅读本书的其他部分以领略错过的乐趣。可惜的是,我们还没有完善时间机器的黑客技巧,不过你可以在推特上关注@suehle[2]和@sporth[3],这样我们在发现关于flux capacitors[4]的好消息时可以及时让你知道。
你们中的那些已经沉醉在DIY文化中的人,会来到每一次创客汇[5]的开幕式上并加入到当地的黑客空间中去,他们可能会坚持说,我们仍然正处在我们所希望的回归DIY文化的早期阶段。然而,我们是因为到了中期才会说回归,不过走的还不算太远。除了少数的创客/黑客/制造商/实干家,在世界范围内DIY的商机仍只是一次性商品、电子消费品以及储藏室里的堆放物。我们的设备越来越多的被设计师用来实现他们的想法,但还不能灵活的按照拥有者的所想、所需、所欲去做。此外,产品经常被封在盒子中,当需要升级到新的版本时才不得不用手将它们撬开。
收到封闭、不可破解、无法修复的商品是相对较新的人类文化的进程。在不久之前,也许就在你的童年(如果你超过30岁的话),那时候我们会很开心的用工具包组装我们的计算机,将电视机送去修理厂而不是重新买一台新的。像树莓派这样的设备有助于把我们带回到那个好时光:我们知道(或能查出)我们所拥有的东西的内部正在发生的事情,我们可以改变它们使其变得更好,而当它们受损时我们可以修复它们。
本书的第1章是为所有拥有树莓派的读者准备的,它可以让你在其上构建所有的黑客技巧基础。从这儿出发,我们将前进到更大的项目中,而这些更大的项目需要运用所有这些小的黑客技巧。除了这些技巧,我们希望在Pi的初衷精神方面,你也能学到很多。
尽管章节标题中潜藏着令人生畏的单词“黑客”,但我们并不希望你要成为一个Linux内核开发者或者是电子工程师之后才能使用本书。黑客和黑客行为,这些词的意思并不是你在六点钟新闻中所听到的那个意思,而是我们要亲自动手并尝试新的东西,也许就是在折腾这些电子产品的过程中学得更好。
我们试图写下这些黑客技巧,让即使是新手也可以沿路前行并成长为一个树莓派黑客。当然如果你对如何使用Linux命令行有一个基本理解则会助益很多。最重要的是,我们引领你通过这些步骤,但在我们没有引领的地方,这时候你可以借助于Google的快速查找或者使用手册页的命令来帮助你继续前进。
至于黑客行为中的和电子学相关的那一部分,我们已经试图尽可能多地给出详尽的内容。对于那些已经有了一个工作室的人来说,他们的工作室里总是堆满了跳线和从电子商店清仓大甩卖中弄回的奇怪的元器件(因为它们总有一天能用得着),这种程度的细节也许会令他们抓狂,这时候直接跳过这些内容并前往对你有用的内容即可。你应该要充满感谢,正因为有了本书,你的那些不太专业的朋友才可以从书中直接获得帮助,而不用打电话问你“‘接地’是否真的很重要”这一类问题,尤其是假如你的这些朋友在孩提时代就具备“笨蛋永不(言)败”的精神的时候。[6]
虽然你大可将本书从头看到尾,但每一位黑客都应该具有独立精神,因此你可以随意浏览并跳转到你最感兴趣的章节去看。如果阅读的内容中有你需要了解的前提知识,交叉应用将会引导你前往适当的黑客技巧。
本书的黑客技巧内容如下。
第1章介绍了树莓派用户的共同需求,诸如确定你的项目具有正确的SD卡等。它涉及的各种问题和主题是你在任何树莓派项目中都有可能遇到的,比如电源问题和认识通用输入/输出(General Purpose Input/Output,GPIO)等。你也可以在这里找到一些解决有一定难度的问题的秘诀和技巧。
本章是关于树莓派是一台“小型Linux计算机”方面的最基本的描述,这意味着你想要做的很多事情都需要具备一些Linux方面的知识,如在命令行工作、从命令行进入系统等。即使你是一个Linux新手,我们也可以帮助你走完全程,比如定制一个内核和更新固件等,这些技能听起来对新手颇具挑战性,但实际并非如此。
现在,你已经对硬件和操作系统控制自如,可以开始寻求更大型的项目了。在本章中,你会找到一些在室内使用树莓派的方法,其中包括了一些真正有用的项目,可以让你的家居运转得更流畅。
为什么树莓派只能在室内使用?你可以在花园里使用它们,可以用它们进行地理寻宝,或者用它们运行一个假日灯光动画显示。这仅仅是个开始,你可以让它们防水吗?
本章绝大多数内容从另一个角度给你介绍了可以将Pi用于娱乐方面的多种途径。你可以用几种方式播放音乐,包括将Pi变成一台FM收音机或者用它打造一个家庭影院,你也可以给Pi集成一个触摸屏,并将它带在路上,让孩子们可以从车后座上观看电影等。
本书在最后一章中提出了一些比较大型的项目(不要以为前述的升空一个航空摄影台不够大!)。使用本章的黑客技巧可以让你的Pi添加更多的功能,可以对GPIO进行更多的控制,甚至可以打造一台你自己的多达64个节点的树莓派超级计算机。
本书中的大多数黑客教程使用的是第二版的B型树莓派。这里有一些小小的知识点,可以帮助你在决定你的板子是否可以满足目的之前,参考和比较你的预期项目的需求。
为什么有“A型”和“B型”
这些命名是出于对树莓派灵感来源的肯定。在1981年,BBC微型计算机出于同样的教育目的发布了采用同样型号名的产品。
在这两块板上都采用了Broadcom的BCM2835芯片,具有700MHz的CPU以及相同的GPU,它们都可以提供HDMI、复合RAC(支持PAL和NTSC制式)以及3.5mm的音频接口,它们也拥有相同的SD卡插槽。A型售价25美元,B型售价35美元。表P-1给出了两种型号之间的显著差别。
表P-1 A型与B型的区别
特征 |
A型 |
B型 |
---|---|---|
内存 |
256 MB SDRAM |
512MB SDRAM |
USB端口 |
1 |
2 |
以太网 |
无 |
10/100以太网 RJ45接口 |
B型主板也分两个版本,如图P-1所示。
图P-1 版本1和版本2在外观上的比较
版本2所做的改动包括:
GPIO管脚变动如下:
第一和第二I2C通道切换(参见表P-2)。
图P-2 P5引脚顺序(注意:“P5”丝印在电路板的背面)
表P-2 版本1和版本2的I2C通道
版本1 |
版本2 |
|
---|---|---|
SCL0(GPIO 1) |
连接到P1的5脚 |
连接到S5的13脚 |
SDA0(GPIO O) |
连接到P1的3脚 |
连接到S5的14脚 |
SCL1(GPIO 3) |
连接到S5的13脚 |
连接到P1的5脚 |
这些信息对于本书中的大部分黑客技巧都是适用的,当然这仅仅是因为这些技巧都在B型树莓派上测试过(有很大可能是专为B型设计的),但这并不意味着它们不能在其他型号或版本上的树莓派上工作(除非另有说明)。请随意使用你手中的板子,但你要清楚你也许要为老的型号从网上获取一些额外的信息来做参考。
本书使用以下排版约定:
斜体
表示新的术语、URL以及电子邮件地址。
等宽字体
用于程序列表,以及段落中应用的程序元素,如变量或函数名、数据库、数据类型、环境变量、声明、文件名、文件扩展名和关键字等。
表示用户输入的命令或其他文字。
等宽斜体
表示应该由用户提供的值来替换或由上下文决定其值的文字。
这样的内容表示一个提示、建议、警告、警示或一般的注意点。
书中所列出的所有代码都可以在本书的GitHub仓库[7]中找到。
本书旨在帮助你完成工作。一般来说,如果是由本书所提供的示例代码,除非你直接复制了代码的重要部分,你都可以将之用在你的程序和文档中,而无需和我们联系获得许可。比如,使用本书中的几段代码编写程序不需要获得许可,而销售或分发O’Reilly书中示例的CD光盘则必须要得到许可;引用本书和应用示例代码来回答问题不需要得到许可,而在你的产品文档中包含数量众多的本书中的示例代码则必须要得到许可。
我们欣赏署名这一行为,但并不强制要求。署名通常包括标题、作者、出版商以及ISBN号。例如:“Raspberry Pi Hacks,Ruth Suehle和Tom Callaway合著(O’Reilly出版),版权所有 2014 Ruth Suehle和Tom Callaway 978-1-449-36234-8”。
如果你觉得你使用的示例代码超出合理使用或不在上述许可范围内,请随时和我们联系:permissions@oreilly.com。
Safari联机丛书[8]是一个按需点播式数字图书馆,以书籍和视频的方式提供来自世界领先作者的技术和商务方面的专业内容[9]。
专业技术人员、软件开发者、网页设计师以及商业和创意专业人士等都使用Safari联机丛书作为其研究问题、解决问题、学习以及认证培训的主要资源。
Safari联机丛书提供了一系列的产品组合[10]以及专为组织[11]、政府机构[12]和个人[13]的定价方案。用户有机会在一个全面的、可检索的数据库中获取成千上万的书籍、培训视频以及正式出版前的手稿,数据库的内容来自于这些出版商:O’Reilly Media、Prentice Hall Professional、Addison-Wesley Professional、Microsoft Press、Sams、Que、Peachpit Press、Focal Press、Cisco Press、John Wiley & Sons、Syngress、Morgan Kaufmann、IBM Redbooks、Packt、Adobe Press、FT Press、Apress、Manning、New Riders、McGraw-Hill、Jones & Bartlett、Course Technology以及更多的[14]出版商。敬请访问我们的网站[15]来获取更多有关Safari联机丛书的信息。
请将您关于本书的意见和问题发送给出版商:
O’Reilly Media, Inc.
1005 Gravenstein Highway North
Sebastopol, CA 95472
800-998-9938 (in the United States or Canada)
707-829-0515 (international or local)
707-829-0104 (fax)
关于本书我们建立了一个网页,上面列出了勘误表、示例以及其他信息。你可以在这个地址访问此页面:http://oreil.ly/Raspberry-Pi-Hacks。
发表评论或询问有关本书的技术问题,请发送电子邮件至:bookquestions@ oreilly.com。
关于我们的书籍、课程、会议和新闻的更多信息,请访问我们的网站:http://www.oreilly.com。
在Facebook上找到我们:http://facebook.com/oreilly。
在Twitter关注我们:http://twitter.com/oreillymedia。
在YouTube上观看我们的视频:http://www.youtube.com/oreillymedia。
Ruth和Tom在此感谢以下人员,感谢他们提供的灵感、主意、帮助和支持。
Ruth要感谢Scott,他是这种类型的先生,当她因为某些如绰号为“世界上最伟大的酒吧”的地方,或者因为某种像创客汇这样的事件而要狂奔而去的时候,他都会给予理解,并呆在家里陪伴两个顽皮的孩子。这些孩子在顽皮的时候,既不会弄出泛银河含漱爆破药,也不会制造大型火灾艺术装置(至少现在还不会),他们实际上会成为下一代的黑客和创客。这尤其要感谢Hannah,她解答了本书中XBMC的教程(证明了这些内容即使对一个7岁的孩子来说也足够简单)。还要感谢Ian,他总是说他在本书写作过程中学会拼写的第一个单词就是一个12字符的登录密码。
Tom要感谢他的妻子Parn对他的宽容。他在周游世界、出席会议、第二个孩子出世以及在美国各地跑来跑去的间隙中写了本书。他要将本书中自己的部分献给自己的儿子,三岁的Jimmy和半岁的Danny,他们终有一天会读到这本书,并想着:“爸爸,这个东西太老啦,它甚至不能响应我大脑的Wi-Fi信号”。
Emmanuel Ackerman是一名退休的计算机程序员,他现在将时间消磨在苏菲冥想及练习、制作陶器、为Powering Potential及其相关组织做志愿者工作。Ackerman是技巧 63的撰稿者。
David Bordonada在Libelium[18]公司工作,该公司运营Cooking Hacks[19]网站,上面到处都是树莓派和其他硬件项目可以使用的教程和器件。Bordonada是技巧 58的撰稿者。
Simon Cox是南安普顿大学[20]工程与环境学院(FEE,Faculty of Engineering and the Environment)计算方法学教授以及院内的计算工程设计研究组(CED,Computational Engineering Design Research Group)的头,他也是工程与环境学院的副院长。Cox是技巧 65的撰稿者。
Lori Easterly目前是一个信息安全工程师,具备Linux和系统管理员背景,当前居住在佛罗里达州中部。她有着众多黑客爱好,尤其在短波和无线电接收方面充满着技术探索、动手改造并去发现的激情。Easterly是技巧 43的撰稿者。
Oliver Mattos白天是谷歌的搜索引擎工程师,晚上则成为一个Pi黑客,他喜欢让某种东西去干设计之外的事情。Mattos和Oskar Weigl一起撰写了技巧 49。
Joe Ottinger在Red Hat担任开源和标准化团队的首席工程师。Ottinger是技巧 64的撰稿者。
Rodney Radford是一个嵌入式软件开发者及收藏爱好者,只要时间(以及时间旅行技术)允许,就会一直精力充沛的干着硬件修理、近空间遥测、高空火箭、地理寻宝、潜水、木工、时间旅行以及机器人学等诸如此类的事情。Radford是技巧 44和技巧 45的撰稿者。
Jared Smith是一个开源爱好者。他喜欢编程、系统管理、文档化工作、VoIP以及教别人如何使用开源软件。Smith是技巧 32的撰稿者。
Wouter van Wijk(www.woutervanwijk.nl)是Pi MusicBox的创造者。他既是荷兰第二大报纸的一名记者,同时也是一个沉迷于人与计算机之间互动的技术人员。他享受设计用户界面和实验的过程,喜欢让计算机和服务更易被人所用。van Wijk是技巧 48的撰稿者。
Oskar Weigl是皇家学院的一名硕士生,同时也是一位ARM工程师,他最大的激情在于玩转硬件和软件(以及构建机器人)—— 一个真正的正向和逆向工程。Weigl和Oliver Mttos一起撰写了技巧 49。
[1] K-Pg界线,是指白垩纪与第三系(古近系)地层之间的界线。在该界线附近,世界部分地区常发现富含铱(Ir)的黏土层,大约出现在6550万年前。这一时期,地球上曾发生了以恐龙为代表的生物大规模灭绝事件,因此K-Pg事件是指生物大规模灭绝事件。
[2] https://twitter.com/suehle。
[3] https://twitter.com/spotrh。
[4] flux capaitor是时间机器的核心成分(不过这些当然都是假想的),出现在电影《回到未来》里。Emmett Brown博士说flux capacitor是“what makes time travel possible”(让时间旅行成为可能的东西)。
[5] Maker Faire,创客汇是美国Make 杂志社举办的全世界最大的DIY聚会。它是一个展示创意、创新与创造的舞台,一个宣扬创客(Maker)文化的庆典,也是一个适合一家人同时参加的周末嘉年华。2014年4月,深圳举办了第7届Maker Faire。
[6] 有了这些详细的内容,他们就不用“反复”和你讨论“为什么”“接地”“真的”“很重要”了。
[7] https://github.com/spotrh/rpihacks。
[8] https://ssl.safaribooksonline.com/trial。
[9] http://www.safaribooksonline.com/。
[10] http://www.safaribooksonline.com/subscriptions。
[11] http://www.safaribooksonline.com/organizations-teams。
[12] http://www.safaribooksonline.com/government。
[13] http://www.safaribooksonline.com/individuals。
[14] http://www.safaribooksonline.com/publishers。
[15] http://www.safaribooksonline.com/。
[16] 在道格拉斯•亚当斯里程碑式的科幻小说《银河系漫游指南》中,泛银河系含漱爆破药是银河系最好的饮料,据说喝下一杯后的感觉就像是被一大块包裹着柠檬的金砖拍碎了头。
[17] http://fedoraproject.org/wiki/Foundations。
[18] http://www.libelium.com/。
[19] http://www.cooking-hacks.com/。
[20] http://www.southampton.ac.uk/。
人们会说起点通常就是开始的好地方什么的,但是这是一本黑客的书,你很可能会跳过无关内容而直奔感兴趣的话题。要不就是这本书前面一定是用古代英语写的,因为你在不停的翻页,看上去就像书中有一些可怕的印刷错误。
这就是说,有些事情最好在开始干之前先把它们置之脑后,树莓派有一些意想不到的奇怪特性,你最好做到事先心中有数。如果你在Linux或电子黑客方面是新手,或者两方面都不了解,那么一个很好的做法是在做任何其他黑客行为之前先将本章通读一遍。你也许可以学会一些知识,而且还可以拯救你的Pi(不用被迫再花35美元买个新的替换)。
树莓派没有任何内置闪存存储器,它需要一个SD卡才可以真正工作。挑选合适的卡看上去很简单,但我们仍然要在这里帮助你做出正确的选择。
SD卡的选择是一项重要的工作。毕竟,当它插入到树莓派中时,它就发挥着硬盘驱动器的同等作用。而通过插入一张新的SD卡快速地更换整个系统是树莓派最有趣的强力功能之一,尤其是当将它应用于教育的时候,这个特性尤为有用。有几个因素是你应该在选择卡的时候权衡的。不过,即使你认为已经选择好了,仍然会有一些小问题需要你去解决。
SD卡出售时都有一个Class(类别)号(例如,4、6、10等),Class的号数越高表示卡的速度越快。大多数优质的、Class 4或更高的SDHC卡(即口碑好的有品牌的SD卡)应该可以满足大多数用途。售卖带有树莓派这样的Linux发行版的卡商大量使用SanDisk或Kingston品牌的SDHC Class 4的卡,你可以在http://elinux.org/RPi_ VerifiedPeripherals上找到已知的、经过测试的(以及那些不能工作的)卡的完整列表。这就是说,一张速度更快的卡可以将你的传输速率提高到2倍(以MB/秒计)左右,所以如果速度是使用的关键因素,你就应该去配一个更高Class的卡。
Class 10太高级?
早期树莓派的固件和bootloader并不兼容Class 10的卡,这个问题应该早已修复,但你还是会看到人们偶尔会碰到和Class 10相关的问题,因此只要知道这可能会有潜在问题就可以了。如果你想要设置Class 10的卡,当第一张卡不能工作的时候,可以试着换一个品牌看看。除此之外,各种品牌和存储尺寸的Class 6和Class 10的SD卡均被发现在超频时会有问题,而错误可能会在几天或几周后才出现。因此如果你打算超频的话,请记住这一点。
如果决策不是你的强项,你也可以在只使用一个树莓派的情况下,在身边多准备几张卡,每张卡用于不同的用途。如果你不想这么麻烦,那么还有几个供应商可以出售预装树莓派的Linux发行版的SD卡。其中就有包含NOOBS(新自带软件,New Out-Of-Box Software)的卡,NOOBS上有几个发行版的选项可以供你选择。RS Components和element14公司在客户购买树莓派时会附送一张预装NOOBS的卡。
NOOBS
设计NOOBS是为了让设置树莓派变得超级容易。它支持多操作系统的安装和再安装,以及在预引导环境中编辑配置文件和进行网页浏览(以便在遇到启动问题上查找答案)。总之,NOOBS是专为教育设计的,如果你甚至连它都不能上手,那么你也很难学会其他更多的东西。NOOBS适用于4GB的卡并给了你多重选择,你可以选择希望设置的是哪个发行版,选择之后也随时可以通过在启动时按住Shift键来返回菜单并做出其他选择,以尝试新的发行版或者重新修复已经损坏的卡。如果你没有购买已经预装系统的卡,你可以从http://www.raspberrypi.org/down下载映像文件。
如果你使用的是大家所熟知的卡来安装系统,但仍然发生了问题,那么你应该检查一下其他方面:请确保你已经更新了Pi的固件(参见技巧04),如果你使用的不是一张新SD卡,请务必要首先执行完全格式化,并确保是对整张卡进行格式化,而不是只格式化了某个分区。
首先,找到卡的设备名称:
或者:
你要找的是类似于/dev/sdd或/dev/mmcblk0这样的内容,并带有SD卡尺寸大小的信息。运行mkdosfs命令执行格式化,需要将下面命令中的/dev/mmcblk0字段用卡的实际位置替换:
上述命令会在SD卡上创建单一FAT格式的分区。说实话,在大多数情况下,你真的不必太过在意如何对SD卡格式化或分区。因为在安装任何包括分区的树莓派操作系统发行版的系统映像(如Pidora或Raspbian)时,SD卡上的分区表都会被安装的操作系统映像完全覆盖。唯一的例外是NOOBS,它是通过将磁盘分成唯一的FAT分区,然后简单的把NOOBS文件直接复制到SD卡上的方法来安装NOOBS到SD卡上的。
如果你发现你拥有,比如说,一张8GB的卡,而你的计算机认为它仅仅只有2GB,这时你就需要“扩展”它的实际大小。或者你可能已经发现,你的卡的设备名是以p1结尾(接下来的分区会以p2结尾,以此类推):
这说明你的卡已经分区,在格式化之前你应将它们合并成一个分区。调整分区及其大小最简单的方法是使用Gparted[1]图形用户界面(GUI)工具,它是命令行工具parted的图形化版本。
你当然可以直接从正在运行的树莓派上访问其文件,但使用SD卡读卡器将SD卡挂载到一台独立的计算机上,将会使很多任务(如添加或编辑文件)变得更容易。
虽然树莓派就是一台独立的Linux计算机,不过如果你手头有另外一台计算机的话确实可以为你提供帮助,在有的情况下,它甚至可能是不可或缺的。幸运的是,现在许多计算机都带有内置的SD卡读卡器,即使你的计算机没有内置,它们的价格也不贵并且很容易买到。所以,即使你买的是预装系统的SD卡,你也应该拥有一个SD卡读卡器以及另外一台计算机来与你的树莓派互动。
大多数树莓派的Linux发行版会在SD卡上创建至少两个分区,第一个分区总是/boot,因为树莓派的GPU要从SD卡的开始处读取其固件。第二个分区通常是/(也称为root分区)。
Pidora标注SD卡上的两个分区为boot和root,而Raspbian没有使用磁盘标签,因此使用Raspbian时要特别注意设备名称,这一点非常重要。
现在的Linux发行版(在你另一台计算机上的),比如Fedora或Ubuntu,在SD卡插入时会自动挂载分区并提供相应的事件通知。不过,如果你不是很确定,可以运行mount命令来列出系统上所有已挂载的分区,然后在输出信息中查找类似/dev/mmcblk0p1这样的设备,意思是在MMC块(mmcblk)设备上的第一个分区(p1)。
上面输出的最后两行指出了MMC块设备分区分别挂载到了/run/media/spot/boot和/run/media/spot/rootfs两个目录下。
Linux使用MMC一词描述的含义中包含了多媒体卡(MultiMediaCard)和安全数字(SD,Secure Digital)这两种格式的驱动器。
如果SD卡没有被自动挂载,请确保其已经被插入并查看dmesg命令的输出。不需要给dmesg指定任何参数(虽然使用管道减少输出消息一直都是个好主意)。当运行此命令时,dmesg会打印出很多东西,但输出顺序是按照你最后一次启动Linux系统来排列的。
你需要查看输出消息的末尾,具体的说,你应该将目光投向输出的最后几行并找出含有MMC块设备名称的地方。图1-1显示了你正在查找的消息的一个例子。
在图1-1中,MMC块设备名为mmcblk0,它有两个分区p0和p1。这些信息足够让你确认这些分区的Linux设备名:/dev/mmcblk0p0和/dev/mmcblk0p1。你可以运行命令来确认它们是否是正确的设备:
$ cd /dev && ls –l | grep mmcblk0
[2]
如果这些设备存在的话,它们很可能就是你想要的(除非你因为某种原因插了多个SD卡到系统上)。
图1-1 Fedora 19的dmesg输出,MMC块设备消息已经高亮
SD卡读卡器通过SPI接口与系统连接,通常设备名被指定为/dev/mmc*。但是当SD卡读卡器是通过USB连接时,该设备会被系统指定为/dev/sd*(而且有些笔记本的内部SD卡读卡器就是通过USB连接的)。当访问一个/dev/sd*设备时需要小心,因为很容易就误访问到硬盘驱动器上去了。
当你识别出系统中MMC块设备分区的Linux设备名之后,你就可以通过创建两个挂载点目录来手动挂载它们(以root用户):
这些目录将作为从MMC块设备上挂载设备的定位点。
然后,使用mount命令挂载boot和root分区:
如果上述mount命令正确返回,则说明两个分区已经成功挂载。你可以再次执行mount命令并使用grep命令搜索MMC块设备名(mmcblk0),然后通过管道发送到输出:
你现在应该可以在/mnt/raspi-boot和/mnt/raspi-root目录下看见挂载的文件了。
也可以将/boot分区挂载到/分区下面,但我们建议将二者分离。这样做的话,如果你忘记挂载boot分区,则会显得一目了然,而你也会避免将root分区的文件复制到/boot分区目录下这样的错误。请记住,Linux挂载boot分区到/boot目录的最上层,当boot分区没有挂载的时候,任何被复制到该目录的文件都将不可见!
挂载SD卡对快速修改树莓派Linux的/boot分区下的config.txt文件来说特别有用。如果你需要为一台新的显示器(或者一台没有出现奇迹的老款HDMI电视)更改输出显示设置,从挂载的SD卡上做这个工作可比从一台headless[3]的树莓派上要轻松多了。
确保boot分区已经被挂载,然后进入到该目录(/mnt/raspi-boot),并直接编辑config.txt文件(以root用户)。保存所做的更改,然后运行sync命令,以确保缓冲区数据被写回到SD卡中。
完成以上步骤后,退出当前目录(如果你不这样做,Linux会不让你干净地卸载分区),然后使用umount命令卸载两个分区(以root用户)。
如果umount命令均未返回任何错误,那么现在就可以安全的移除SD卡了。只要将之插回到你的树莓派中,通上电,然后期盼一切正常吧。
每个树莓派都有一组藏在角落中的LED灯,它们可以告诉你设备正在发生什么或什么也没发生。A型只有两个灯,而B型提供了更多的情报和确定故障所需要的宝贵的信息。
B型树莓派有个状态LED灯(如图1-2所示,并在表1-1中描述),当它无法启动或出现其他问题时,这些灯可以帮助你定位问题。由于Pi没有BIOS,在Pi成功启动之前屏幕上不会显示任何信息,这时就是这些小灯显示身手的时候了。
图1-2 B型树莓派的LED灯
表1-1 B型树莓派的状态指示灯
编号 |
丝印 |
颜色 |
功能 |
---|---|---|---|
D5 |
OK(1.0版本)ACK(2.0版本) |
绿色 |
SD卡访问,连接到GPIO 16脚 |
D6 |
PWR |
红色 |
3.3V电源,连接到3.3V |
D7 |
FDX |
绿色 |
全双工网卡 |
D8 |
LNK |
绿色 |
网络连接/活动状态 |
D9 |
10M(1.0版本)100M(2.0版本) |
黄色 |
10/100Mbit网络 |
当你想确定你的问题是不是很简单的“有没有插好”时,前两个灯(D5和D6)就非常重要了。表1-2对你看到的这些灯最常见的指示做了描述。
表1-2 常见LED错误代码
灯指示状态 |
最可能的问题 |
---|---|
红色PWR灯灭 |
没有电源 |
红色PWR灯亮,绿色OK灯灭 |
Pi不能从卡中读取Image,电压低于5V |
绿色OK灯闪烁3次* |
没有发现Start.elf文件 |
绿色OK灯闪烁4次* |
Start.elf文件未被启动 |
绿色OK灯闪烁7次* |
没有发现kernel.img |
请注意,表1-2中带有星号的闪烁模式识别对于2012年10月20日之后可用的固件是准确的,但早期固件使用了不同的模式,后续固件也可能会改变这些指示方式。
start.elf和kernel.img是启动时要查找的两个文件,必须要将它们放在boot分区。第一个文件start.elf是GPU的二进制固件映像文件。而kernel.img如同其名称所暗示的那样,是Linux内核文件。如果红色PWR灯亮,说明有电源供电,如果接下来PWR灯转绿则说明一切正常。
如果绿灯完全没有闪烁,你首先要做的是在另一台计算机上检查SD卡,确保映像文件已经正确写入。如果所有的文件名看上去乱七八糟不成文法,这说明映像文件写入得不正确!需要格式化SD卡并重新写入映像文件。如果看上去一切正常,那么除了电源和SD卡外不要插入其他任何东西,然后逐次加入一个其他的外设来检查造成这一问题的原因。
如果绿灯已经闪烁,请参考表1-2获取相关出错信息。请注意,一旦start.elf已经载入,你就会看到“彩虹”(4个并在一起的血色大方格)图案,它应该很快就会消失,而你的Linux发行版会继续启动。但如果没有看到这个图案,说明你的问题可能是出在kernel.img文件上。
通过LED灯获取IP地址
Pidora提供了一些专门为在headless模式下运行的功能,包括使用LED灯来获取IP地址。参见技巧11来学习如何去做。
你选择的任何Linux发行版都自带了树莓派所需的固件,但它需要经常从上游得到更新,你的项目可能会受益于(或需要)一个更新的版本。
树莓派和你的笔记本电脑有所不同,甚至和许多传统的嵌入式计算机也不相同。树莓派的心脏是Broadcom的BCM2835片上系统,这是一个将CPU、GPU以及内存组合在一起的单个部件。这个细节很重要,因为树莓派实际是从BCM2835的GPU启动的。当你给树莓派上电时,在BCM2835片上系统中的CPU实际上是处于禁用状态!
树莓派的启动过程如下:
1.第一阶段的bootloader:被编程写入BCM2835片上系统硬件的bootloader程序从SD卡上的Linux发行版中挂载FAT32启动分区。请注意,第一阶段的bootloader是在制造阶段被编程写入的,不能被修改或更换。树莓派GPU上的一个小小的、精心设计的RISC核可启动此进程。
2.第二阶段的bootloader:读出SD卡上的boot分区。此固件(bootcode.bin)访问其他GPU固件文件,并把这些固件文件写入树莓派的GPU,然后启动它。
3.GPU固件:此固件(start.elf)允许GPU启动CPU。在附件文件fixup.dat中配置了GPU和CPU之间的SDRAM分区。此时CPU被释放,执行权从GPU转交过来给它。
4.用户代码:CPU可以启动任何支持的二进制文件,但是Linux内核名称是默认的,它假定文件名是kernel.img,不过你可以在config.txt文件中改变这个缺省设置。
在2012年10月19日之前的树莓派固件版本中包含了一个附加的第三阶段bootloader(loader.bin),但它已经不再需要也不再被使用。以前的构建中也有不同版本的GPU固件,必须通过换入换出的方式来使ARM CPU和GPU之间的不同内存划分生效,不过现在GPU和CPU的内存分配在config.txt文件中配置就可以了。
无论树莓派如何启动,你都必须使用一张SD卡作为启动树莓派的设备,因此你将无法从任何其他设备(如网络或USB存储器)单独启动它。不过这也是一件好事,因为你无法覆盖掉第一阶段的bootloader程序,所以它可以防止你将设备弄得无法使用。如果你遇到了损坏的、破损的或者不完整的固件,你大可以简单地换一张干净的SD卡就能重新开始。
树莓派基金会提供了GPU载入的固件程序,该程序可以让树莓派引导一个特殊格式的Linux内核映像文件,所有的Linux发行版映像文件在拷贝此固件之后都可以在树莓派上使用。但这个固件也在不断更新,如果想启用新的功能(或boot新的Linux内核),你会希望你正在运行的是最新版本的固件。
树莓派固件的上游源地址为https://github.com/raspberrypi/firmware/ 。目前还没有这些固件文件的源代码,所以这个资料库只包含了二进制版本。因为树莓派的速度是如此之慢(尤其是在进行Git操作时),我们强烈建议你将这些文件check out到x86的笔记本电脑上。
首先,你需要在Fedora上运行如下命令,以确保你有一个Git客户端:
或者在Debian/Ubuntu上运行如下命令:
接下来创建一个树莓派相关文件的工作目录,比如~/raspi:
进入raspi目录:
使用Git工具获取固件文件的本地副本:
这一步会创建一个名为firmware的check out目录。默认情况下,check out的是主分支,当本书撰写之时,同步主分支得到的最新固件版本可以支持当前的树莓派Linux内核(3.2版本)。如果你使用的是3.2内核,那这就是你想要使用的固件。另一个分支(名为next)启用了在Linux 3.6内核中更新的驱动程序,如果你想使用这个分支,进入firemware目录,并输入:
要切换回主分支,输入:
如果你希望稍后再更新固件,则不需要重新check out整个文件树。只需要简单地回到checkout出的最上层目录(~/raspi/firmware),然后输入:
请记住,这个命令只pull当前分支的变更部分。如果你想pull其他分支的变更部分,你需要用git checkout命令切换到其他分支并同样在该分支处运行git pull命令。
现在你已经从git仓库选好了分支并check out了版本,下一步是将boot固件复制到安装有树莓派Linux发行版映像文件的SD卡上。要完成这一步,你首先要确保SD卡分区已经被正确挂载(在技巧02中有详细介绍)。
在这里,我们将假定你安装有树莓派Linux发行版映像文件的SD卡的boot分区被挂载在/mnt/raspbi-boot目录下,当前版本的Fedora(包括Pidora)将自动将之挂载到/run/media/$USERNAME/boot目录下面,此处的$USERNAME是你的用户名。因此如果你已经将它挂载到其他地方,则应该在下一组指令中替换该挂载点。
要更新引导分区固件,你所要做的就是从firmware/boot目录拷贝正确的文件到挂载的boot分区下(使用root用户)。
你大概不希望从这个目录中复制所有的文件吧。
在firmware/boot目录下的这些关键固件文件如下:
我们强烈建议你此时将现有(如果有的话)的工作副本备份一份。你可以首先在挂载的boot分区中重新命名这些文件(以root用户)来完成备份工作:
将这些固件文件拷贝到挂载boot分区:
su命令和sudo命令
此处拷贝固件文件的命令例子(以及本书中使用的大多数其他命令例子)中使用的是su命令。su命令将提示你输入你的Linux笔记本电脑的root密码,如果你在你的Linux笔记本电脑中已经配置了sudo命令,你可以使用sudo代替su – c命令,那么拷贝固件文件(以root用户)的命令则相应的应该如下所示:
无论你喜欢使用哪种方法都挺好,因为它们对于需要以root用户进行的Linux操作来说都是有效的方法。我们之所以在本书中绝大多数例子中对所有的root操作都使用了su – c语法,是因为这个命令在所有情况下都可以工作。而sudo只有在为你的用户配置了该命令的Linux发行版上才生效。如果你遇到了在指令前面加上sudo前缀的情况,这时应该知道,如果你没有配置sudo,那么可以使用su命令来代替它。
当将新的树莓派固件复制进boot分区后,运行sync命令,确保所有的数据都已经拷贝进SD卡:
接下来应该安全卸载SD卡分区并弹出SD卡。你可以从Linux笔记本的GUI界面中卸载分区,也可以从终端退出当前挂载分区目录并进入其他目录,然后输入命令手动卸载它们:
此时,SD卡上有了新的固件。如果树莓派照常启动并进入Linux映像文件,这种情况说明更新起作用了。不过最起码固件应该会在配置的输出设备(通常是一个HDMI连接的设备)上画出一个缤纷的“彩虹”盒(参见花絮“关于彩虹……”),因为这是启动过程的第一步(除非你已经在config.txt文件中明确禁止了这个行为)。如果上述情况出现,这说明固件已经被正确安装到SD卡上了。
关于彩虹……
我们希望,如果你的树莓派一切正常的话,你在其启动时看到的“彩虹”屏幕(如图1-3所示)永远都不要超过1秒钟。“彩虹”屏幕由树莓派的固件在初始化BCM2835片上系统的GPU组件时产生。
为了测试该输出工作正常,GPU绘制屏幕上的四个像素,然后扩展这些像素,从而产生彩色的图像。如果树莓派一直都进入不了“彩虹”界面也进入不了接下来的正常的Linux启动,这说明配置的Linux内核映像(默认为kernel.img)无法启动。
图1-3 “彩虹”屏幕(由用户Popcornmix上传到http://elinux.org/File:Debug-screen.jpg,并根据指示共享署名-相同方式共享3.0本地化许可的条款共享)
有些树莓派固件文件存在着一些可选版本,可以将树莓派配置成分配最小数量的内存(16MB)给GPU。当这样做时,树莓派的第二阶段Bootloader不再查找start.elf和fixup.dat文件,而代之以start_cd.elf和fixup_cd.dat文件。技巧24关于GPU/CPU内存分配中提供了一个更详细的讨论。
你是否担心你不在家时你的Pi投身疯狂派对?这个技巧是关于如何弄个摄像头对准它并将视频传输到Internet上的。开个玩笑!这个技巧中的工具只能监测你的这个小巧硬件的物理状态。
一个“正常的”Linux计算机可能会包括板载健康监测传感器,有相当多的监控芯片和元器件被用在各种系统上,但是对于树莓派来说,所有的硬件完全隐藏在Broadcom片上系统里面,因此你无法使用通常的方式访问它。
为了能够使用这些元器件监视你的Pi的健康,需要使用vcgencmd实用工具。任何可用的通用树莓派Linux发行版应该已经预安装了这个工具,如果没有的话,你可以从地址为https://github.com/raspberrypi 的固件树上得到一份复制。如果你的发行版编译为支持ARM硬浮点,你可以在hardfp/子目录下查找,否则,可以在opt/子目录下查找。
检查硬浮点
在写这篇文章的时候,大多数Linux发行版(包括Pidora、Raspbian、Occidentalis、OpenELEC以及RaspBMC等)被构建为支持ARMv6硬浮点架构,因为这样可以提供树莓派的最佳性能。然而这些目标平台的一些老版本(以及其他操作系统平台)被构建为优化的ARMv6的软浮点。这两种优化级别彼此互不兼容。在Linux上,有一种很好的方法来检查是否支持ARMv6硬浮点,即使用readelf命令:
你可以在树莓派的Linux发行版上直接运行此命令(可能需要先安装elfutils软件包),或者你也可以很方便地从已经装有readelf工具的树莓派Linux发行版并通过其他系统复制一份二进制文件或库文件。
如果二进制文件支持ARMv6硬浮点优化,你会得到类似下面的输出:
最后一行很重要:Tag_ABI_VFP_args: VFP registers。只有二进制文件被检查为构建时采用了ARMv6硬浮点优化时才会显示这些信息。
安装好vcgencmd工具后(如果需要),查看vcgencmd提供的选项:
这将输出一个包含所有可以传递给vcgencmd工具的命令列表:
不幸的是,关于这些命令以及它们是干什么的,上面的输出实际上并没有给出什么有用的信息。命令中有些看上去似乎是显而易见的,但是当你运行它们的时候,它们会这样返回:
这个工具的文档极其匮乏,不过树莓派社区已经汇集并找到了一些命令的用法。
vcgencmd measure_volts命令显示了一些树莓派关键元器件的电压,特别是:
GPU处理器内核
SDRAM控制器
SDRAM输入/输出(I/O)
SDRAM物理内存
上述每一个元器件都可以作为选项传递给vcgencmd measure_volts命令(如果你没有指定参数,将返回core的值)。你也许会觉得奇怪为什么要关心并测量这些电压,而且在大多数情况下,你也许确实不需要关心它们。它们的值一般如表1-3所示:
表1-3 元器件电压
元器件 |
电压 |
---|---|
core |
1.20 |
sdram_c |
1.20 |
sdram_i |
1.20 |
sdram_p |
1.23 |
你可能会关心这些元器件电压的唯一情况是:如果你决定将你的树莓派超频,在这种情况下这些电压均是可配置的(在技巧06中会有详细介绍)。
你也许希望这个命令返回系统主板电压(这个电压正常条件下在4.75V和5.25V之间变化),但它并不能。参见技巧09获取如何手工获取系统主板电压的相关内容。
vcgencmd measure_temp命令会报告树莓派的BCM2835片上系统的core温度(摄氏):
或者,你也可以直接读取/sys/class/thermal/thermal_zone0/temp文件获得同样的温度读数:
趣味数学和科学
要将该值转换为摄氏温度,只需除以1000即可。要得到华氏温度,需要将摄氏温度乘以1.8再加上32。而要得到开尔文温度,则应将摄氏温度加上273.15。如此计算的温度值越来越高,是不是正如我们对树莓派的热情?
从监测树莓派硬件的角度来看,这种读数可能已经足够了。由于实际上CPU/GPU并没有分离(至少从物理和发热的角度来说没有分离),所以它只是给了你一个主板运行有多热的大致概念。也就是说,如果你想获得更详细的(或只是另一个)温度读数,你可以接入一个额外的温度传感器,如技巧37中所述。
无论是强制分配还是动态分配,vcgencmd get_mem命令都可以返回ARM CPU和显卡GPU的内存值。
要查看当前分配给ARM CPU的内存大小,运行:
要查看当前分配给显卡GPU的内存大小,运行:
你已经忘记了你对你的树莓派所做的配置更改?具体来说,那些在固件中更改的设置?你可以在/boot/config.txt中查看,这里的vcgencmd get_config命令也可以帮助到你。
要查看所有使用数字(整型)数据类型的配置,运行:
要查看所有使用文本(字符串型)数据类型的配置,运行:
只有非常少的配置项是存储为字符串值而不是整型,因此如果vcgencmd get_config str命令没有返回任何值的时候,你不必过于惊讶。
如果你只是想检查某一个指定配置项的值,则用配置名称代替选项传递:
vcgencmd实用工具并不是对用户最友好的工具,但是它确实很深的介入到了树莓派的内部运作。由于这是一个开源工具(源代码可以从前述的树莓派GitHub固件库中checkout),如果你想深入了解树莓派硬件的内部工作原理的话,查看vcgencmd的源码将会是一个很好的起点。
树莓派不是一个特别快速的计算机,对于大多数项目,它可以提供足够的性能来完成工作。但是对于有的项目,你可能打算对硬件进行超频以获取更高一点的性能。
树莓派的硬件被设计成制造商所认为的可靠性和性能的最佳平衡。现在根据文档我们已经可以指出,它还自带了许多微调按钮。如果你觉得自己足够勇敢,你可以向上调节这些按钮来获得超出硬件之外的附加性能。
这就是那些很酷的家伙们口中所说的超频。自从PC时代来临,人们一直在超频自己的计算机。计算机的拥有者认识到,同一款Intel CPU的高端和低端型号之间的唯一区别就是其能否通过速度测试,通过的产品将贴上更高时钟速度的标签,而剩下的则被标识为较低的时钟速度。只有到了这时,超频才真正变成了常规行为。如果你足够幸运的话,你可以调整设置来获得更高的时钟速度。
如今,超频是指为了获取性能提升并超出默认硬件配置而做出的任何形式的设置更改。举一个例子,有些人使出浑身解数来提升性能,包括将整个系统浸在液氨冷却的Flourinert[4]中,这些人都是些疯子。
现在是个很好的时机提醒你:试图对你的树莓派进行的超频几乎可以肯定会造成硬件更快的损坏,也许是马上损坏。而它也不可能双倍提升你的性能,即使因为某种奇迹做到了,你可能也无法在超频后的树莓派上可靠运行任何东西。
还是那句话,这是一台35美元的计算机,而生命只有一次(当你决定真正听取这一忠告时,可以试试技巧40)。
请记住,树莓派的心脏是一个Broadcom的片上系统,采用了ARM CPU、Videocore IV GPU以及512MB RAM。上述的每一部分都有自己的时钟频率,而GPU还有几个用于其子组件的可调时钟频率。具体来说,GPU拥有一个核心频率、一个H264频率(H264硬件视频解码器块)、一个3D处理器频率以及一个图像传感器处理器频率。
你可以通过更改/boot/config.txt文件中的选项来调整所有的设置。此文件也许存在也许不存在,如果不存在的话,只要创建一个新的空文件就可以了。
让我们先从效果最显著的超频开始:ARM CPU。ARM CPU的频率(arm_freq)默认是700MHz,将之加速到900MHz,在/boot/config.txt文件中添加这一行:
然后重新启动,硬件将竭尽所能来满足你的要求。但请记住,这不是变魔术,无论你多么希望能把30000000这个值作为频率,都是行不通的。具有丰富超频经验的人断定如果树莓派超频到900MHz以上,通常就不能成功了,除非你使用了过压(参见技巧07)。
另一种简单的超频方式是提高SDRAM存储器的频率。SDRAM存储器的频率(sdram_freq)默认是400MHz,你可以通过在/boot/config.txt文件中增加这一行来将之提高到500MHz,没有任何问题:
像arm_freq一样,你需要重启树莓派来使改动生效。
你的最后一个主要的超频选项是GPU组件,它的频率全部都由gpu_freq定义,默认都是250MHz。
gpu_freq是某种上级设置,设置它之后将给core_freq(GPU处理器核频率)、h264_freq(硬件视频块频率)、isp_freq(图像传感器管道块频率),以及v3d_freq(3D块频率)赋同样的值。如果你有图形处理器密集型任务,你可以通过提高gpu_freq到325来获得额外的性能。通过在/boot/config.txt文件中添加如下行做到这点:
尽管如此,我们不建议改变gpu_freq值,因为这将导致CPU性能下降。取而代之的是,你可以尝试只改变core_freq的值。如果你这样做,很重要的一点是保持所有的GPU频率(如前面列出)要么都相同要么都相差一个整数乘数因子。如果你不这么做的话,GPU组件接收到的是互不相容的脉冲和干扰与噪音的混合物,将会很快停止工作。
无论如何,因为core_freq的值也包括了L2高速缓存和一些SDRAM内存时钟周期,仅仅增加这个值就可以给ARM CPU带来性能提升。乘数的默认值是2(可以真正工作的最大整数),你可以在/boot/config.txt文件中像这样设置该值:
请注意,这可能无法工作。有些人报告成功,而一些人报告失败。如果你在尝试更改core_freq的时候,同时尝试了其他超频功能,则只有在它们被设置为低(或保留为默认值)时才可能会成功。
我们无论怎么强调都还不够:有时当超频失败时,它的性能会显著下降,可靠的程序变得很古怪,硬件随时会停止工作,而系统也可能会无故重启。
超频之后,你会希望能有一个量化的测试案例,让你可以一遍一遍地运行,看看超频给你关心的树莓派带来了多大工作负载的性能提升。不要简单的下载一个多用途的benchmark并相信它的测试结果,为显示GPU性能而设计的benchmark并不能帮助你优化超频树莓派系统执行CPU密集型任务。
较新版本的树莓派固件包含5个超频(turbo模式)预置选项供用户进行选择,通过监控芯片的核心温度和CPU负载并动态调整时钟速度及核心电压,这些模式可以实现在不损害Pi的寿命的情况下获得片上系统的最大性能。
因此,当CPU需求不高,或者CPU过热时,性能就会降下来。但是如果CPU工作繁忙,且CPU的温度允许时,它的性能可以暂时提升。根据具体电路板状况以及使用了哪种turbo设置,时钟速度最高可达1GHz。表1-4详细介绍了当前5种超频预置的设置参数。
表1-4 超频预置模式
预置模式 |
ARM |
CORE |
SDRAM |
过压 |
---|---|---|---|---|
None |
700 |
250 |
400 |
0 |
Modest |
800 |
250 |
400 |
0 |
Medium |
900 |
250 |
450 |
2 |
High |
950 |
250 |
450 |
6 |
Turbo |
1000 |
500 |
600 |
6 |
如果你正在使用的是当前的Raspbian版本,你会发现raspi-config工具已经支持将你的Pi配置成以上五种预置模式中的任何一种。对于其他发行版,你需要通过单独在/boot/config.txt文件中为每个选项进行设置的方式来定义你所希望使用的预置模式。例如,要设置Medium预置模式,可以在/boot/config.txt文件中加入这些行:
此外,仅仅因为知道Turbo设置在某些树莓派板子上工作正常,是不能认为它就会在你的板子上也是可以工作的,已经有不少用户反映当他们试图在他们的树莓派上运行超频预置模式时导致了SD卡损坏。
过压,也被称为“动态电压缩放来增加电压“,是一个从电子元器件中获取更多性能的小窍门。
树莓派的电路是由充当逻辑门和开关的晶体管组成的,在正常操作元器件时这些节点的电压会在高电压和低电压之间切换。当切换发生时,晶体管的电容和所施加的电压影响了切换输出变换的速度。使用更高的电压(“过压”)配置电路会让电路的反应速度更快,你可以获得比正常方法下对硬件超频的更好效果。
树莓派固件提供了一些可配置电压,在/boot/config.txt文件中被映射成下列值:
如果你通过更改任何这些设置来对树莓派实施过压,都将会造成在BCM2835片上系统中永久的设置一个“引信”。这意味着,如果发生了烧毁,当你打算将树莓派作为有缺陷的产品退回时,供应商将会知道你已经对硬件实施过过压。当你负有责任的情况下却将产品作为缺陷品退回,我们或许不应该说这种行为不对,但是你应该知道,这种行为是不在保修范围之内的。
最大的变化来自于调整over_voltage值,这是BCM2835内部ARM CPU和GPU的核电压。over_voltage的可能值为-16(0.8V)到8(1.4V),默认值为0(1.2V)。每一个大于(或小于)0的整数对应增减电压的步长为0.025V。你不能在没有设置force_turbo=1(注意,这可能会触发“保修无效的引信”)的情况下设置高于6的值。
over_voltage配置项设置是一项超级设置,改变其值将会同时将over_voltage_sdram_c(SDRAM控制器电压),over_voltage_sdram_i(SDRAM I/O电压)以及over_voltage_sdram_p(SDRAM的物理电压)设置为该值。虽然也可以单独设置这些值,但你很可能会设置错误(或不匹配),从而导致内存损坏,因此我们强烈建议你使用over_voltage超级设置代替分别设置。
如果你决定实施过压,只需要在/boot/config.txt文件中设置,然后重新启动即可。
如果你采用了过压(或者同时也做了超频),监测组件的电压水平将因此突然变得更有意义。这些方法可以让你从硬件中挤出一点点的性能提升,但是你为了这点性能提升付出了减少硬件寿命的代价(以及可能的稳定性能)。
B型树莓派有两个专用的USB连接器端口,不过实际上,对于非常多的案例来说这确实不太够用,这里是如何获得更多USB端口的技巧。
通用标准总线(USB,Universal Standard Bus)已经成为计算机配件事实上的标准连接器。键盘、鼠标、硬盘驱动器、操纵杆、手电筒甚至泡沫导弹发射器都通过USB连接。树莓派(B型)配备了两个专用的USB 2.0端口让你去访问这个广阔世界的精品外设,但这些端口却一眨眼就用完了。在正常使用的情况下,键盘和鼠标会占用两个USB连接器,这样其他任何设备就都没有地方了!
对计算机用户来说这并不是个新问题,笔记本电脑通常也只配有1~3个USB连接器。即使只有一个USB主机控制器也可以支持很多设备在同一总线上同时运行(准确地说,最多可以支持127个设备)。本技巧就是通过使用USB集线器的方式来获得更多USB端口。
曾几何时,USB集线器价格高昂,不过那个时代早已过去。实际上,现在它们都是定期免费奉送的了,不过这些USB集线器都有一个问题,表现为两种形式:
这种类型的USB集线器的所有供电都来自于主机的USB接口,你很可能是以免费赠品的形式或者是在电子商店中以很便宜的价格得到它们的。
也被称为自供电。这种类型的USB集线器具有外部电源,并用它来给集线器上的每个USB连接器供电。
给USB 2.0分配的电流约为100mA(这个电流被称为单位负载),而每个端口最高可达500mA。这意味着,如果你采用的是总线供电的集线器,在最好的情况下(从主机获取500mA),它可以驱动4个设备。这是规范上的描述,因此肯定没错,对不对?但在现实世界中,这却并不尽然。
首先,USB集线器本身需要消耗一些电才能运行,因此它无法将从主机获取的500mA全部供给端口。甚至即使我们假定它是一个非常高效的设备(而它们通常并不是),那也只意味着它可以一次性供应4台设备,每台设备供给一个单位负载,但这还不是故事的全部。
USB规范是一个相当宽松的规范(部分是因为它无所不在的结果),以及大量、大量的设备的正常工作电流都要超过100mA——最值得注意的是,无线网络USB设备、带有花哨功能(LCD显示器、集成的USB集线器、背光以及blenders等)的键盘等,这些设备都被归类为高功率USB设备,每个端口可能使用的电流高达五个单位负载(500mA),但它们很少(如果有的话)这样标记,从视觉上看上去和低功耗(单个单位负载)设备并无两样。
最重要的是,树莓派上的专用USB连接器的每个端口只提供一个单位负载(100mA)而不是“正常”计算机所提供的5个单位负载。这个数字远远不能满足总线供电的集线器上的设备的供电需求,因此这些设备压根就无法为你工作。免费(或非常便宜)的USB 2.0集线器?它们总是由总线供电。抱歉,你将不得不买更好的东西。
这就是为什么如果你直接将一个高功率的USB设备连接到树莓派上,它要么试图工作在低功率模式(有时这些设备可以做到这一点),要么树莓派就干脆关机或检测不到设备。大多数高功率的设备可以在低功率状态下被检测到,但在投入使用时会消耗更多的电源(这在无线设备中尤为常见),从而导致状态异常。看上去设备好像在工作,Linux内核驱动也载入了,但它实际上并没有在可靠地、正常地工作。
解决树莓派这个问题的方案就是使用带有外接电源的USB集线器。你会希望使用一个质量好点的,因为这里面有很多可怕的选择。对这些USB集线器的制造商来说,偷工减料或者将集线器的供电设计成低安培数,这些都是很正常的现象。他们这样做的原因是因为他们认为你将要连上的大多数设备都是低功率的,而且你不会一次性的使用所有的端口。
七端口的集线器使用一个1A的电源,对于廉价的USB集线器来说这样的情况并不少见。如果这七个端口中的每一个都连接到高功率(5个单位负载,500mA)设备的话,那么这些设备总共就需要一个3.5A的电源。实际上需要更多,因为集线器本身也需要耗电。
为了安全起见,你应该和这些消减成本的厂商所做的假设相反,假定将要连接上树莓派的任何USB设备都是高功率的,而且你的USB集线器上的每一个端口都将会连接上高功率设备。这样确认一个USB集线器是否合适就成为了一个简单的数学问题:
1.获取USB集线器上的端口数,再加上1(考虑到USB集线器本身)。
2.用高功率负载(0.5)的大小乘以这个数字。
计算结果的单位是安培,这个大小的电源应该可以为你的USB集线器提供足够的电(至少)。
即使你使用了外部电源的USB集线器,当你将之用到树莓派上时仍然有可能遇到问题。有些集线器会通过USB连线(连接USB集线器到树莓派的线缆)传输功率,这被称为功率倒灌。
标准指出,集线器不应该这么设计,但实际上这样做的却屡见不鲜。功率倒灌可能导致的一种情况是,USB集线器比树莓派先有电(树莓派供电时通过标准的微型USB电源连接器),这将导致树莓派处于部分上电状态。而部分上电时,树莓派可能会在开始时不必要的对SD卡写入数据。
为避免这种情况,你可以将USB集线器的电源和树莓派的电源都插入到同一个电源板上,并使用电源板的开关让它们同时上电。
Pi Hut公司出售一种专为树莓派设计的理想的七口USB集线器[5],它永远不会通过互联线缆倒灌电流,从而避免了需要小心处理上电顺序。但不幸的是,它只有一个2A的电源,这意味着你一次只能使用三个端口用于高功率设备(可以使用5个单位负载),还可以将剩余的功率供给集线器。尽管如此,这个集线器的设计不会倒灌电流,所以你永远也不必为此担心。
已知的还有一种四口集线器[6]也没有电流倒灌问题,尽管它也只有一个2A的电源,但是四口集线器显然比七口集线器上更不容易超过这个限制。
我们目前所看到的在树莓派上使用得最好的集线器是PIHUB[7]的产品,它有四个端口,外部供电并可支持3A电源,外形就像树莓派的Logo。在本书撰写之时,PIHUB还没有出美国版本,不过很快就会有了。
Pi并不需要很多功率,但这也表示它所要求的功率就是它所需要的功率,如果供电过多或不足,都会造成运行时的问题。
树莓派运行时需要一个5V(DC)电源,可以从专用的Micro USB B型端口(在主板上丝印标记为“Power”)供电,或者从GPIO扩展(主板上标记为“P1”)引脚(具体来说,5V引脚的位置是P1-02和P1-04)供电。
如果你有一个可以用于大部分Android手机的充电器,那么你也就同时有了一根Pi的电源线(对不起,iPhone的粉丝们),可以(但不是最好的情况,可能压根就不工作)将另一端直接插入计算机的USB端口而不是插入墙上的电源。而对于其他的项目,你会希望通过GPIO口获取电源,这就是说……
在你急着在GPIO引脚输入5V之前,请记住,你这样做的同时也已经绕过了硬件的输入保险丝,而保险丝放在这里是为了保护你的硬件不因恶意或愚蠢的行为受到损坏。
比如说想象一下,你认为你正在输入的是5V的电源,但实际上你通过GPIO口传输给树莓派的电压远远大于5V,这可能是因为你对你正在做的事情还没有完全搞清楚,或者这仅仅是一个意外。无论哪种原因,都将出现一阵魔法烟雾!并通过“魔术”,我们的意思是,“你的项目就像魔法师帽子中的兔子一样消失不见了”!
许多电源都做不到完全“干净”,这表示它可能标注为“5V”,但它实际的意思是“高于或低于5V”。甚至即使它只是尖峰高于5V,但你正在做的也绕过了瞬态电压抑制(TVS,transient-voltage-suppression)二极管!
这个二极管通常是用来保护树莓派不受那些意外的尖峰电压损害(当电压超过雪崩击穿电位时它会分流掉多余的电流),但你刚刚绕过了它,然后出现的就只能是魔法烟雾了。
最后,但并不是最重要的一点,你需要输出调节后的电压到GPIO口,而大多数电源适配器并不能输出调节后的电压。这意味着你需要在GPIO引脚和电源适配器之间搭建一个稳压电路。
出于以上所有这些原因,我们强烈建议你只从Micro USB B型端口处供电,除非你有一个真正的绝佳理由可以不这么做。
技巧08中解释了为何会有一些USB集线器会通过连接线倒灌电流,这实际上可以给树莓派部分供电,但不要这样做。
USB集线器不应该倒灌电流,在任何层次的真正意思上这都是不规范且不可靠的电源。它可以(而且很可能会)导致不可预知的后果,包括(但不限于)意外的程序故障、内核错误,以及SD卡损坏。
我还是想给Pi倒灌电流!
OK,很好。有一个合理而可靠的方法可以做到这一点。在澳大利亚有一些勤劳的黑客们有一个自制的USB 3.0集线器,就是为了给树莓派提供倒灌电流这个明确目的而制作的。
具体来说,他们的集线器的连接端口将传输超过1000mA(1A)的电流给树莓派用于正常操作所需,通过连接在USB集线器上就足够给Pi供电了(不再需要单独的电源给Pi供电)。你可以看看这个地址:
http://www.buyraspberrypi.com.au/shop/4-port-usb-3-0-powered-usbhub/
使用这个集线器的唯一缺点是它仅仅只有一个2A的电源,1A用来给树莓派供电,留下不到1A(集线器自身需要用去一些)的电流给连接的设备,没有给太多的高功率设备(0.5A,最大的5单位负载)留下很大的空间。
需要注意的是,使用树莓派的GPIO引脚为连接的设备提供电源,与输送5V给GPIO口来为树莓派供电,这两者的差别相当大。本书中的许多技巧都需要从GPIO引脚中获取电流,这样做是安全的。
除了5V引脚(P1-02和P1-04)之外,还有3.3V引脚(P1-01和P1-17)。3.3V引脚可以最大允许的电流消耗是50mA,而5V引脚可以最大允许的电流消耗在树莓派A型和B型之间是可变的,5V引脚最大允许的电流消耗值可以通过用USB输入电流(标称1A)减去主板其他部分消耗的电流值来计算。
A型主板需要消耗500mA的电流,因此5V引脚的最大电流消耗是500mA。而B型主板,因为其有更高的700mA电流消耗,因此5V引脚的最高电流消耗是300mA。
现在,你已经重新审视了你的电源选项,你必须清楚当事情出错时应该如何去做。
当功率太低(或电流太低)时,树莓派开始采取行动……嗯,技术术语是“weird[8]”。USB设备可能无法识别、也可能一会识别一会不识别,软件无法可靠运行,猫和狗碰到了一起,群体性的歇斯底里!
如果事情仅仅是“怪异”,那么有合理的理由怀疑是动力不足。即使你认为你已经做了所有正确的事情,但这种现象发生可能还有两个原因:不合格的电源和错误的Micro USB线。
这和在1.9.1节“使用GPIO口供电Pi之前请三思”中所提到的电源尖峰问题刚好相反,但它的意思是,“当一切准备就绪,你完美地低哼着Doctor Who”[9]的主题曲安抚我杂乱的心灵,在我最好的一天里,我也许会输送5V电源[10]”。这句话并不适合插座上的这些电源,它们只是输出“5V”而已(或者至少在理论上是这样)。
可悲的是,这却是一个常见的场景。许多廉价的Micro USB手机充电器便宜得自有其道理:它们不能很好的工作(你有没有在一元店中购买呢?这可能暗示它就是个廉价货)。
当将它用在你的手机上,这没有什么大不了的,它只是需要更长的时间来为你的手机充电而已,但树莓派在得不到所需的功率时可没有这么简单。
避免上述情况的最好方法就是去购买经过验证的可靠电源。例如,Adafruit销售的一款不错的5V 1A电源[11],其实际输出电压是5.25V,从而弥补了电源和树莓派之间线缆电阻产生的任何压降。
你的Micro USB线质量欠佳的可能性不会超过电源,但它确实也会发生。线缆在导电时会有一些电阻,这在通常都是无关紧要的。
例如,在5Ω和50mA电流的情况下,整个线缆的压降大约为250mV,大部分设备在这种情况下都没有问题,因为USB规范要求它们应该可以容忍这种程度的压降。然而有一些类似树莓派这样的设备,它们需要更多的功率(尤其是将一些耗电的USB设备直接插入到树莓派的USB端口时)。
正如本技巧前面所提到的,B型树莓派需要消耗700mA的峰值电流,因此如果你的USB线有5Ω的电阻,这将造成3.5V的压降。对于Pi来说,这个压降太大了!
好消息是大多数的USB线的电阻都没有5Ω,真正好的产品的电阻将会非常接近于0。我们使用的来自最新的手机的线缆还没有发现过真正有问题的,而这似乎也是大多数人这条线的来源。
如果你需要购买一条USB Micro B型线缆,Mediabridge的“USB充电线”经测试电阻很低,可以在亚马逊买到。Adafruit的USB Micro B型线缆在B型树莓派的峰值电流下也工作得很好。
为什么USB设备会导致Pi重启?
热插拔(在插入USB设备时,Pi已经在运行)往往会导致Pi重新启动。插入设备会导致一个电源尖峰,从而造成Pi的压降,而这最终导致了重启。
版本1的树莓派主板在USB端口上有两个140mA的多晶硅熔丝可以防止这种现象但会导致其他问题,因此版本2的主板将之去掉了。如果你确定预期有热插拔设备的需要,可以通过使用带电源的USB集线器来防止重启。
如果你有一个便宜的电源,那么几乎可以确定其有问题。但如果你认为你的线缆有问题,从而想测试一下它的电阻。你可以将这根线缆拆开,或者可以使用一个可以测量的Micro USB B型设备(上面有接地的引脚的设备即可)。
USB A型连接器比较大,足以让你能直接量到其接地引脚(接地引脚是引脚4,如果你将连接器的中空面朝上,从上往下看线缆的话,它是左边的第一脚)。测量电阻时将校准过的万用表打到最低的欧姆档上,然后测量Micro USB B型连接器连接的设备的地到A型连接器的地之间的电阻,用这种方法测量线缆电阻是一个不错的主意[12]。
你还可以使用一个小小的硬件工具来简化上述测量工作。Bitwizard B.V. 为此目的制作了一个USB探针[13]。
有些人甚至通过焊接一个低电阻的线到电源和Micro USB B型连接器来制作自己的线缆。如果你只是想尝试制作线缆,那么这不失是一个很干净的黑客工作,不过并非真的必要。
现在的大部分USB线似乎并没有严重的电阻问题。如果它能迅速而可靠地给一个Micro USB B型接口的手机充电,那么它很可能对树莓派也足够好。即使不是,一个新的线缆也通常是价格便宜、容易获取的。
相比其尺寸而言,树莓派的硬件是相当坚固耐用的,但它确实有一个明显的你也许可以发现的弱点。而这个技巧就是关于如何找到这个弱点以及如果它发生了,那么应如何解决并让树莓派恢复寿命。
树莓派配备了一个内置的自毁按钮,很多人在他们第一次插入时不小心触发了它。好了,这不完全正确,但是在你准备发挥Pi的作用之前,它脆弱的组件布置就可能破坏掉你的这个新玩具。如果你在抽出时间阅读这篇技巧之前就把它弄坏了的话,这里的内容会告诉你在发生这种情况下应如何去做。
在主板上紧靠着电源连接器的后面是一个小小的银色桶状物(图1-4),这就是电容C6,它是一个220μF、16V、表面贴装的电解电容,作用是用来平滑输入Pi的电压。当你插上或拔下你的Micro USB数据线时,它似乎也是一个相当好的着力点,但事实并非如此,不要触碰它。虽然它不是一个关键元器件,如果没有它Pi也许仍能工作,但也有可能不能工作。
图1-4 C6是紧邻电源连接器的黑色和银色双色的桶状物
如果你正在寻找一个替代的网上商店,尝试搜索这个条目“220uF 16V电解电容”。
为你的树莓派制作或购买一个好的外壳有几个不错的理由,而这一块连接的相对脆弱性就是其中的一个。同时,如果你需要携带它到处跑,可以将它放进原装的静电袋和盒子里。
如果你已经碰断了电容器,而你的Pi也停止了工作,值得安慰的是你绝不是出这种事的唯一的一个人。虽然这并不在保修的范围之内,但你有几种选择,首先,一个新的更好的电源可能会解决这个问题。使用一个稳定的电源,你应该不会再有任何问题。
如果你不清楚你的电源是否正在干它应该做的事情(不能明显地判断“它在工作”或“它不在工作”),这时候可以测试一下它。不能用完全不能工作的Pi来判断你是否获得稳定及不易被干扰的电源,你应该使用的是一个不可靠的Pi来测试。
事情是在中途开始出毛病的,起初一切正常,然后也许当你进入GUI的时候,外设停止了工作。是时候检查你的电压了,Pi有两个测试点可以帮助你,分别标注着TP1和TP2。TP1就在树莓派的Logo下面,TP2在GPIO和RCA输出之间。
将你的万用表打在20V的直流电压档,用表笔接触TP1和TP2。读数应该接近5V,且不应超过上下0.25V的范围。
如果你的Pi仍然不能正常工作,或者你只是想让电容器恢复原状,那么你可以在那里焊上一个新电容。
焊接上新的电容器可能使你的树莓派完好如新,但它肯定将导致你的树莓派的保修无效。
当你将电容器焊接回去的时候,请注意电容器是有极性的,因此将有黑色条纹的一面朝着主板的边缘非常重要。对于一些基本的焊接技巧,请查看1.15节中的“焊接提醒”。
虽然树莓派支持1080p的HDMI视频输出,但对很多项目来说,接上一个视频显示器既不经济也不实际。以下是不带显示器的情况下的相关内容。
树莓派经常被吹捧为一种廉价的计算机,但如果你没有现成的显示器和其他各种可用外设,成本将会飞速上升。此外,由于树莓派用于创意项目的最吸引人的特点之一就是它的尺寸很小。因此,你很可能会发现你需要在“headless”模式下运行:没有显示器、没有键盘、也没有鼠标,只有Pi单飞(如果你正在搭建技巧44,那正符合字面意思!),而这正是需要运行headless模式的时候。
修改你的Root密码
不要忘了尽早修改你的root密码,通常情况下这是一个好的做法,但是在headless模式下会显得尤为重要。大多数树莓派的发行版有着众所周知的默认root密码。
一般情况下,你最终的headless Pi项目是从连接显示器和输入设备并做好一切准备开始的。如果不出意外,这似乎是最简单的获取IP地址的方式,同时它也是能够SSH到树莓派的第一步。然而,如果你使用的是Pidora,你可以一开始就进入headless,这是由于有一个专为进入headless并绕过了第一步启动过程的配置选项,当你在SD卡上安装好Pidora后(你可以在http://www.pidora.ca 下载最新版本),在其boot分区中创建一个名为headless的文件。
对于静态IP地址,将之和子网掩码及网关一起在headless文件中列出:
你也可以通过在这个文件中加入这句来启动rootfs-resize:
如果你想设置交换分区的大小,也在这里添加:
如果你的Pi需要动态获取其IP地址(DHCP),headless文件保持为空。但是你如何知道Pi的实际IP地址是多少?这就是Pidora的headless模式为你服务所在!
当你有了这个headless文件并启动树莓派,它会在上电2分钟之后先通过扬声器间歇发声播报IP地址,30秒之后,再通过绿色的OK/ACT灯闪烁播报IP地址。这些功能由ip-info提供,一个包含名为ip-read和ip-flash的巧妙的软件包。这种间歇发声/闪烁播报表示数字是通过下面的方式实现的。
你可以在这个地址获取关于ip-info软件包的更多信息并下载之:https://github.com/ ctyler/ip-info/。
正如前面提到的,Pidora通常会通过第一阶段启动过程启动,并让你设置root密码和其他用户。但这个脚本仅仅在找到输入设备的情况下才会运行。否则,系统会通过IPv4 DHCP配置以太网接口,并假定你将自行设置在第一启动已经设置好的任何其他偏好配置。
对于任何headless项目、以及任何从方便的角度来说和你相距较远的项目,或者仅仅只是因为你懒得穿过房间,这些情况下你都需要知道如何SSH到你的树莓派上。
OpenSSH,由OpenBSD项目为安全通信所创建的开源的工具集,很可能在你选择的任何发行版上都有效。
如果你有一点点复古倾向,请注意“Squeeze”这个在“Wheezy”之前的版本,它并没有在默认情况下运行SSH。
如果你不能确定,你要做的就是尝试SSH到你的Pi。你会发现这相当简单,连接显示器和键盘,然后运行:
如果你的输出并不与上面输出的信息类似,你应该赶快安装SSH。在Fedora系统的安装命令如下所示:
下面是如何在Debian/Ubuntu上安装:
当你确定SSH已经安装好之后,将其设置为每次开机时自动运行的守护进程:
如果你不是从最开始就进入Pi的headless模式,假定你手边就有显示器和键盘,你可以将Pi连上显示器并运行ifconfig命令。这是比较简单的获取IP地址的方式。请注意,如果你使用的是Fedora或Pidora,你需要使用ip addr命令替换ifconfig。
也可以检查你的路由器的缺省IP地址,这个地址可能在某处的一张贴纸上,你可以搜索你的路由器品牌,也可能在某个网站上找到它(192.168.0.1是一个常见的路由器地址)。你还可以运行route -n来获取它,在Gateway下面标记着UG的那一行的数字就是缺省IP。在Web浏览器上进入这个地址,你几乎肯定会找到某种路由器控制面板,你也可以看到已连接的设备,其中包括Pi。
你还可以使用nmap网络映射工具,如果你没有使用过它,这也是一种有趣的学习新工具的方式。这就是说,你应该只能在你的家庭网络而不能在办公室、咖啡馆、或任何其他你没有话语权的网络里完成你的nmap学习。当你执行su -c nmap 192.168.1.1/24时(需要使用你的网络的实际值替换掉命令中的IP地址),你可以看到所有连接到网络的设备的一个列表,其中有一个设备的MAC地址标记着Raspberry Pi Foundation,它同时也列出了你的Pi的IP地址。
如果你经常需要通过SSH连接,你会想通过给Pi设置一个静态IP地址(参见技巧13)来将事情简单化。
现在你已经做好了连接Pi的准备了,你可以通过运行ssh username@host命令来进行连接,这里username是你在树莓派上已经设置好的账号,host是你发现或者配置的Pi的IP地址。如果你尚未设置一个用户,你可能需要参考默认登录方式。对于Pidora,它是root/raspberrypi,对于基于Raspbian的系统,它是pi/raspberry。
当你第一次通过SSH连接到任何一台机器,它都会将该机器的记录存储到.ssh/known_hosts文件中。系统将在每一次连接时都会检查这个列表,这意味着在你第一次连接时,你会看到一个对话框并对你提出询问:
这听起来像预示着坏消息,尽管跟随着“警告”信息,但是在这里“yes”是正确的答案。
现在,你已经做好了使用命令行从树莓派发送或接收文件的准备,这几乎就像你直接在树莓派上工作一样。如果你想通过SSH启动GUI接口,可以在连接时使用-X参数:
大多数(但不是全部)的图形化应用程序都可以使用这种方式工作,其被称为“X转发”。
如果你希望每次都能够通过同一个IP地址连接到Pi,而不是临时去查看它,那么你需要为它分配一个静态IP地址。
许多ISP使用动态IP寻址,这意味着你每次连接到互联网时都会得到一个不同的IP地址。如果你要定期通过SSH连接到Pi(参见技巧12),以使用VoIP(参见技巧32)或者因为其他原因需要每次都要有相同的IP地址,你可以设置一个静态的IP地址。
在Pidora中,如果你运行的是headless模式,那么你可以按照技巧11的说明来做。如果不是headless模式,那么可以编辑/etc/sysconfig/network-scripts下的文件。
如果你通常是Debian的用户,则需要编辑的类似文件是/etc/network/interfaces。
你将会看到以ifcfg-<接口名>方式列出的可用的网络接口配置列表。选择你要使用的连接并用你常用的编辑器编辑,例如:
你将会看到如下的内容:
你需要将BOTPROTO行从dhcp修改为static,另外还需要保证ONBOOT设置为yes。然后添加IPADDR、NETMASK、BROADCAST,以及NETWORK等的信息,就像在headless文件中一样,切记不要选择一个已经在你的网络中使用的IP地址。NETMASK总是设为255.255.255.0,GATEWAY设置为你的路由器的IP地址:
最后,重启网络服务以应用你的新设置:
如果你使用的是基于Raspbian的发行版,你将会遵循类似的步骤,只有一点有所不同,你不用查找单个文件,而是打开/etc/network/interfaces文件(以root身份):
然后查找这一行:
将dhcp更改为static,并添加静态IP地址、网关、广播和子网掩码:
如果收集这些信息需要一些帮助,你可以通过运行ifconfig并分别注意inet addr、mask,以及bcast等关键字获取当前的IP地址、子网掩码以及广播地址,运行route -n获得网关及其调用的目的地网络(同样,在新的Fedora和Pidora版本中,使用ip addr替代ifconfig命令)。
选择一个唯一的静态IP地址
你务必要选择一个没有被任何其他在你的网络中的设备使用的IP地址,否则,你的网络连接将无法正常工作。当使用dhcp时,禁止使用相同的IP地址,而设置静态IP的时候也有可能不小心产生同样的IP地址。
此外,在设置静态IP地址时你需要手工指定一个DNS服务器。DHCP配置通常会为你配置一个DNS服务器,但对于静态IP配置来说,没有办法知道DNS服务器是什么。要设置DNS服务器,需要编辑/etc/resolv.conf文件(以root身份),并增加如下行:
用你的DNS服务器的IP地址替换上面的11.23.58.13。如果你有多个DNS服务器,你可以在这个文件中有多个name server$IP行。
保存更改后,重新启动网络以使新设置生效:
现在你拥有了一个静态IP地址,每次访问互联网的时候不会再发生IP更改了。
GPIO代表通用输入/输出(GPIO,General-Purpose Input/Output),因为有了它们,你的树莓派在本书中的许多技巧才成为可能。这个技巧将为你掀起它们的神秘面纱[14]。
树莓派包含了一些你可能早已熟悉的连接器(以太网、HDMI、音频,以及USB等),它还有一个26pin(两排13针)的排针用来直接连接较底层的设备。这些引脚被称为GPIO,它们是可编程的输入/输出管脚,可用于广泛的用途。
实际上,这意味着我们使用这些GPIO引脚几乎可以把任何东西连接到树莓派。在树莓派上这些引脚的接头被标注为P1,如图1-5所示:
图1-5 B型树莓派及其左上角的GPIO接头
够简单了吧?好了,这里有一点点混乱的地方:在树莓派上存在着两种给GPIO引脚编号的方式。
标记GPIO引脚的第一种方法是参考树莓派主板上P1接头的引脚数。在图1-5中的引脚中,引脚1是下面一行中左起第一个引脚,引脚2是上面一行中左起第一个引脚,以此类推,其他引脚交替向右延伸。如果用表格的方式,主板引脚号看上去就如表1-5所示:
表1-5 主板引脚号
2 |
4 |
6 |
8 |
10 |
12 |
14 |
16 |
18 |
20 |
22 |
24 |
26 |
1 |
3 |
5 |
7 |
9 |
11 |
13 |
15 |
17 |
19 |
21 |
23 |
25 |
通过其主板标注号来标记树莓派的GPIO引脚,这种方法很容易通过查看硬件来理解。如果你使用这个编号方案,你可以使用主板标记作为引脚前缀,如“P1-”。
但树莓派GPIO引脚的另外一种标注系统使用了Broadcom片上系统的频道号,这个系统被称为BCM系统,它是实际使用中的最为常见的系统。尤其是因为GPIO引脚在不同型号及不同版本的树莓派中的连接方式并不相同,所以它们在不同型号或版本中用引脚顺序标注并不具有互换性。
表1-6显示了BCM引脚标记和表1-5中所示的引脚之间的映射关系(适用于B型树莓派的版本2,这也是本书撰写时的当前版本)。
表1-6 BCM引脚标注(B型树莓派版本2)
5V |
5V |
GND |
14(TXD) |
15(RXD) |
18 |
GND |
23 |
24 |
GND |
25 |
8 |
7 |
3.3V |
2(SDA) |
3(SCL) |
4 |
GND |
17 |
27 |
22 |
3.3V |
10(MOSI) |
9(MISO) |
11(SCKL) |
GND |
让我们挖掘得更深一些。正如你可以从标注上看到的那样,一些引脚被预配置为特殊的用途。标记为3.3V和5V的是电源引脚,使用了电压值作为标记,GND引脚提供了电路接地,BCM引脚2(P1-03)和引脚3(P1-05)被预先设置为提供I2C总线1,BCM引脚14(P1-08)和15(P1-10)被配置来提供一个串行终端,BCM引脚18(P1-12)则支持脉冲宽度调制(PWM,Pulse-Width Modulation)。
由于以上这些原因(以及因为它也是互联网上最常用的树莓派的GPIO标注方案),本书采用了BCM引脚标注法。
我们意识到这可能会在给Pi连接多个设备的时候造成混淆,但请参阅下一节获取一种聪明的方式来帮助你记住这些引脚的关系。
GPIO应该是简单的,但是共同标注计划(BCM,common labeling scheme)是如此的混乱,以致让人很容易忘记。这里有一个简单的技巧可以确保让你总是记住哪个引脚该在哪里。
Simon Monk博士曾经有个问题:他希望可以临时连接各种连线到树莓派的GPIO引脚上,但是每次他想这么做的时候,他都不得不上网去查BCM的引脚标注,接下来还要倒着数引脚以找到正确的那只。虽然听上去很容易,但很容易出错,而且相信我们,你很可能会犯他曾经犯过的错误。
为了解决这个问题,他创造了一种叫做树莓叶的方式(如图1-6所示)。树莓叶是树莓派GPIO引脚的一张完美尺寸的缩放图,而BCM标注就在这些GPIO引脚旁边。
图1-6 树莓叶,由Simon Monk创建
你可以复印并使用该图像作为参考,但从本书的Git仓库或Monk博士的网站的原始PDF链接[15]下载可能更容易。
在你构建电子项目的时候,免焊面包板是一个相当有用的朋友,尤其是在原型设计或只是测试设备的时候更是如此。让我们动手做一个简单的到树莓派的连接。
虽然你可以直接通过常见的跳线或者直接在添加的设备和GPIO的引脚之间焊接一个线来简单地连接树莓派GPIO引脚和设备,但让你工作的空间越大,你可以发挥的余地就会越多,我们可靠的老朋友面包板正可以在这方面给你提供帮助。面包板如图1-7所示,即使你以前从未做过任何一个电子项目,你应该也注意到这家伙那白色的矩形塑料板上纵横排列的小孔洞了。
图1-7 面包板
面包板的工作原理是提供了互相连接在一起的水平平行的连接孔(通常由间隙隔开),当你想将两根线连接在一起,你可以简单地将它们插入到同一行的排孔中。需要更多的孔?只需要从一行跳一根线到另一行即可。
此外,大部分面包板在每一边都有一个向下的垂直“轨道”,标有红色和黑色。这些轨道是用来接电源和地的,这种设计可以简化电路。
我们在Adafruit的朋友们做了一个名为Pi Cobbler的方便套件,它允许你连接一个标准26 pin排线(就像你在一个PC母板上使用的一样)到一个带丝印的印刷电路板(PCB,printed circuit board)的线缆连接器上并引出所有的引脚。这个PCB接口板上面设计有引脚,可以让你正确的连接到面包板上。然后,使用线缆连接树莓派的GPIO引脚到Pi Cobbler的PCB接口板上,你就可以直接通过面包板连接设备了。
这个技巧中的说明也受到了Limor“Ladyada”Fried的出色的组装教程[16]的启发。
Adafruit出售Pi Cobbler的两种变型产品:
预装产品,因此你从邮局收到它之后就可以立刻使用它(他们过去常常将之作为未组装套件出售,但看起来他们不再这么做了)。
稍大,但是得益于其T型布局,T-Cobbler还包含了面包板上少量的引脚。当本书撰写之时,T-Cobbler只作为工具包的一部分出售(非预装产品)。
如果你最终获得的是这些版本的未组装套件,那也不要烦恼,你自己把它组装起来也很容易。下面是你组装时需要的东西:
如果你的公头针脚(其样子是黑色塑料块在中间将金属针脚分成一长一短两段)是很长的单独的一根,你可以轻轻地将之折断成每片13针的两片,你可以用手指或钳子来完成。这两片对应着Pi Cobbler PCB长边上的两排13个孔。
然后继续向前,请插上你的烙铁电源并将它放在一边(如果你需要一些帮助,或者它通电加热还需要一会儿时间,可以参考一下下面的 “焊接提醒”的内容),并等待5~10分钟让它完全加热。如果你有一个带有温度设定的高端烙铁,Adafruit推荐你将烙铁的温度设置为700华氏度。
将Pi Cobbler PCB放在你的面前,并让引脚的丝印(例如,GND)清晰可辨且朝向正常的方向[19]。如果是T-Cobbler套件,这样放置后电路板的形状就像一个字母T,如果是原来的套件,电路板的长边应与你平行。
PCB上印刷了一个方框,这个方框表示黑色连接器插头应放置的位置。轻轻将插头压入该区域,注意将插头的缺口对准方框丝印上印刷的缺口。如果是原来的Cobbler PCB,缺口应在“21/27”丝印的右边,如果是T-Cobbler PCB,缺口应该在两个大圆孔中间T字的连接处。你必须确保插入的方向正确,如果你将缺口对反了,当连接上Cobbler和GPIO引脚后,这些引脚正好反转,将导致Cobbler上的标注全部都是错误的。
焊接提醒
初次接触焊接看上去令人生畏,但如果你足够小心并谨慎使用烙铁的话也并不困难。请记住以下几件事情。
焊接在加热时会释放轻微有毒的烟,因此你应该总是在一个通风良好的地方焊接。
烙铁需要加热,会很热(实际温度变化的类型和大小取决于你的烙铁),如果你碰到烙铁头会被灼伤,所以你应该总是拿着柄部,不要离它太近。
总是假定一个插上插头的烙铁处在加热状态并一直这样对待它。见鬼,实际上我们通常假设不插插头的电烙铁也是热的。
每个烙铁都应该有一个烙铁架,把它派上用场。这样做可以保护你的工作场所、项目、手、脚等不会因为不小心而被烧出一个孔。
手边放置一块小小的、湿润的海绵,如果需要的话,可以用它从热的烙铁上擦去多余的焊锡。如果烙铁的尖端被涂上了一层焊锡,它将难以有效地工作。
你不需要为了保证连接效果而滴一大滴焊锡下去。当加热的时候,焊锡会很快变成液体并流入热的连接处。只需要一点点即可,多加练习可以帮助你掌握多少焊锡最合适。
将PCB翻个面,仍然保持连接器插头连在上面,现在连接器在PCB的下面了,你应该可以看见26个连接器引脚从PCB上26个金属插孔中露出一点点。将你的烙铁的尖端同时靠住一对插孔和针脚,按住几秒钟以加热金属,然后在烙铁头上沾一些焊锡。焊锡会瞬间融化成液态,流向插孔和针脚接触处,形成一个完整的焊点。
要使用足量的焊锡使得插孔和针脚之间看不到间隙,但也不要太多以致连上了旁边的引脚。实际上,它确实不用很多,只要一点点就可以。焊锡将形成有效的电气连接,不过它也提供了机械黏合并使得设备结合在一起。对26个引脚重复上述过程,直到连接器插头被整齐地焊接到PCB上,然后将烙铁放回到焊架上(你将会在某一时刻再次使用它)。
取来面包板,把它放在你的面前。将两套公头排插插入面包板中,其中长的一端插入到面包板中,直至每个引脚中间的塑料头紧贴在面包板上。
你必须要做到让这些引脚都有着和其在Cobbler的PCB上同样的间距和对齐方式,对于原来的Cobbler,大概需要5排面包板间距,对于T-Cobbler,仅仅需要3排间距。
将PCB板翻转过来,将它对准公头引脚的短端,此时面包板对我们来说作为一个操作平台。轻轻地压下PCB板,直至所有的引脚穿过丝印插孔,且PCB紧紧贴在中间的塑料头上。重新拿起你的烙铁,并焊接这26个引脚和插孔中的每一个。
完成上述工作之后,使用潮湿的海绵头清洁烙铁尖端并拔下电源插头,将烙铁放回到支架上冷却。此时你可以用排线将刚完成的Pi Cobbler和树莓派的GPIO引脚连接起来,你会注意到,因为连接器缺口的原因,排线插入Pi Cobbler的方式只有一种,然而,一定要小心,因为树莓派的GPIO引脚没有任何连接器,排线可以用两种方式连接。包含在套件中的排线将有两个指示来帮助你正确 对齐。
组装完成且连接好的Pi Cobbler看上去类似图1-9所示(图示是一个原来的Pi Cobbler)。
图1-8 正确连接的Cobbler排线的特写
图1-9 装配完成且连接好的Pi Cobbler
它可能看起来并没什么,但请相信我们,当你连接多个设备到树莓派的GPIO引脚时,这个套件可以为你使用面包板提供极大的便利(并一目了然地看清GPIO的丝印),从而让你很开心地完成技巧。
如果你转动Pi并使得GPIO引脚在右上方,引脚被按照从上到下的方式编号,其中奇数在左边而偶数在右边(因此,第一行是1和2,第二行是3和4等)。这些引脚编号并不对应GPIO的编号,例如,GPIO 22位于15脚。表1-7说明了版本2主板的引脚的作用。
表1-7 版本2主板的GPIO引脚作用
引脚编号 |
作用 |
---|---|
1 |
3.3V电源 |
2 |
5V电源 |
3 |
GPIO 2(SDA) |
4 |
5V电源 |
5 |
GPIO 3(SCL) |
6 |
地 |
7 |
GPIO 4(GPCLK0) |
8 |
GPIO 14(TXD) |
9 |
地 |
10 |
GPIO 15(RXD) |
11 |
GPIO 17 |
12 |
GPIO 18(PCM_CLK) |
13 |
GPIO 27 |
14 |
地 |
15 |
GPIO 22 |
16 |
GPIO 23 |
17 |
3.3V电源 |
18 |
GPIO 24 |
19 |
GPIO 10(MOSI) |
20 |
地 |
21 |
GPIO 9(MISO) |
22 |
GPIO 25 |
23 |
GPIO 11(SCLK) |
24 |
GPIO 8(CE0) |
25 |
地 |
26 |
GPIO 7(CE1) |
这些引脚的输入电压不应超过3.3V,而且引脚都没有过电压保护。
你可以通过引脚3和引脚5访问I2C接口,这个接口用来连接低速设备或传感器。你可以通过同样的引脚连接多个设备。
引脚12提供了通过脉冲宽度调制(标记为PCM_CLK)以类似于模拟控制的方式对电动机进行控制。出于某些目的,我们可以通过软件实现同样的效果。由于Pi只有一个PWN引脚,因此这非常有用。
UART引脚(14/TXD和15/RXD)用于串行终端访问。如果你不需要用到这个,你可以将它们切换到GPIO模式并获得两个额外的GPIO引脚。I2C和SPI引脚也可以这么做,但是你使用UART引脚的可能性比使用I2C和SPI更小。
SPI引脚用来接入某些类型的传感器或连接其他设备。SPI工作在主/从方式:
有两个片选引脚意味着你可以控制两个SPI设备。
对于那些想要更好的理解GPIO和更有效利用树莓派这一特性的人,我们推荐你看看这个页面[20],这里提供了Pi的GPIO的访问库,如果你已经熟悉了Arduino的接线方式,这些信息将会对你特别有帮助。
按理来说访问类似树莓派这样的嵌入式设备的最常用方式应该是通过内置的串行设备访问。这个简单的技巧可以让你从树莓派中得到一个USB串行控制台。
今天几乎所有可用的通用嵌入式计算机和微控制器都有内置的通用异步接收/发送器(UARTs)。UART对接收和发送串行数据提供了一个机制,同一时间只发送一个bit,串行通信的这种方法有时被称作晶体管-晶体管逻辑(TTL,transistor-transistor logic)序列。其数据速率因设备而异,但测量单位都是比特每秒。树莓派有一个内置的UART,连接到BCM引脚14(TXD)和15(RXD),数据速率为115200bps(或波特率)。
嗨,这不是真正的波特率!
OK,从语义的角度来看波特率是信号速率的单位,其并不总是和总bit速率(bps)相同。维基百科说波特率是“在一个数字调制信号或一个行编码上由传输介质造成的每秒显著的符号变化(信令事件)的数量”,然后它又花了好几页描述波特率的数学上的差异,这可能对你来说很迷人,也可能把你弄睡着。
关键之处是这样的:在计算机和电子行业泛滥成灾的术语波特率被使用已经有大约40年了,其结果是大量的软件和硬件不加区分的互换使用bps和波特率。对于树莓派上的USB串行控制台的具体情况来说,在数据速率方面使用bps和波特率是相同的,在这里单位对我们并不重要,我们需要尽可能保证你有一个功能正常的串行控制台,为此,你需要知道数据速率是115200。比特、波特率还是末日的大仓鼠,你愿意用哪个就用哪个,但是115200是树莓派UART串行设备的真正有魔法的数字。
如果你使用计算机已经有几年了,你也许还记得几乎每一台计算机都带有一个RS-232串口的时候。但在过去的几年中,这些端口已经消失了,大多数笔记本电脑中已经不再包括它们(或者它们只在可选的笔记本电脑底座中才存在)。不管你信不信,对于用于连接到树莓派的UART串口来说,这实际上是件好事。树莓派采用的Broadcom芯片使用0和3.3V的逻辑电平,而不是PC机的RS-232串口所使用的+/- 3到15V范围的电平。这意味着如果你的计算机有了一个RS-232串行端口,你将需要有一个转换板或适配器,以在它可以工作之前先转换信号电平。
RS-232或转换
这里有一个关于如何建立3.3V到RS-232电平转换器[21]的相当不错的教程。
好消息是有更好的方法连接树莓派的UART串口到你的计算机:USB!Adafruit出售一种绝佳的USB-to-ttl串行线[22],它可以直接连接到树莓派的GPIO引脚上,并在另一端提供一个USB串行设备。这根线在一端(不具有USB接口的一端)有四个母头跳线连接器,这些跳线具有颜色编码:红色是5V电源,黑色是地线(GND),绿色用于树莓派接收数据(RXD),白色用于树莓派发送数据(TXD)。你可能也注意到了USB连接器这端比正常的要大,这是因为它里面有一个USB到串口的转换芯片。
要进行物理连接,只需要简单地将三个母头跳线连接器直接连接到树莓派的GPIO相应引脚即可。白色的发送线连接到TXD端口(BCM引脚14(P1-08)),而绿色的接收线连接到RXD端口(BCM引脚15(P1-10)),最后黑色的底线可以接到任何一个GND引脚,不过为了简单起见,我们建议你把它立刻连到TXD端口的左侧GND引脚(P1-06)。你可以通过比较图1-10来确认接线。
图1-10 正确连线到USB转TTL串口线
红线的技巧
你可能已经注意到我们没有要求你连接红线,这是因为USB串行设备将直接通过USB端口的5V 500mA启动自己。你可能也注意到我们曾经说过树莓派的UART使用3.3V逻辑电平,而不是5V。这千真万确,而接收和发送线已经转换成3.3V。现在一切正常,让我们放下这些并继续前进。
不过,你可以用这根红色电源线完成一个很酷的小技巧。因为红线能传输5V电压,因此你可以用它来驱动树莓派,而不是用正常的mini B型USB连接器。只需要将红线连接到5V引脚(P1-04),然后不需要连接任何其他电源,将USB-to-TTL串口线插上你的笔记本电脑,树莓派就可以启动了!
这其实只是个小把戏,因为从红线供电并不是启动树莓派的理想方式,这有好几个原因,我们已经在1.9.1小节“使用GPIO供电Pi之前请三思”中讨论过。
现在继续前进,将USB连接器连接到你的计算机上。
要连接UART串行设备,你首先需要知道它的设备名。当USB串行驱动加载成功(在你插入线缆的USB端时,应该已经完成了加载)后,内核会为设备分配一个设备名,因此你只需去翻看dmesg的输出即可。
具体来说,我们知道设备名可能是ttyUSB#,这里#是一个数字,可能是ttyUSB0,但是我们还是要确认看看。如果你有多个USB串行设备在你的系统上(你真是个淘气的超级黑客啊),你要找的是带有pl2303 converter这样的输出。如果你有一个以上的pl2303 converter类型的USB串行设备存在,请一次拔出一个反复尝试,直到你找到了合适的设备名。总而言之,下面就是关于你如何检查的:
不出所料,我们的设备是ttyUSB0。这意味着完整的设备节点名是/dev/ttyUSB0。未经授权的用户不能正常访问到/dev/ttyUSB#设备,你需要位于特别的组中。如果你拥有查看设备节点名的文件权限,你将看到它的拥有者是root,访问权被授予了dialout组中的用户:
你可以使用root账户(通过su或sudo命令)连接到/dev/ttyUSB0设备,也可以添加你的普通用户到dialout组中。要添加你的用户到dialout组,运行:
除非你重启终端会话,否则这将不会在你当前的终端会话中生效。你也可以登出并再次登录进系统,或者重启你的Linux系统。
不要使用Linux连接到串口?
你可以想象作者现在的表情一定是满脸都写着不同意。⊙_⊙不过,我们还是可以给出一些这方面的提示。
Windows和Mac OS X系统需要安装PL2303HXA驱动,你可以从这里下载Windows XP/Vista/7和Mac OS X的相关驱动(Windows XP/Vista/7的驱动链接为:http://www.prolific.com.tw/US/ShowProduct.aspx?p_id=225&pcid=41 ,而Mac OS X的驱动链接为:http://sourceforge.net/projects/osx-pl2303。)。
据供应商称,Windows 8不支持此设备。如果你是一个Windows 8用户,也许这是一个很好的时机可以考虑安装一个双系统并启动到Linux?
至于老生常谈的终端软件,如果你使用的是Windows XP或更老的版本,其会自带一个名为超级终端的程序,你可以使用它连接到串行控制台。如果你使用的是最新版本的Windows,那么你需要下载一个第三方的终端程序,我们推荐你使用PuTTY(http://www.chiark.greenend.org.uk/%7Esgtatham/putty/download.html)。对于Mac OS X,你可以使用screen,用法和我们讨论的在Linux中的用法一样,或者你也可以尝试ZOC(http://www.emtec.com/zoc/)。
现在是时候连接树莓派的UART串行设备了。你需要使用一个支持串行连接的客户端,关于客户端有许多许多的工具,不过最常见的两个是minicom和screen。
Minicom被设计成看上去很像Telix,一个流行的MS-DOS终端程序,它很可能是在你出生之前编写的,我们现在觉得自己都够老了(呃)。它具有MS-DOS的外观和感觉,换句话说,它的风格是旧式的、不清晰且让人困惑的,不过它确实可以工作。如果你要在Fedora中安装它:
或者在Debian/Ubuntu中:
安装好之后,使用minicom连接树莓派UART串行设备,运行:
为了测试效果,重新启动树莓派,当它连接上时,你应该可以看到Linux内核信息向下卷过屏幕,看上去类似于如图1-11所示。
你可以使用Control-A X退出minicom,或者使用Control-A Z进入帮助菜单获得某些有用的帮助。如果你要结束手工配置的mincom,只要保持奇偶校验、数据位为8N1,并禁用软件流控这些设置不变即可,你并不需要进入设置。
图1-11 连接上树莓派UART串行设备的minicom界面
Screen是一个强大的工具,通常用于复用多个虚拟控制台。如果这是一本Linux介绍,我们就会用一整章来介绍如何使用screen。由于这是一本其他类型的书,我们只关注如何将之作为一个串行终端的客户端来使用。
要在Fedora中安装screen,运行:
或者在Debian/Ubuntu中:
安装好之后,使用screen连接树莓派UART串行设备,运行:
要退出屏幕会话,按Control-A K。
Raspbian预配置了UART串行设备作为一个登录功能的控制台,不过Pidora没有这么做。要想在Pidora中将UART串口设备作为一个登录控制台会话,可以运行:
这会立刻将会话打开。如果你已经连接了一个串行线缆,你应该会看到登录提示出现。如果想要让这个登录提示一直出现(且在启动时自动加载),只需要简单地运行:
通过创建到systemd目录树的符号链接,你告诉systemd启动ttyAMA0设备作为一个“getty”或登录控制台。
有趣的串行控制台花絮
“getty”这个名字来自“得到电传(get teletype)”。电传打字机最初是一台使用打字机做输入及打印机做输出并用来作为电报机的设备,但当计算机出现之后,这些设备找到了一个用途,即成为给计算机输入数据的一种方法。同时电传打字机也在20世纪40年代和50年代被广泛用在新闻编辑室中,仅用于“接收数据”,“咔嗒”声响起就表示有新闻“通过线路”传了过来,这就是电传打字机。最终,这些设备成为了完全的串行控制台,这就是我们在Linux中称控制台设备为“TTYs”的原因。
Pidora和Raspbian都把UART串行设备预配置成内核消息的控制台。你可以在 /boot/cmdline.txt文件中看到这些配置:
console值告诉Linux内核启动时往哪里输出消息,kgdboc值在控制台上启动了内核调试。
如果你现在正在进行的项目想要访问UART串行设备,你可能想要从/boot/cmdline.txt文件中移除console=ttyAMA0,115200和kgdboc=ttyAMA0,115200项,并重新启动树莓派。如果你不这样做,你可能会从Linux内核收到串行线路上的意想不到的输出行噪音,而你的程序/项目可能并不准备处理这些输出行。
如果你已经启用了串行设备作为登录控制台,你也可能会希望禁用它。要在Raspbian中禁用,在 /etc/inittab文件中注释掉下列行(通过在行的开头处添加一个#号)
在Pidora上,你只需要简单地删除掉ttyAMA0设备的systemd getty service符号链接,通过运行如下命令即可:
无论是哪个Linux发行版,在做了以上改变后,都需要重新启动让改动生效。
无论是Ubuntu还是Fedora都包括了一个名叫ModemManager的软件,它处理所有种类的调制解调器(modem)设备的设置,这些设备涵盖了从老式的拨号调制解调器到更现代的3G/4G设备。不幸的是,现在有相当多的调制解调器都采用了和我们的USB串行接口线路相同的通用转换芯片(pl2303),从而成为了调制解调器前面的陷阱。
其结果是,ModemManager会尝试访问它(并不断尝试,不断尝试……)。因为它没有办法知道在 /dev/ttyUSB0后面的设备是调制解调器还是盲文终端,或者在我们的例子中,它只是一个树莓派。这可能会造成你无法打开 /dev/ttyUSB0,也可能仅仅造成控制台上出现了噪音。
因为我们知道正在连上的USB设备究竟是什么,所以我们可以告诉ModemManager不用管它,并使用udev规则明确地将我们连上的设备列入黑名单。
以root用户编辑/lib/udev/rules.d/77-mm-usb-device-blacklist.rules文件,在文件底部LABEL="mm_usb_device_blacklist_end"这一行之前添加如下行:
如果你使用的USB串行线与Adafruit线不同,而你正想修复这个问题。你应该可以运行lsusb应用程序(从usbutils软件包)来确定idVendor(供应商id)和idProduct(产品id)字符串(它们在输出中按照XXXX:YYYY这样的语法,这里XXXX是idVendor,而YYYY是idProduct)。
例如,Adafruit USB串行线的lsusb值看起来像这样:
Udev自动检测规则文件的变化,因此更改立即生效,无需udev重新启动。这就是说,有时候你需要重新启动Linux系统来让udev重新读取其规则。无论哪种方式,只要udev读取了它的新规则,USB串口转换设备就进入了它的黑名单,ModemManager自此就会忽略这个设备。
也许你已经注意到Pi缺少了某种电子产品中很常见的东西:电源开关。版本2的B型树莓派对此做了一个小小的修补。
从你的计算机中拿走电源的on/off开关,虽不至于造成彻底的不方便,但肯定不只是造成了你的隐约不舒服这么简单,但这就是树莓派现在的情况。一个简单的修补方法是,不管你手中拿着的是什么主板,使用时都将它插入到带on/off开关的电源插板中。不过对于版本2的B型树莓派主板来说,你还有另一种选择。
这种板的一个新增功能是标记为P6的地方,它很容易被忽视,P6只是主板上GPIO另一边的两个小孔,靠近HDMI端口(参见图1-12)。
图1-12 P6的两个孔
如果你焊接两个排针到这两个孔中(如果你是焊接新手的话可以参考1.15节中的“焊接提醒”相关内容),那么你就有了一个复位开关。如图1-13所示,只需要使用一个金属物体连接这两个针脚就可以短路它们。
短路也可以使CPU从关机状态复位,让Pi开始启动。
图1-13 复位引脚的位置
电源不一定必须是插在墙上的,你有几个提高便携性的选择。
为了给Pi供电,你需要通过B型Micro USB插头提供稳定的5V 700mA的电流。正如其他地方提到的一样,虽然你的手机充电器或其他类似的适配器也可能可以工作,但配置一个专门用于树莓派的电源适配器是个不错的主意。
低于推荐的电源选项
就像在食谱中用鸡蛋替代一切一样,有些选项虽然不是特别推荐,但仍然可以作为一些人的解决方案。例如,通过你的笔记本电脑的USB端口给Pi供电,这不是正式的操作方式,因此我们并不建议,但是我们可以看到它的确可以工作。试图从GPIO送电也不是一个好主意,这部分更多的内容可以参见1.9.3小节“通过GPIO安全地获取电源”。
我们还听说过成功地通过以太网(线)供电的事情,甚至故意通过USB倒灌电流给Pi。还是那句话,我们不将其作为推荐的方法,但是黑客勇于尝试新的东西。只要你安全地安排电气实验,你的最大损失不过是损失了一块35美金的主板,但收获的将是一个好故事;而可能伴随而来的烟雾,只会让你的故事更动听。
但如果你想要的是便携性,那么你需要有一个电池组。你可以认为这些东西是你手机的应急电池,它们有各种优势:形状/大小以及颜色等。不过最基本的,电源和USB端口这两样是给Pi供电所必需的。
为了寻找一个有5V稳压输出的产品,我们使用了New Trent公司的iCarrier(IMP 120D),一个有着两个USB端口和一个on/off按钮的12000mAh的电池组。根据pi的使用情况,足够给它供电至少14~16小时或更多。
这种便携式电源是本书中有些技巧的关键,最值得注意的是技巧44,便携式电源的存在加强了项目的其他部分。而最坏的情况下,它可以作为你的手机的“多余果汁”。
如果你还不是使用万用表的高手,你很快就会是。Pi的项目都需要使用电源,而Pi提供了一种方法,可以让你在主板上检查电源。
假如你手边没有几个电源可以做交替检验,或者你决心要获得一种特别的/不寻常的电源工作方式,你将需要检查树莓派的电压。
树莓派上有两个测试点是专为此需求而设计的,如图1-14所示,TP1是5V测试点,TP2是地。
它们的位置在A型主板上略有不同,但也在相近的地方,但是它们依然在主板上标注着TP1和TP2这样的小小的白色丝印文字。
要测试电压:
1.插入你希望使用的所有外设,给Pi(以及周边设备)上电。
2.将你的万用表测量范围设为20V。
3.将万用表的红色表笔接触TP1,黑色表笔接触TP2(如图1-15所示)。
Pi要求5V电源质量较好,但允许其电压有+/-0.25 V左右的公差。这意味着你看到的最小电压在4.75V左右,但最好应在4.8V以上。低于这个值,你的外设可能会功能失常或者甚至连Pi都根本启动不起来,Pi还可能会自动重启。
你也可以试着拔掉各种外设、使用不同的显示器、去除以太网等等,在这种种情况下重新测试看看结果变化。
图1-14 测试点位置(又名“电子视力测试”)
图1-15 测试电压
这是电!
这种情况是完全有可能的:树莓派是你第一次如此接近你的电子产品的电相关部分。如果确实如此的话,所有和电力工程相关的这类东西都值得一读。不过在最基本的层面上,你应该要理解这三个术语以及它们之间的关系:
电压
两点之间的电荷差
电流
电荷流动(横截面上)的比率
电阻
材料倾向于抵抗电荷流动(电流)的能力
如果你知道了它们中的两个,就可以根据欧姆定律计算出第三个值。该定律的表达式为V=I*R,或者表述为电压(伏特)等于电流(安培)乘以电阻(欧姆)。讨厌数学的人可以从在线的欧姆定律计算器网站(http://www.ohmslawcalculator.com/ ohmslawcalculator.php)上的方便工具中得到帮助。
记住这一点,当发生有趣的事情而你又不知道为什么时,很可能值得你去做一次快速的电源检查。
你也可以使用Pi的测试点测试它的自恢复保险丝。自恢复保险丝是一种击穿后可以修复自身的保险丝,树莓派上至少使用了一个这种保险丝,它在板子的背面标注为F3,如图1-16所示。
图1-16 靠近SD卡槽的自恢复保险丝F3
早期的Pi在USB端口上也有两个自恢复保险丝,现在已经被0欧姆电阻取代了。它们被称作F1和F2。
如果你把Pi翻转过来并将SD卡槽朝向你,你可以发现F3就在SD卡槽的 左边。
自恢复保险丝需要花多长时间“痊愈”是不确定的,可能多达数天,但也可能被永久损坏。尽管它们可被更换,但你首先需要测试你的F3自恢复保险丝是否有问题。
1.取出SD卡和所有的外围设备,不像测试电压时需要将它们都插上。
2. 将主板背面向上。
3. 使用同样的设置(20V范围),将一只表笔接触TP2的背面(因为主板被翻转了),另一只表笔接触F3朝向SD卡槽的那一端的金属部分。测试结果可以告诉你保险丝是否有电。
4. 接着,将一只表笔接触TP2的背面,另一只表笔接触F3朝向板边的一端的金属部分。测试结果可以告诉你是否有电压进来。
F3上的读数比进来的电压低0.2V左右是正常的,但如果超过这个值,则表示自恢复保险丝有问题。
你的树莓派需要更多一点的内存吗?Swap可以让你交换磁盘空间和内存。
Linux长久以来就包含了swap的概念,其核心是在RAM和磁盘之间移动内存页的能力。在实际应用中,这种能力给操作系统提供了更多的可用内存(以磁盘空间的成本)。因为B型树莓派只有512MB内存,增加swap文件(或分区)以提高可用内存的想法很吸引人。
Swap的危害
在我们开始之前,你应该要了解一下这种方法的缺点。Swap的速度只是存储设备的写入速度,同时这也是一个高度写密集型操作。从实用的角度来看,这就是说,如果你增加了树莓派的SD卡中的交换空间,这将造成整体磁盘的性能显著下降,特别值得注意的是它还会缩短SD卡的寿命。
因为树莓派的整个操作系统都运行在SD卡上,我们强烈建议你不要将swap文件或分区放置在SD卡上。这些缺点也适用于连接到树莓派的USB闪存驱动器,因为它们也是基于闪存的存储设备,添加swap文件到USB闪存驱动器将造成同样的整体性能下降和寿命缩短。如果你真的想添加swap,最好是通过连接在SATA到USB转换器之间的一个实际的外部硬盘驱动器上来实现。
Raspbian预配置中通过dphys-swapfile文件启用了100MB swap文件。你可以通过编辑/etc/dphys-swapfile文件来修改此交换文件的设置,它只有一个选项:CONF_SWAPSIZE。如果你想增加交换文件的大小,可以把该值从100改为一个更大的值(取决于你的SD卡上的可用空间)。或者,你也可以通过将该值改为++0来禁止这个选项。
任何更改值都不会立刻生效,直到你运行如下命令:
Pidora在默认第一次启动时配置了512MB的swap(除非用户另有指定),这个文件位于/swap0目录下,并通过rootfs-resize服务在/etc/fstab中配置。
对于其他的Linux发行版(或者放置一个交换文件到一个不同的位置),你需要手工创建交换文件:
上述命令将在/path/to/swapfile位置生成一个1GB的swap文件(1024×1 M = 1 GB),你需要将这个位置改成你的交换文件的实际位置。要在启动后自动启用这个swap文件,可以在/etc/fstab文件中添加一个新行:
你可以在free命令的输出中看到更多的内存(作为swap):
[1] http://gparted.sourceforge.net/。
[2] 此处原文应有遗漏,如果要得到下面的信息,需要执行下面的命令:$ cd /dev && ls –l | grep mmcblk0。所以译者在此处补上了这个命令。
[3] Headless模式是系统的一种配置模式。在这种模式下,系统缺少了显示设备、键盘或鼠标。
[4] Flourinert是3M的电子冷却液体的商标品牌。
[5] http://thepihut.com/products/7-port-usb-hub-for-the-raspberry-pi。
[6] https://www.modmypi.com/shop/raspberry-pi-accessories/New-Link-4-Port-USB-Hub-%28USB-2.0-with- Mains-Adaptor%29。
[7] http://shop.pimoroni.com/products/pihub。
[8] 作为形容词,weird的意思是怪诞的,超自然的; 奇怪的,奇异的等。
[9] 美国电影《神秘博士》。
[10] 就是说,输不输出“完美的”5V,完全看它的心情。
[11] http://www.adafruit.com/products/501。
[12] 显然,你的USB线缆一段是Micro B型接口,本来是插在树莓派电源接口上的,现在接一个Micro B型设备。而另一端是USB标准A型接口,它的地直接可以测量。
[13] http://www.bitwizard.nl/catalog/product_info.php?products_id=134。
[14] 原文是dymystify,疑为demystify。
[15] http://www.doctormonk.com/2013/02/raspberry-pi-and-breadboard-raspberry.html。
[16] http://learn.adafruit.com/downloads/pdf/adafruit-pi-cobbler-kit.pdf。
[17] https://www.adafruit.com/products/914。
[18] http://www.adafruit.com/products/1105。
[19] 让文字正向。
[20] http://wiringpi.com/。
[21] http://bit.ly/1eWGDyA。
[22] http://www.adafruit.com/products/954。