前言
Preface 前  言树莓派是一种信用卡大小的单板计算机,能提供大量开展研究和发明创造的机会。看到一个孩子从零开始学习编写Python代码,制作一个鸟笼并在互联网上传输实时视频来检查鸟是否得到了食物,这种事情真是让人惊叹。记得我还是个孩子时,曾经将乐高玩具连接到直流电动机和电池上,效果很迷人。在那时我无法想象代码中的逻辑,也没有机会为自己的项目编写代码,然后用手机来控制乐高玩具运动,但现在我很幸运能有机会介绍这类项目,为那些真正渴望创造一些东西来改变周边世界的年轻创客提供一个起步平台。

世界正迈向新时代,技术正在改变人们日常的需求和习惯(通过一个简单的界面就可以实现),这给予了我写一本有关树莓派传感器书籍的动机。世界充满创造性,我认为在你开始理解和懂得一些基础知识并应用相应逻辑时,创造灵感就会涌现出来。在不同的网站上有大量的树莓派知识和项目,任何一个人都能尽其所能地获取这些知识和项目。我认为网站上的知识通常都是不完整的,它能让我们快速开始创建项目,但不能使我们明白项目背后的原理。

众所周知,即使没有深入研究过电子设备和通信协议,你也可以在树莓派上编写代码并创建令人惊叹的项目。我周围的同事经常需要在树莓派平台上编写代码,并将传感器连接到树莓派上,他们可以在很短的时间内就编写出有关人工神经网络的Python代码,但到了连接硬件时就徘徊不前。我认为对电子学有基本的了解能帮助那些想在树莓派之类的平台上进行程序开发的精英走出上述困境。与此相反,硬件开发人员能够连接传感器,保证设备引脚上具有正确的电压电平,但到了编写代码之时,他们就需要帮助了。

我发现树莓派最有趣的地方在于我能使用硬件元器件和电烙铁,并且能为硬件编写代码让其工作。本书为那些希望了解各种硬件和软件如何协同工作以及希望在树莓派上开发传感器、物联网项目的创客提供了入门指南,在我们期待将周边所有的东西连接成一体之时,科技将会有大的发展。

物联网以更好的用户体验为出发点,为收集和分析数据开启了一个新世界,传感器阵列输出的大量数据都是由传感器节点生成的,在这种背景下,树莓派向我们提供了从简单的项目(例如本书介绍的将数据从开发好的传感器站上传到互联网)入手的机会,这是我们创建物联网项目的第一步。另一件有趣的事是随着B型树莓派2的出现,开发人员能够拥有足够强的处理能力,可在树莓派上完成计算密集型算法,因此本书用一章来讲解图像处理。对初学者而言,想向他们解释清楚图像处理相当困难,但是至少我试着为读者提供一个自发进行图像处理的简单起点。

本书介绍了5个不同项目,它们是用不同方法创建电子学项目的学习起点,我在准备这些项目时遵循的方法相当有趣,这也是我从事复杂硬件设计时所遵循的方法。虽然我并不依赖于面包板(因为我从事的工作大多都是高速电路设计),但本书介绍的一些小型项目原型可以很容易地在面包板上实现。第一步,购买最好的硬件元器件(最好针对面包板测试进行了通孔),在代码不能执行或者无法给出正确结果时你能依靠这些硬件元器件解决问题。提前准备好一个框图并考虑在硬件和固件设计期间会用到的每个元器件。第二步,请仔细阅读要用到的电子元器件的数据手册,确保每个元器件都能满足设计要求。第三步,将电子元器件连接到面包板上,并进行彻底检测。最后,在硬件设置稳定后,编写代码(或固件),并且为了获得更好的性能,可能还要不断改写代码,删除不必要的变量及不可达的代码或循环、处理中断、定义处理器的休眠时间和看门狗、管理合适的内存片段,以避免程序崩溃。但是本书涉及的都是最简单的代码,并不会深入研究嵌入式程序开发。在树莓派上安装代码库可以减少程序员常犯的错误,只要调用一个函数,就能在后台执行所有的内置调用,这得感谢树莓派代码库的开发者,有了这些代码库,我们就能编写出更健壮的代码(有意地或无意地)。当准备编写实例代码时,建议你将其先拆分成几个部分。

