重磅推荐
【前言】
前 言
现代计算机系统及互联网络的发展取决于人类的交互和实践活动。人们能够通过各种方式,譬如敲击一下键盘、按下一个录制按钮、制作一幅数码图画或扫描一个条形码来获得各种数据。然而人类获取数据的能力似乎还不是那么完美,因为人的视野总是有限的,还缺少足够高的精确度和充足的时间,所以人类从现实世界中获取数据的能力还不甚理想。那么怎样做才能弥补人类这种获取和储存数据的不足之处呢?这一点显得至关重要:如果令计算机系统保持与数据之间的良好联系,而且不必依赖于人与人之间的互动就能有效地获取数据,那将会是一种十分理想的办法。即使计算机系统(因数据量太大)变得乏力无能或者索性宕机,那也只需要对它们进行替换或者修复就可以继续工作下去。因此,使用一种新式的计算机系统,它不依赖于人与人之间的互动,具有自动获取数据的能力并且能把这些数据上传到互联网上,这将会是非常有利和高效的。这种系统的另一个术语叫做“物联网——IoT”,它就像互联网所做到的那样,对改变世界具有极大的潜力。或许,在其开放性源代码及我们所涉及的领域中所带来的大量使能技术方面,物联网将拥有更为巨大的潜力。
将来,会有很多装置和设备连接到物联网上,它们中的每一个都需要有一个IP 地址。因此当前的IPv4 所规划的地址空间将被耗尽,从而不能再满足需求。IPv6 肯定要被用来提供足够大的地址空间,它将因物联网的发展而快速地为世人所接受。
尽管物联网行业可能还处于早期阶段,但是该行业似乎已经充分认识到物联网时代的到来,而且几乎每个人都在为此做好准备。在硬件领域,物联网所需要的大量低成本嵌入式处理器已被开发出来,为之打下了基础;用于智能手机的CPU 和可携带(或可穿戴)的安卓器件也会像处理器那样将使物联网进一步得到壮大。根据*近对大多数技术专家和互联网用户的调查,被调查者中以压倒性的多数表示,物联网、嵌入式技术和便携式计算在2025 年前后将会得到非常广泛的应用。
更多先进的性能和有用的特征将被注入物联网之中。例如,环境智能或人工智能以及自主控制等这些原本不属于物联网的技术单元,都将被融于其中,从而能进行预测并以非确定方式发挥作用。这些设备中的机器学习算法将在收集数据和与其他设备,例如位于一个开放网络中的智能实体(Web 服务,SOA 组件)、虚拟对象(形象化符号)进行交互方面得到应用。
在一个非常巨大的领域内,包括家庭自动化、环境感知、智能产品管理、社会互动创新及智能仪表等方面,物联网将会大有用武之地。而且应用的范例不胜枚举。从根本上说,其目标就是要把各种各样的数字化信息连接起来,并且把所得到的全部数据上传到互联网的服务器中。在那里有一大批计算机,这些数据将被用于自动化监控和分析并为人类服务。智能服务器还能发送监控和分析结果,把响应返回到物联网设备,以指导下一步的行动。
这样,物联网,或者把它说成是“一种可以替代人类的复杂感知和认知功能,甚至能够克服人类的局限性而进行自主活动的智能系统”的实现即将成为现实。它能够在很多方面帮助人类生活得更为便利和简捷,而我们自己恰恰置身于如此广泛事件的**。
低成本的嵌入式CPU 和嵌入式操作系统将成为构建物联网的基础。在本书中,我们将以Raspberry、Linux 系统及基于安卓的智能手机和便携式设备的开发为重点进行介绍,并进一步为物联网的开发打下基础。之所以看好Linux 而并非所有的操作系统,主要是看中了它的开放式源代码和广泛的适用性。
当前*为流行的低价位嵌入式系统是Raspberry Pi(一款基于Linux 系统的个人电脑系统),在该领域内已经开发出一大批产品,我们则重点介绍美国博通公司基于该系统开发的ARM(Advanced RISC Machines)微处理器;还有可用于物联网的由中国君正集团首创的基于MIPS 的嵌入式系统——龙芯。尽管它在综合开发方面还滞后于Raspberry Pi,但考虑到未来的因素,龙芯还是具有相当好的开发前景。所有这些都是作为基于传统的微控制器系统运行在Linux 之上的,而且它们在从事物联网开发的软件能力方面没有太高的要求。
因为物联网是一个整体的生态系统,所以其自身拥有大量的使能元素,其中包括内嵌操作系统的嵌入式系统、传感器件、网络、移动设备、计算机及互联网。位于API 后端的服务器不仅能处理所捕获的数据,而且还具有将这些数据上传到物联网设备上的能力。
在本书中,我们尝试把构成物联网整个生态系统的各种不同形式的组件集成起来,其中包括API/Web 服务,诸如当今到处流行的苹果手机(Iphone)和安卓移动系统以及由Raspberry-Pi 组成的控制器系统,它们能够控制位于局域网上的各种类型的传感器。移动系统和Raspberry-Pi 之间可以通过TCP/UDP 套接口协议进行通信。如果在每个Pi 的内部设置了Web服务器,那么每个Pi 系统又能被局域网外部的信主访问,这样,每个Pi 就可以独立地访问位于世界上任何地方的控制器。我们还将讨论在Raspberry Pi 的**布局之中使用BATMAN工具,这是一种包容于Debian Linux 操作系统内的、先进的二层路由算法的无线网网格。本书还将涉及一个包含上百个Pi 的实际商业项目:一个处于大型商业建筑之中的大型网络的每个Pi 单元都会成为其中的一个网格节点,并具有令路由数据包贯穿整个网络的能力。我们不能采用专用网络中继的方法来覆盖这种大型网络,唯有采用低价位的Pi 来实现才有意义——因为物联网只有低成本才能更实用。
在将来本书再版的时候,我们计划把机器学习算法作为新的内容,因为这是物联网很多应用的重要内容。机器学习使能系统具有一定的智能以及根据先前的经验来预示后果的功能,它能对系统如何控制物联网中的设备有所帮助,从而不需要人的更多介入就能管控它们并纪录数据。
至于中国,在未来几年内能够在物联网方面走到多远,这不仅取决于运行在嵌入式Linux上的低成本CPU 的价格,而且还依赖于在系统中接入各种类型的传感器,包括运动传感器、温度传感器、红外传感器、湿度传感器、压力传感器等以及光电驱动元件,Wi-Fi 适配器,电动驱动器,各类运算放大器及大量的模拟芯片。就像中国计划到2030 年,每年投入50 亿美元的计划来夯实它的半导体行业基础,以成为世界**的半导体输出大国那样,物联网在中国的实现和发展也将指日可待。
当前,由于国际互联网的迅猛发展及全球的高度信息化,高等教育的国际化已成为国内众多普通高等本科院校的迫切需求;编写具有中国特色,又逐步与发达国家接轨的教材,是中国高等学校教学改革中的一个新课题。为此,在中国电力出版社的支持下,作者在长期从事Linux 系统的研究和基于Raspberry Pi 的物联网技术应用开发的基础上,编写了这本英汉双语教材。
由于本书为双语教材,为避免全书篇幅过多,对书中各章内的插图及例程代码采取了中英文页面共享的表达方式,也就是说,同一章节位于英、中文页面内的代码都是做了编号且连续的。在具体内容上也并非是中英文的对等互译,而是强调基本内容的一致性和中英文词义、语义的准确性,从而达到中英文优势互补的效果。英文叙述中尽量采用常用的词汇和简单的科技语法,使读者容易阅读理解,使本书具有更好的可读性。
本书内容共包括6 章。第1 章HTTP API 服务器运行机制,首先介绍了HTTP API 服务器的工作原理,所公布的源代码具体展示了HTTP API 的运行机制;第2 章带套接口的内联网通信编程,重点讨论了内联网通信中的关键内容——套接口的编程实现;第3 章Web 服务器与Web 页面,详尽地描述了Web 服务器的架构及主要功能;第4 章树莓派系统,重点介绍了树莓派系统的硬件、基于Linux 系统的廉价且便携式电脑的基本架构、主要功能及与嵌入式设备的连接方法;第5 章Linux 内核和应用程序编程接口,简要地介绍了Linux 的内核,数据结构、链接清单等基础知识,通过代码展示了遥控设备单元的读取及复制更新的方法等内容,以及第6 章携带树莓派的无线网格网,系统性地展示了以树莓派为主要连接对象所构建的物联网系统集成的方法。全书内容新颖、充实,重点突出,特色鲜明;每章中的代码均具有特定的功能,作者对那些重要的代码行都加注了英、中文注释,以帮助读者更好地理解其作用。
本书由工作在美国加州硅谷的软件工程师Norman Yu 先生撰写了英文全文,并无私地公布了与全书内容相关的全部源代码;上海师范大学天华学院朱怀中博士、崔芊老师和齐从谦教授对全书进行了编译和注释(齐从谦负责导言和第1、2、6 章及附录,朱怀中负责第4、5章, 崔芊负责第3章)。方躬高级工程师对全书插图进行了精心的编辑和规范化处理,全书统稿工作由齐从谦完成。
本书内容新颖,重点突出,特色鲜明,书中具体内容和实例特为高等学校工科类计算机科学与技术、网络工程、通信工程、电子信息技术、汽车电子、电力电子、航空航天等专业的广大学生和教师度身定做。可以作为上述各类专业的教学用书,也可以作为计算机、通信类职业技术培训教材以及相关行业广大工程技术人员的参考用书。
由于编者水平有限,加之Linux 和物联网本身博大精深,书中难免有错误和疏漏之处,敬请各校师生及广大读者批评指正。
Norman Yu、朱怀中、齐从谦于上海嘉定天华园
【目录】
Content
目 录
Preface
前言
Chapter 1 HTTP API Server 2
第1 章 HTTP API 服务器运行机制 3
1.1 Inside Look of an API Server 4
1.1 从内部窥探API 服务器 5
1.2 HTTP API Call to API Server from Web Server 16
1.2 来自Web 服务器网页的HTTP 对API 服务器的调用 17
1.3 HTTP API Call to API Server from Iphone 22
1.3 由Iphone 对API 服务器的HTTP 调用 23
1.4 HTTP API Call to API Server from Android 26
1.4 来自安卓手机的HTTP 对API 服务器的调用 27
1.5 HTTP API Call to API Server from Embedded System (Raspberry Pi) 30
1.5 来自嵌入式系统(树莓派)的HTTP 调用API 服务器 31
1.6 Additional Information on Apache Server 32
1.6 关于Apache 服务器的补充信息 33
Chapter 2 Intra-Network Communication with Socket Programming 40
第2 章 带套接口的内联网通信编程 41
2.1 TCP Transmission 40
2.1 TCP 传输 41
2.2 iOS TCP Server Sending Data 42
2.2 iOS TCP 服务器发送数据 45
2.3 iOS TCP Client Receiving Data 48
2.3 iOS TCP 客户机接收数据 49
2.4 Android TCP Server Sending Data 50
2.4 安卓向TCP 服务器发送数据 51
2.5 Android TCP Client Receiving Data 54
2.5 安卓TCP 客户机接收数据 55
2.6 UDP Transmission 56
2.6 UDP 传输方式 57
2.7 Raspberry Pi UDP Broadcasting and Receiving Message 58
2.7 树莓派UDP 广播和接收消息 59
2.8 Android UDP Server Broadcast Message 60
2.8 安卓UDP 服务器发送广播消息 61
2.9 Android UDP Client Receive Message 64
2.9 安卓UDP 客户端接收数据 65
2.10 Combining Both UDP and TCP 66
2.10 UDP 和 TCP 的结合 67
2.11 Enable Bluetooth on Raspberry Pi 66
2.11 启用蓝牙的树莓派 69
Chapter 3 Web Server and Web Page 76
第3 章 Web 服务器与Web 页面 77
3.1 Web page 76
3.1 Web 网页 77
3.2 Template Page (index.php) 82
3.2 模板页面(index.php) 83
3.3 Functions.php 文件的代码 89
3.3 Inside Functions.php 90
3.4 Home.html 96
3.4 主页 97
Chapter 4 The Raspberry Pi System 112
第4 章 树莓派系统 113
4.1 Introduction to Raspberry Pi 112
4.1 树莓派简介 113
4.2 The Broadcom chipset 116
4.2 Broadcom 芯片组 117
4.3 WebIOPi, Controlling GPIO from the Web 120
4.3 WebIOPi——在Web 中控制GPIO 121
4.4 Python (Development Language for Raspberry-Pi) 126
4.4 Python(树莓派开发工具)简介 127
4.5 Design Example of using WebIOPi 142
4.5 使用WebIOPi 的设计实例 143
4.6 Build customized OS for Raspberry Pi 154
4.6 为树莓派建立定制的OS 155
4.7 Exporting GPIO from sysfs 158
4.7 从sysfs 中导出GPIO 159
4.8 Expansion of GPIO using I2C 160
4.8 使用 I2C 的GPIO 扩展 161
4.9 Setting up a simple intranet 162
4.9 设置一个简单的内联网 163
4.10 GPIO Motion Sensing with PIR 166
4.10 带有PIR 的GPIO 运动检测 167
Chapter 5 Linux Kernel Internals and API 168
第5 章 Linux 内核和应用程序编程接口 169
5.1 Double Linked List Data Structure 168
5.1 双向链表的数据结构 169
5.2 RCU Read Copy Update 172
5.2 读取复制更新 173
5.3 net_device Structure 174
5.3 net_device 结构变量的定义 175
5.4 sk_buff Structure 180
5.4 sk_buff 结构 179
5.5 The sysfs Filesystem for Exporting Kernel Objects 182
5.5 sysfs 文件系统输出的内核对象 183
5.6 Dummy Net Driver Example 184
5.6 虚拟网络驱动程序举例 185
Chapter 6 Wireless Mesh Network with Raspberry-Pi 188
第6 章 携带树莓派的无线网格网 189
6.1 Issue of using micro-controller and Pi solution 188
6.1 多重微控制问题及其解决方案 189
6.2 Application of Batman-adv in Raspberry-Pi 190
6.2 Batman-adv 在树莓派中的应用 191
6.3 Tables 192
6.3 有关表格 193
6.4 The Files 194
6.4 文件 195
6.5 OGM Packet Format and Sending 196
6.5 OGM 报文格式及发送 197
6.6 Background Information 198
6.6 有关背景知识 199
Addendum 222
附录 222
A1 Designing of a Messaging System 一个网络聊天系统的设计 222
A2 Uploading Picture/Audio to API Server 上传图片和音乐到API Server 234
References 241
参考文献 241
【书摘与插画】

返回顶部