Python 物联网全栈开发经验教训共享

1bdc68cd4430a4b773ee0793fde8b723.jpeg

作者 | 刘凯

责编 | 薄荷茶

微信公众号ID | csdn_iot

本文为7月1日「一天掌握物联网全栈开发之道」在线峰会中,刘凯老师的《从芯片到云端——Python 物联网全栈开发经验教训共享》演讲实录。

在公众号后台回复“Python”查看在线峰会更多细节。

adf2652a6f149bab636c32a7e3813727.jpeg

4fd09585135e6b4fc7926c62527ffa0f.png

大家好,我叫刘凯,由我讲解From Chip to Cloud,Python物联网全栈开发的内容。主要从前言、 Python简介、设备端选型、以及设备、网关和服务器端开发六个方面展开。

dd18db23e33c03e09ee7087e24c60318.png

ec651956a1637352773ea73e88dbd118.png

我来自微电子行业,主要工作经验是集成电路的应用开发,所接触的工程中大多采用汇编以及C语言编程,并使用了一些脚本语言来实现软件工程和自动化目的。离职后,从事过一阵子互联网开发。近年来,结合互联网和嵌入式两方面经验参与到IoT物联网开发中。一路走来,使用过许多编程语言,但是物联网的编程模型过长,所以不得不使用全栈开发的模式。

在我经手的若干物联网项目中,主要采用Python开发服务器。还尝试在设备开发中使用嵌入式Python虚拟机。此外,签约编写了《物联网全栈开发实践》一书,介绍了Python的全产业链的端到端开发应用。

由于自己以及客户都是新创公司,精益创业和MVP原型开发是经常使用的方法。我们选择的编程语言、框架、生态必须足够成熟、稳定、可扩展。借助众多的Python编程框架,可以在较短时间内完成一个最小系统的开发,并在此基础上不断地迭代、升级、优化。这比较符合创业路线图。

当然了,全栈开发必须要在团队内部提倡压缩及统一开发工具,而非一个人唱独角戏。片面最求单一编程语言其实也是一个误区。

ccc49c72c73e1fff32a6091f019414da.png

f99bcde3f2826b894f7248f1df611f3d.png

我们来看看最典型的物联网端到端的系统模型。

最左侧的是设备端,也称为传感器节点、边缘节点等,大多数采用MCU来设计。

左二绿色方框代表各类传感器网络和局域网,用于连接设备节点与网关。

中间白色方框代表网关,这个位置相当重要,除了网关,还有可能是边缘路由器或边缘计算设备。

网关右侧绿色代表广域网,是网关与服务器之间的数据通道。在许多蜂窝数据物联网应用中,网关和路由器对于设备是透明,可以理解为终端直连服务器。比如共享单车,开发者就可以简化开发环节。

在此图中,最右侧的服务器细分为设备接入服务器,应用服务器,以及数据分析服务器。暗示着服务器端实际上是一个分布式系统。

此图中没有出场的是Web前端和移动端。在许多项目中,我会刻意淡化了这两者的设计,因为物联网的UI需求不如移动互联网那么高。而且在应用服务器中,利用响应式框架和REST API可以同时支持浏览器和移动端,简化系统设计。

大家可以看到,一个物联网系统最大特点是环节太长。所以必须为团队选择一种合适的编程工具。

faf1d7651a980ce8385c770c7b9f58bd.png

参考刚才的图解,我们来对比IoT与互联网之间的差异:

  1. 开发环节方面,IoT比互联网增加了终端设备和网关开发工作量;

  2. 人机交互方面,IoT设备普遍不支持互联网标准技术,而必须使用传感器和Nature UI技术来实现;

  3. 组网联网方面,由于设备能力受限,无法使用Web协议,必须使用MQTT/CoAP/以及套接字编程;

  4. 安全特性方面,互联网的安全标准技术TLS开始使用RSA2048算法,对于设备压力太大,所以必须寻找替代技术或者增加硬件成本。

  5. 数据特性方面,互联网包括视频直播和录播都是服务器流出流量大,而大多数IoT却流入流量大。

  6. 实时要求方面,IoT有个隐含的实时要求,即在大规模流入的数据中必须能够实时地进行数据检索、统计和处理。

  7. 用户增长方面,IoT应用规模往往受限于设备投放量,这对供应商的资金、生产、销售和库存管理要求非常高。

  8. 沉没成本方面,IoT增加了硬件成本,毛利普遍低,降低了企业盈利能力,属于重资产项目,而互联网往往属于轻资产项目。两者在盈利模式和水平方面相差较多。

  9. 生命周期方面,IoT硬件设备生命周期要远远长过手机APP等互联网产品。所以在迭代、交付和维护方面处于劣势。

  10. 团队组成方面,传统硬件以及互联网开发团队的薪资结构和文化冲突较大。

综上所述,IoT和互联网虽然可以共享不少技术,但是存在很大差异。我们要重视这些差异点,否则会踩无数的坑。所谓“硬件的坑多”指的就是这些技术之外的麻烦。

eabe0e5ef7b28de9d278edc1d62a13e2.png

我们来看看Python是如何参与物联网开发的:

  • 首先,Python有许多实现,它与底层语言间的互相调用使得它获得多个技术领域的支持和优势。

  • 经典CPython基于C/C++,常常作为脚本语言使用,可以调用DLL/so库,在设备驱动、通用计算、动态库二次开发、桌面应用、Web开发与运维方面发挥优势;

  • Jython基于Java虚拟机,可以调用Java类库,可以用于大数据分析、跨平台GUI、网关开发和移动APP开发;

  • IronPython基于C#,可以在Windows以及Linux MONO项目中与C#混合编程,或通过动态库方式调用C#程序;

  • JavaScript非常热门,Python可以提供V8引擎,D3可视化库的封装,甚至还有一个JavaScript的实现,换而言之,我们可以使用Python来实现Web前端设计和爬虫设计;

  • Python在嵌入式其实发展很早,最近尤其热门,在此基础上出现了完整的开发生态和大量的参考设计。主流的供应商Telit/Xilinx都推出了Python编程的产品。

  • 由于FPGA/GPU等器件在DSP,NLP和机器学习方面是首选的技术平台,所以Python在这些方面也算是优势语言。

综上所述,Python天生就是一种应用层编程语言,非常适合系统整合。

b97de07d8b57307765de69a8becae793.jpeg

对于设备端开发来说,从研发到量产,经常面临设备资源、工具链、开发平台的各种限制。也需要很多工具。而Python对于物联网开发价值巨大&

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值