读者在创建从温度-湿度-光线传感器中获取数据的项目时,可能会遇到一些困难。首先要获取温度和湿度值,然后再针对光线传感器编写代码,如果这两段代码都能给出正确的值,那么请记下它们,最后通过函数调用将这两段代码合并到一起。

本书的写作思路是:首先介绍项目的设置,然后描述项目的目的,最后描述硬件实现的所有细节。在某些章节中,软件会被拆分成若干部分,然后再将它们合并起来,这样做是为了避免让读者感到单调。书中某些章节的理论知识篇幅较长,对此,我深表歉意,但我敢肯定读者会喜欢阅读这些理论知识,并且能从中学到很多东西。

欢迎大家在GitHub上有关本书的主题下提问、提出改进意见和建议,网址是:https://github.com/rushigajjar/raspberrypisensors,所有人都可参与。

本书内容第1章介绍了市面上可找到的所有型号的树莓派,包括最新发布的B型树莓派2;讨论了安装操作系统的方法以及几种有趣的将树莓派接入互联网的方式,然后我们在树莓派上执行了用Linux终端、Linux shell脚本、Python和C语言编写的若干代码。

第2章介绍了电子学的基础知识以及电子设备的通信协议,更加有趣的是,用shell、Python和C语言对GPIO进行了若干实验。

第3章介绍了如何在树莓派上设置超声波传感器,以及如何小心地处理各设备上不同的电压水平,还编写了一段让超声波传感器运行起来的代码,并针对视力不佳的人开发了一个避障系统中的辅助工具。

第4章教你如何在市面上选择可用的传感器,然后实现了温度-湿度-光线传感器所需的硬件和软件设计,以使家用电器自动化。

第5章介绍了如何连接模数转换器和一组传感器,我们用串行通信协议为树莓派创建了一个传感器站,从而可以使用所构建的通用软件来获取任意与树莓派连接的传感器中的数据。最后将获取的数据存储在一个日志文件中,供分析使用。

第6章对物联网和传感器节点进行了研究,在第5章的传感器站的帮助下,我们将数据上传到在线电子表格中,从而实现了一个实时图表,同时还可以在电子邮件平台上收到紧急电子邮件。读者在完成自己的项目之后,可以将传感器数据发送至rushi.raspberrypisensors@gmail.com。

第7章介绍了图像处理的基础知识,以及成功安装OpenCV库的方法。我们用摄像头开发了一个IP探头,将这个IP探头安装在后院中,可观看人类的日常活动的实时视频。进一步,我们在OpenCV中编写了一段运动检测代码来检测特定区域内的人类运动,并捕获即时警报下的图像。

附录是需要购置的硬件元器件清单,便于读者执行本书所介绍的制作任务,从第2章开始就需要用这些元器件来测试我们所编写的代码,你可以带着这张清单去你家附近的电子销售商处购买。

阅读本书的要求除了必备的硬件元器件之外,用树莓派完成书中的任务时没有特别的要求!你可以将树莓派连接到安装有Linux、Windows或Max OS X操作系统的个人计算机上。任何能在市面上找到的任意型号的树莓派(A+型、B型或B+型树莓派1以及B型树莓派2)都可以用来测试代码。在阅读第3章以及后续章节之前,可先参阅附录,准备好硬件。

本书的读者对象对于想用树莓派创建不同项目的硬件发烧友而言,本书十分理想。本书的读者对象是具有编程经验,尤其是具有Linux、C语言和Python编程经验的人,但又不局限于这类人群,不具备编程知识的读者也可以从本书获得必要的知识并立即开始项目开发。无论读者是否具有编程经验,本书都准备了一些电子学相关的最新概念,这些概念对于用树莓派进行硬件编程十分必要。

