物联网开发重新定义了“全栈开发”的范围。Python作为一门快速发展的语言,已经成为系统集成领域的优选语言之一,其可覆盖从电路逻辑设计到大数据分析的物联网端到端开发。各领域开发者可以利用Python交叉涉足物联网设备、边缘计算、云计算、数据分析的工程设计。
本书尝试让读者建立物联网设计的整体概念,从基础概念开始,到相关技术选型、开源工程、参考设计与经验分享。无论是物联网领域的创业者,还是系统架构师,都可从本书中获得灵感。本书对于嵌入式开发领域的开发者尤具学习价值,利用Python可加快开发迭代速度、降低开发成本,并可以基于嵌入式Python建立完整的物联网软硬件生态。
精准:单一语言+完整工具链+主流云服务+可扩展系统 宏大:设备端+应用端+服务器端+数据端
刘凯,服务于微电子行业二十余载的资深工程师。曾在飞利浦半导体(即NXP恩智浦半导体前身)任资深工程师,从事软、硬件开发与产品设计等工作,有用汇编/C/C++开发嵌入式系统固件、用Perl/Python脚本做开发支持工具、用PHP/Java/Python做设备云和Web应用的丰富经验。现作为独立系统集成开发商,专业从事物联网相关项目设计和咨询服务,主攻嵌入式、RFID、微控制器、物联网、WSN、Linux、Python、开源等领域。
本书讲述如何以Python为主要编程语言,实现“从芯片到云端”的物联网应用系统快速开发和系统扩展。通过阅读本书,读者可以充分体会Python作为一门全栈开发语言,是如何在物联网的设备端、应用端、服务器端和数据端环节中发挥作用的。
编写本书的初衷是为了让准备或者已经从事物联网开发的读者能够通过Python语言缩短相关学习和开发周期;同时与大家分享一些经验教训,希望能够让读者在具体开发中回避各种“坑”。这不仅对开发团队,对于企业甚至投资者决策也是有益的。
大多数物联网相关书籍比较关注物联网系统和服务器端设计,但是物联网与互联网的设计差别在于:物联网系统设计受限于有限的设备计算能力、巨大的连接数量、独特的数据特征。所以完整的物联网系统设计需要考虑的要素比互联网更多,需要掌握的知识面既广且深。如何在短期内实现系统上线,并安全、平滑地实现规模扩展一直是大家思考的问题。开发者可以采用的对策如下:
减少开发语言和工具种类。
使用成熟的参考设计和编程框架。
使用主流的云计算服务和可扩展的系统设计。
开源硬件、软件设计和并行开发模式。
有许多事情“开弓没有回头箭”。物联网的最大特点是大量的定制需求,而且上下环节的衔接往往存在技术依赖性,某个环节的决定往往会对其他环节的实施带来很大的影响,并可能造成开发团队间的责任推诿。这需要系统设计者事前做许多调研功课。笔者专注于设备域和服务器域,但本书力求带来更宽的视野,包括物联网相关的应用、产品和生态,介绍不同的系统架构和云计算服务,并在不同的技术选项中推荐几种比较适合工程实施和实际需求的主流组合。
在收集资料的过程中,笔者发现Python作为一门通用编程语言,应用范围非常宽泛。相信本书内容中有许多物联网相关的Python应用是出乎大多数人意料的:
支持SPICE/IBIS仿真与VHDL设计和电路的自动测试。
可以在许多流行的8/16/32 MCU上运行,包括AVR/PIC/ARM/MIPS。
支持绝大多数MCU/MPU/CPU的外设和工业总线,而且编程接口非常灵活。
可以在各种类型的Linux上运行多种Python运行环境,包括CPython、Jython和各类嵌入式Python。
通过Jython运行于Java Runtime中,与Java类库完美结合,切入企业级应用和大数据分析。
可以跨平台开发桌面应用和手机应用。
大量现成的网络安全和分析工具,可帮助开发者定位通信报文错误,或寻找系统安全漏洞。
提供大量的辅助工具,包括文档、软件工程、虚拟仪器、媒体处理等,为此笔者特地预留了第8章进行罗列。
物联网网关、服务器架构、数据分析和可视化、虚拟设备、通信协议定制等领域开发效率超高。
从SPICE/VHDL开始,到服务器,Python实现了“从芯片到云端”的全栈开发。笔者希望这些内容和案例能够帮助开发者在启动项目前对开发有全局性的了解,并做出正确选择。
同时,本书的写作过程采用了Python相关工具,也是“全栈开发”实例之一。
格式:将Python文档中常见的reST/Markdown作为基础书写格式。
编译:采用Sphinx将reST章节编译成流行的HTML网页、ePub电子书籍。
转换:采用Pandoc(Haskell)转换成交付给出版社的docx主流文档格式。
读者可以将本书看作单一编程语言的物联网应用小百科,通过书中的简单例子大致了解物联网的开发流程,并可以根据自己的兴趣,在每章的延伸阅读 清单中深入探索、掌握物联网开发技术的具体实现细节。
目标读者群
本书的目标读者群是以下两大类开发者。
互联网开发团队:熟悉移动端APP的开发、服务器架构和网页前端开发,但对于传统制造业的技术领域,如芯片设计、硬件设计、固件设计、硬件系统集成,以及批量生产和库存管理缺乏足够的了解。
设备开发团队:主要是传统制造业产业链中的半导体供应商、独立设计公司、设备制造商。他们熟悉硬件设备的设计和流程,但普遍对于互联网应用和物联网架构缺乏足够的了解。
当前的制造业变化趋势是,设计与平台标准化,导致产品同质化竞争严重。这使得传统制造业在市场中逐渐丧失了议价权和话语权,处于被整合的被动地位。这些企业和团队在物联网时代异常焦虑,急需掌握数据接入和数据分析技术,以增加市场份额,并提升市场竞争力和议价权。本书第9章主要讲述物联网服务器后端开发,可以帮助传统制造业了解服务器端和数据端的发展趋势、大致的技术方案构成,并可以利用Python做些简单的设备测试。
除了工业物联网、行业物联网外,消费端智能硬件领域的物联网开发案例非常多,这是市场热点之一。许多创业团队虽然可以自行设计APP,搭建服务器,但是团队往往缺乏设备端制造经验,并仍在各类硬件问题中艰苦跋涉,苦苦摸索。本书在第4章中介绍了成熟的元器件、连接模块和实时操作系统,配合Python快速原型开发能力,让项目可以快速上市之余,还可以为设备添加各种“智能”应用。
此外,许多读者可能希望从全局角度了解物联网应用、各类技术方案甄选标准,以及具体技术细节。本书也尽可能地进行罗列,并就一些常见问题特别加以说明。
总的来说,本书适合对物联网及相关热点,如智能硬件、工业4.0、万物互联的应用与实现技术感兴趣的人群阅读。目标读者群除了互联网从业者、微电子和OEM/ODM制造商、应用系统集成商,还包括学生、教师、创客、极客、Python语言爱好者、产品经理、项目经理,企业高管和创投基金经理等。
最低阅读要求
由于本书是一本技术书籍,因此需要读者具备一定的编程经验和技术热情。如果读者对于Python基本语法有一定的了解那就更棒了。即便没有Python的使用经验,相信Python易学易用的特点也可以让读者很快入门。
此外,由于代码中大部分采用英语注释,因此需要读者具备基本的英语阅读能力。
本书的目的
核心目的
为应用开发团队提供设备端硬件、固件开发流程和开发工具方面的工程建议,并提供一些可以用于与服务器对接的硬件平台和参考设计。
为设备开发团队,提供服务器前后端/移动端的系统架构、开发框架、生态平台方面的工程开发建议,提供可以不断升级的可扩展架构和开发路径,以满足产品从原型测试、中试、量产到分布式规模生产系统整个产品生命周期的需求。
其他目的
分享基于IaaS/PaaS云计算平台的服务器开发经验,包括设备云、应用云和大数据服务。
分享可快速部署的物联网网关(Gateway)、边缘服务器(Edge Server)原型设计。
汇集Python在计算机系统中方方面面的应用信息,并持续更新。
吸引各方合力推动Python在嵌入式虚拟机/网关/服务器/大数据分析方面的开源活动。
本书内容安排
物联网环节长、技术庞杂,涉及的每种技术领域都值得大家仔细钻研学习。可以这么说,许多话题和技术都可以单独出一本书。所以本书力求在有限的篇幅内,突出物联网特征并使用Python落地生根,使之成为快速开发迭代的基础;与此同时提示在Python应用中可能遇到的问题和解决方案,以降低读者的学习成本。
本书以数据的流动方向,即数据的设备端采集、服务器接入、转发、分析到用户端的呈现为主线,并以Python语言从入门到各个技术栈中的应用作为辅线来安排章节。
本书内容编排经过多次斟酌和修改,最终按照以下顺序介绍。
章 节 简 介
第1章 物联网简介 概述物联网的定义、发展趋势以及物联网应用与技术等
第2章 Python语言基础 数据类型、数据结构、内置函数和标准库
第3章 Python语言进阶 多种实现、与其他语言的接口、物联网常见技巧
第4章 嵌入式系统开发 数字逻辑与模拟电路设计、C/C++固件开发以及主流的平台与供应商
第5章 设备连接和编程接口 物联网的多种连接性与编程接口以及Python支持包
第6章 嵌入式Python虚拟机 深嵌入式、嵌入式Linux最小系统以及各类Python虚拟机实现、演示
第7章 Python应用APP 在主流桌面操作系统和移动端中的Python APP开发
第8章 Python开发辅助支持 在物联网开发环节中的原型验证、虚拟设备、数据分析等多个方面的Python开发工具
第9章 物联网服务器端设计 物联网网关、边缘服务器、Web/IoT服务、开发框架和连接选项
第10章 融合应用与数据分析 科学计算、数据统计、数据挖掘和大数据分析平台和工具,以及数据可视化
除了本书内容,笔者还整理了诸多书中提到的Python扩展包和演示代码,并计划依托出版社网站和其他互联网服务进行分发。本书为笔者一个人写就,缺少专家进行校对,本人水平有限,书中难免有疏漏、错误,欢迎读者指正。但笔者精力亦有限,无法一一回复,祈谅。
本书未包括的内容
因为篇幅的限制,也因为物联网的特性,所以本书安排的内容比较繁杂。本书未能针对特定硬件、软件、云服务展开,也没有针对物联网提供完整的开源设计。这些希望读者在书本之外展开。本书出版后会依托各类互联网服务(如GitHub、社交网站和BBS)展开后续的开源设计活动。
软硬件环境
除非特殊应用和声明,本文主要的操作环境为Windows 7(64位)及Ubuntu Linux 12.04(32/64位)。Python版本为V2.7.11和V3.5。
在微控制器方面笔者推荐ARM mbed兼容的LPC/STM/KL开发板,或Arduino;对于卡片电脑,推荐树莓派或者兼容的国产Linux SBC;对于MicroPython,推荐在STM32F4XX/ESP8266开发板上运行。
版权声明
本书所附代码和硬件,凡是笔者所做,皆采用LGPL协议,读者可以自由用于任意目的;其余软件和硬件,请参考各自官网中的版权声明。本书引用的图片、代码、图表等,其版权皆归属于所属公司、网站和个人。本书引用这些资源主要用于说明目的,且尽量在每章延伸阅读中标明出处。如有遗漏,请联络笔者本人。
感谢
本书付梓需要感谢许多机构和个人。
知乎网站:本书的创作主题来源于笔者在知乎上的提问,并得到了知乎网友(包括出版社编辑)的热心解答、正面鼓励和推动才能够走到这一步。
张春雨先生(永恒的侠少),电子工业出版社的策划编辑:在知乎上遇见后,你一路推动本书的出版。感谢你的耐心和鼓励。
张成先生,物联网创业伙伴:张成先生,物联网创业伙伴:不断鼓励笔者继续深入物联网开发,并拨冗为本书作序。
EEWorld编辑nmg和版主dcexpert:他们提供了宝贵的MicroPython pyboard开发板。
诸多开源项目的作者们:感谢大家对于开源软硬件项目的热情和不厌其烦解答问题的耐心。
芯片供应商及分销商:
NXP(恩智浦),感谢免费提供LPC系列开发板。
Freescale(飞思卡尔,已与NXP合并),感谢慷慨提供大量KL25的样片及技术支持。
TI(德州仪器)及分销商Serial(新晔科技),感谢提供WSN技术支持。
Cypress,感谢免费提供PSoC开发板。
Fujitsu(富士通),感谢友情提供FeRAM RFID。
Atmel(爱特梅尔),感谢免费提供MCU、Wi-Fi和Crypto产品开发板。
Nuvoton(新唐科技),感谢免费提供MCU开发板。
最后感谢自己的父母和妻子,忍受笔者在放弃其他工程开发的情况下编写本书。
轻吻女儿Kirin,谢谢你的耐心等候。
刘凯(奕辰,Allan K Liu)
2017夏,上海
“Bluetooth 5.0之后增加的Mesh”中,“Bluetooth 5.0”应为“BLE4.0”
9.2.8 数据持久层
……基于海量数据并在可接收的时间(如0.1秒)内进行数据的插入……
这里的「接收」应该为「接受」。