分享
从芯片到云端:Python物联网全栈开发实践.pdf
下载文档

ID:2356484

大小:7.99MB

页数:723页

格式:PDF

时间:2023-05-08

收藏 分享赚钱
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,汇文网负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
网站客服:3074922707
芯片 云端 Python 联网 开发 实践
推荐序 前几年国内引进了 Chris Anderson 的 创客:新工业革命。打那时候开始,国内流行起“创客”风潮。“创客”这个词果真是一个洋气的舶来品,很多国人姑且把它看成硬件创业的预备役。但是大洋彼岸原产地的人们倒是朴实得可爱:织个毛衣,搞个室内大棚蔬菜。当然高科技类的自然少不了捣鼓一下机床,焊一块板子,这更像是一种 DIY 的怀旧文化:更加纯粹和快乐。做一名纯粹的创客并不容易,毕竟要抽出一定的时间和精力。直到现在我依然惦记着自己那台完成了一半的 3D 粉末打印机,而它就静静地躺在储物箱里。那时候的我已经开始为创业做前期准备,但商业项目和自己在创客空间玩的东西没啥关系,终究自娱自乐和商业有差别。遇见 Allan 的时候,他也在努力从创客转变成创业者。我很惊诧于他虽然技术娴熟,也曾负责 NXP 产品技术与市场,却依然对技术保持着孩童般的初心,真的不多见啊。离开 NXP 后,Allan 决定成为一名自由职业者。靠着自己扎实的技术,从前端到后台,从硬件到软件,他一个人搞起了物联网的项目和产品。我们时不时在线上谈论可行的产品和市场策略。虽然我对硬件不熟悉,但是由于自己当时就职于 PTC,拥有些许物联网后台软件的认知,就这样我们相互参照着学习,并努力将其付诸实践。2015 年 5 月,我离开了 PTC 并投身于机器视觉领域的创业,但依然保有对物联网的热情,尤其关注工业物联。而 Allan 在这几年的实践中积累了全栈开发的经验。终于有一天,他觉得是时候将他独自一人的全栈开发经验记录下来,并传播给这个领域的开发者了。我自然非常支持他,但是独自写一本技术类的书,这是多么考验人呀。之后和 Allan 的交流变少了,我想象得出他独自在房间码格子的情形。半年后,这本书的初稿终于扎扎实实地完成了。创业者和分析师们总爱重复地问一个问题:物联网的风口有没有来?我们很难精准地去预判某个时间节点,但假如物联网是一个不远不近的方向的话,我们当下唯一能够做的便是顺着产业的脉搏而跳动。类比一下 PC 和移动互联网,我们依然处于物联网大规模商业化的早期。但是最终我们会迎来万物互联。让我激动的是万物互联的基础架构成熟后,在各个行业以及各个利基市场将会涌现出各种“新物种”,推动着商业和产业进一步提高效率,进一步打破边界。而对于希望投身于这个行业的技术人员来说,应该尽量抛弃这些华丽的时髦术语,回归技术本身。这本书平实地记录了读者需要了解和掌握的基础知识;与此同时,它从单一语言全栈开发从芯片到云端:Python 物联网全栈开发实践 IV 的概念出发梳理了一个完整的流程,而全局观的梳理能够更好地帮助技术人员去理解技术的本质。技术总是在飞速地发展,书本记载的技能需要不断地升级更新。但是我能感受到 Allan 更希望传达的创客精神。创客愿意从零开始建一栋楼,他们或许不能建成一座摩天大厦,但至少也会筑成一幢别具一格的小楼房。这种纯粹的乐趣只有从动手实践中才体会得出来。但人们的生活节奏总是很匆忙,有这么一本类似于“宝典”的书,可以加快看官您动手的速度和效率。但愿您能享受从零开始搭建一个物联网项目或者产品的过程。张成 浸梦信息科技有限公司创始人 自序 V 自序 笔者曾经长期服务于微电子行业,现在从事物联网相关项目设计和咨询服务。1995 年毕业后,笔者加入了飞利浦半导体上海技术中心,任软件工程师。在此期间的主要工作是使用汇编语言为国内客户进行各类显像管(CRT)彩电的固件开发。当时的技术环境,8051 都已经非常普及了,而飞利浦半导体彩电和固定电话技术方案中的控制器却依旧采用老旧的 Intel 8048 内核 MCU。该内核架构有许多限制:比如超过 2KB 代码需要切换代码段,缺乏高级语言支持,等等。虽然架构古老,但这个业务却一直是当时飞利浦半导体的“现金牛”(即主要利润来源)。笔者后转入产品市场部,在那里可以接触到许多炙手可热的产品线。其中,笔者负责的产品如下。8051 控制器:配合中国合作伙伴,如(北航)中国单片机实验室、南京万利、南京伟福、广州周立功等单位,合作推广 LPC764/9XX 及后来的 ARM LPC 系列。通信产品:8048 内核电话机 MCU、传呼机、DECT 和中国数字无绳电话芯片组。智能卡产品:包括电话卡、CPU 卡,以及最著名的 Mifare/Hitag RFID 和车用防盗钥匙。DSP 产品:Trimedia VLIW(超长指令集)DSP,用于视频电话和媒体处理。CPLD:低功耗 CoolRunner CPLD,后转售给 Xilinx。PDA:基于 MIPS R3000 内核的 Windows CE PDA 方案。后来,笔者又重新拾起软件开发的工作,主要负责基于 8051/MIPS 的 LCD/DTV 的客户化固件开发。应该这么说,在飞利浦的从业经验使得笔者积累了嵌入式开发经验,开阔了产品线视野,并积累了多方面的技术兴趣和行业人脉。同时,在开发这些嵌入式产品的过程中,笔者开始采用各类脚本语言来做代码生成和其他开发工具。2008 年,飞利浦半导体部独立成为 NXP 公司之后,笔者开始了自己的创业之路。到目前为止,笔者独立设计过以下产品和参考设计:基于 Cypress PSoC 的 RFID/UART/GPRS/TPMS 模块(C)。基于 SDIO 闪存卡的 NFC 接口(FPGA/CPLD)。从芯片到云端:Python 物联网全栈开发实践 VI Wi-Fi 强制门户及热点分享网站(PHP)。GPRS+GPS AVL 设备及网站(C/Java/PHP)。TI C2800 DSP ANC 主动噪声抑制系统(C/ASM)。网络爬虫,用于抓取超市的 POP 海报分发(Python+PHP)。Android 翻译 APP(Java)。电子货架标签系统,第一个从设备到 APP 的完整原型设计(C+Python 网关)。GAP 创客电子模块,基于 NXP/Freescale/ST 的 M0/M3 处理器,并提供 Bootloader 和ISP 软件(C/C+/Python)。工业门物联网(C/C+/Python)。呼吸机物联网(Python/Golang)。电梯物联网(Python)。EPD 电子模块(C+/Python)。RFID 分类钱包(国家实用新型专利,已授权)。GPS 资产定位系统(C+/Python)。电信 CDMA 基站监控设备(C+/Python)。VoLTE 高清语音监控设备(C+/Python)。分级基金及股票监控报警系统(Python)。离开 NXP 之后,笔者的设计不再受限于原公司的技术平台所涉及的消费电子产品领域,而是扩大到了互联网与物联网领域。笔者的个人体验是,无论是设备端还是服务器端,都有许多技术可以深入学习。但是两者融合,技术复杂度却呈现几何级数上升。不同领域有不同的优势语言。一般来说,CPLD/FPGA 使用 VHDL/Verilog,MCU/SoC 固件开发使用 C/C+,桌面开发使用 C#/VB 等,服务器开发使用 Java/PHP/JavaScript/Python/Golang,手机 APP 使用 Java/Objective-C。所以,笔者在工程实践中,一直在使用汇编语言/C/C+开发嵌入式系统固件,并使用Perl/Python 脚本做开发支持工具,同时采用 PHP/Java/Python 做设备云和 Web 应用。一个完整的物联网应用涵盖许多环节:从数字逻辑电路设计,到硬件设计、固件设计、网关软件设计、服务器软件和网页设计、APP 设计,甚至模具的 3D 设计。出于工作的需要,即使环节长,笔者也不得不像“万金油”一样,亲自参与全过程的设计工作。虽然无奈,但笔者的修炼结果是,比一般硬件团队略懂服务器开发,比一般服务器/APP 开发团队略懂硬件开发,而且大致了解了物联网的许多具体技术。笔者的个人体会是,物联网环节太长了!无论是设计、编码还是调试,物联网的庞杂特性都非常明显。首先设计和编码时间就很长,尤其在系统联合调试时,需要使用多种开发工具(仿真器、目标硬件、仪表、服务器、Web 控制台)。在这个阶段,有时候需要多台计算机才能够完自序 VII成调试任务。以超市货架管理项目为例,其涉及 WSN 协议规划、节点端和网关端设备的固件开发和协议实现、服务器设计、手机 APP、条形码和二维码扫描。此项目笔者整整开发了一年才交付给客户,而且调试起来还挺麻烦。个人单枪匹马,精力有限,无法同时兼顾所有环节,因而开发的项目格局不会太大。物联网开发应该为团队合作团队合作,甚至多个团队之间进行合作。每个团队对于各自的环节负责,做到接口标准化。这样才能够复用已有的经验和模式,并充分发挥其边际效应。即便是团队合作,也需要将自己使用的工具数量降低到最少,至少需要寻找到覆盖面较广的工具来开发。这也是现在许多“全栈”开发的目的。采用单一语言做全栈开发 全栈开发最初出现在互联网行业,指的是能够同时开发网页前端和服务器后端。这包括能够做全栈开发的技术和掌握这些技术的工程师。该行业最典型的全栈开发语言是 JavaScript。在物联网行业中,全栈开发的含义被延伸了。笔者推荐以 Python 作为全栈开发语言。本书的全栈开发涉及 IC(集成电路)设计、设备端(电路和系统)、服务器(含网页)端,以及移动端和数据分析端。使用单一语言可以多方面降低成本:学习周期短,降低人力成本。交付时间短,降低开发成本。人力资源供应充分,降低人均开发成本。容易形成生态,构建开发者生态圈,实现众包。代码复用性强,代码可重用,开源市场有不少现成方案,可降低总体开发成本。设备可以虚拟化,物理设备可以通过同一代码模拟出来,以加快工程启动周期,降低开发成本额和减少开发者间的责任推诿。综上,物联网开发涉及面庞杂,开发周期长,寻找一种覆盖面广的编程语言和方法对企业和开发团队有现实意义。Python 用于全栈开发 在笔者眼里,承担全栈开发的语言可以是 Java,也可以是 JavaScript,还可以是 Python。由于互联网的发展,加之 JavaScript 在前端语言中的优势地位,使得它开始延伸到了服务器后端和设备端。而 Java 原本就在设备端和服务器端都很有优势。从发展历史上看,在嵌入式平台中最早出现的是 Java,最近才开始出现 JavaScript 和 Lua 等动态语言。这都是服务器端企图深入到嵌入式行业的努力。至于 Python,由于其胶水特性,虽然性能不占优势,但是开发速度快,从芯片到云端:Python 物联网全栈开发实践 VIII 比较适合做全栈的原型开发。之所以出现企业和手机开发者力推 Java 开发,前端开发者力推 Node.js 开发前后端技术,某些群体力推 Go 的现象,除了技术本身的因素,许多情况下也是其教育背景和从业经历所导致的,即所谓出身和基因所决定的。在此,个人经历决定了笔者选择 Python 作为自己的主力开发语言。曾经看过一个关于如何在 Java/JavaScript/C#/Python/Golang 等几种语言中选择一种作为主力编程语言的漫画式流程图。其中有一个选择:如果你喜欢乐高,那么请选择 Python。仔细想想,Python 的确很像乐高:接口一致性高。粗颗粒,构建速度快,适合原型。有标准构件,如各种标准积木和标准库。具备大量的定制构件。乐高中存在定制的主题人物和机器人组件,而 Python 也有大量的 C 扩展库和第三方应用库。在我国的港台地区术语中,将 Integrated Circuit 翻译为“积体电路”,即积木化的电路。而新出现的各类集成技术,如 SoC/SiP,即系统芯片和系统封装,也是通过在电路 IP 领域和封装领域的创新来实现更大规模的电路整合。换而言之,不同规模的电路都是搭积木搭出来的。所以,半导体行业应该会比较偏爱类似于积木的 Python 语言。回顾自己的从业和工程经历,大概以下是笔者偏爱 Python 开发的原因:在固件开发中,接触到使用脚本语言(gawk)来设计代码生成器简化开发。电子工程经验,接触并了解了许多

此文档下载收益归作者所有

下载文档
你可能关注的文档
收起
展开