本书的约定你在本书中会看到若干不同的文本样式,这些样式用于区分不同类型的信息。下面是这些样式的一些示例,并对样式的含义进行了解释。

代码块如下所示:

命令行输入或输出如下所示:

新术语和重要词则用黑体表示。你在屏幕上的菜单或对话框中看到的文字会像这样:“用键盘在配置设置项中选择Enable Camera选项。”

警告或重要的注意事项显示在这样的文本框中。

技巧和窍门显示在这样的文本框中。

读者反馈时刻欢迎读者的反馈,我们也十分想知道你对本书的想法—喜欢哪些内容、不喜欢哪些内容,读者反馈对于我们改进书籍并让你从中得到更多的收获非常重要。

客户支持既然你已经成为Packt出版社的尊敬读者,我们就应该告诉你一些事情,以便你在购买本书的同时获得最大的价值。

勘误虽然我们已经非常谨慎,尽力保证书中内容的正确性,但仍然会有错误出现。如果你在我们的任何一本书籍中发现了错误—可能是文字错误,也可能是代码中的错误,请告知我们,我们将不胜感激,这样做可以减少读者的挫败感并减少本书的错误。如果你发现了错误,可以通过以下方式提交它们,访问http://www.packtpub.com/submit-errata并选择对应的书名,然后单击errata submission form链接,输入错误的详情。一旦你提交的错误修正意见得到确认,那么你所做的勘误就会被接受并上传到我们的网站或添加到相应书籍Errata部分已有的勘误表中,你可以通过访问http://www.packtpub.com/support选择相应书名来查看已有的勘误表。

问题如果对本书的内容有任何疑问,请向questions@packtpub.com发送邮件,我们将竭尽所能解答你的疑问。

致  谢 Acknowledgements首先我必须向组稿编辑Richard Harvey表示感谢,我从来不知道自己能就“树莓派传感器”这样吸引人的话题写出一本书来,在我进行写作之前,他给了我机会和大量的支持、鼓励。感谢他能从芸芸众生中选择我作为本书的作者,并鼓励我投入到写作当中。

还要感谢文字编辑Natasha Dsouza和Owen Roberts,你们总是能在我陷入困境时助我一臂之力。在我撰写本书中间章节时由于巨大的工作压力拖延了进度,感谢他们当时的理解和协助。特别要感谢Natasha,她把大把时间都花在了编辑本书的内容上,梳理文字,并且一直支持我写作。

然后要感谢技术文案David Alcoba、Siddharth Bhave和Cédric Verstraeten,由衷地感谢你们花费宝贵的时间来对本书进行技术审查,并针对本书内容提出有益补充和宝贵意见,使得本书更能吸引读者的眼球。由于采纳了你们的宝贵建议,本书变得更加专业了。

我怎么能忘了Shiny Poojary以及对本书进行技术编辑并剔除书中错误内容的团队呢?他们完全改变了本书的面貌。感谢Shiny Poojary持续不断的支持,也感谢她为能按时校订完本书而进行的孜孜不倦的工作,多亏她,本书才得以付梓。我还要感谢Packt出版社直接或间接参与本书出版项目的员工,感谢他们的所有工作。

感谢我的朋友、教授和同事。我要感谢所有已成为我生命一部分的朋友给我带来的快乐、对于我写作本书给予的支持以及在开始写作之前给我的美好祝愿。感谢韦洛尔理工大学的教授们,尤其要感谢Arun Manoharan博士就如何成为一名作者传授给我的为数不多却大有裨益的真知灼见。另外,我在Leaf科技有限公司的同事总是从我这里拿走有关本书的最新资料并鼓励我加入令人信服的内容。

最重要的是,要对我的父母表示由衷的感谢,尽管在写作本书的所有时间内我都无法和他们待在一起,但他们每天都会咨询本书的进度并十分期待本书成形。



按 Ctrl+p 打印本页】【关闭