大多数完整物联网项目的开发都需要单片机工程师、嵌入式Linux工程师、后台工程师、Web前端工程师及App工程师共同来完成。暂不考虑系统本身的协作,要调动如此多的人力资源就不是一件容易的事。如果能够使用一种语言完成物联网项目的大部分开发工作,将会大大提升产品的开发效率。
移动互联网的迅速发展,除了芯片、操作系统的支持,Java编程语言庞大的开发群体及易用性功不可没。同样,物联网行业也需要更加高级、开发效率更高、适用范围更广的编程语言。如何使用Python开发物联网项目呢?笔者将从物联网的终端、网关及后台等三部分简述使用Python开发物联网项目的方法。
物联网终端设备的主控芯片大多是单片机,需要大量的IO操作对接传感器等外围设备,由于运算、存储资源的限制,传统单片机的开发几乎被C语言和汇编语言统治,不同厂商的芯片几乎都独立定义寄存器,有不同的编译环境及API,形成了不同厂商、不同芯片型号之间无法互通和共用的现状。在实际开发过程中,基于某个厂商的某款单片机完成开发后,在产品化的过程中若想使用另外厂商的某款性价比更高的单片机,那么就需要重新完成代码的编写。各个厂商之间的独立,造成了单片机的碎片化,无法做到通用和复制。
针对这种现状,目前市面上有多个基于Python的开发项目,通过对硬件底层的封装提供标准化的、统一的API,使用通用的开发环境,可大大提升单片机的跨平台和可移植性,一次编写,到处运行。硬件方案的更改并不需要重新编写代码。具有代表性的项目如下。
PyMite
PyMite是一个嵌入式的Python运行环境,可以运行在8位单片机上或其他小型嵌入式系统中,最小系统需求为64KB ROM、4KB RAM。PyMite已经在多个平台上运行,如Arduino MEGA、AT91SAM7、AVR、MC13224、LPC1368、PIC24、STM32等。PyMite支持多重继承、闭包、字符格式化符号、ByteArray类等特性。
Zerynth
Zerynth是需要商业许可证的单片机Python项目,有自己的IDE,采用编译模式。
MicroPython
MicroPython是能够运行在微处理器上的Python,有自己的虚拟机和解释器,遵守MIT协议。MicroPython的特点有:
· 使用Python3;
· 完整的Python语法分析器、解析器、编译器、虚拟机;
· 包含命令行接口,可离线运行;
· Python字节码由内置虚拟机编译运行;
· 有效的内部存储算法,能够带来高效的内存利用率,整数变量存储在内存堆中,而不是栈中;
· 使用Python Decorators特性,函数可以被编译成原生机器码,使Python的运行速度更快;
· 函数编译可设置使用底层整数代替Python内建对象,有些代码的运行效率接近C语言,可以被Python直接调用,适合时间紧迫、运算复杂度高的应用;
· 通过内联汇编功能,应用可以完全接入底层运行;
· 基于简单和快速标记的内存垃圾回收算法,许多函数可以避免使用栈内存段。
目前,MicroPython的功能最全面、版本迭代最快、社区最活跃、支持的硬件平台最多。本书将讲述采用MicroPython基于STM32平台进行物联网终端设备的开发。
此处提到的网关是指负责组建局域网、连接众多终端设备和后台的枢纽。当然,不是所有的物联网应用场景都需要网关。在一些复杂的场景中,网关必不可少,是一个管理中心。在某些时候,终端设备并不需要与云平台交互,网关就只承担局域网服务器的功能。Python已经在嵌入式网关上使用多年,如开源树莓派支持的主流编程语言便是Python。运行Linux嵌入式网关设备可用的编程语言很多:C语言擅长编写驱动、操作IO、硬件的代码,编写应用代码时非常吃力,尤其是编写复杂应用的代码;Python的网络通信库、数据库、字符解析能力的强大及自身的内存管理、垃圾回收机制,可使开发者能够将更多的精力投入到业务层面,快速开发产品,不会像C语言那样频繁地因为内存和指针问题而影响开发的进度和程序运行的稳定性。
网关的硬件资源丰富、性能强悍,很容易移植Python的运行环境,之后的开发代码与其他平台编写Python代码并无太大差异,可以使用Python丰富的应用库快速开发产品。相比传统嵌入式C语言应用程序的开发,使用Python编写网关程序有如下优势:
· Python语法简单,容易掌握;
· Python可以节省代码,内置类型、内置函数和标准库可帮助开发者解决日常问题;
· Python拥有丰富的标准库,避免重复“造轮子”;
· Python可提供更加丰富的内置类型,用于高层应用相关的数据结构;
· Python内部的所有类型都是对象,包括函数、代码等,OOP很自然;
· Python不仅可以面对过程编程,面向对象还可以进行更高抽象度的函数式编程,甚至可以在一句话里实现算法和迭代。
云平台是数据存储中心,可存储、收集海量的终端设备信息,提供数据可视化、大数据运算及访问能力,是连接物体的枢纽。Python具有多个成熟的Web框架,可提供快速、简单的Web开发支持。本书将使用Python的Django Web框架实现物联网项目后台的开发。Django具有如下特点:
· 自助管理后台,Admin Interface是Django比较吸引眼球的一项Contrib,可几乎不用写一行代码就拥有一个完整的后台管理界面;
· 强大的ORM功能,一般来说可以不使用SQL语句,每条记录都是一个对象,取对象的关联易如反掌;
· URL Design,Django的URL模块设计看似复杂,实际上都是很简单的正则表达式,很细致,在地址的表达上可以随心所欲,那些优美的、简洁的、专业的地址都能表现出来;
· App理念很灵活,可将复杂的后台功能分成具体的模块,逻辑清晰,可插拔,不需要时可以直接删除,对系统影响不大;
· 强大的错误提示功能可准确定位程序的出错地点,能够快速解决错误,提升开发效率。
当提及全栈一词时总是小心翼翼的,行业内对全栈一词褒贬不一,笔者不愿意陷入语言优劣及全栈开发好坏的争论之中,只是多提供一种选择,不同的场景可选择不同的开发技术,开发技术的选择与实施同样是技术能力的一种表现。
各大企业对物联网基础设施的大力投入使物联网的发展非常迅猛,一线开发者需要推陈出新,寻找更加快速、高效的开发技术。使用Python编程语言完成物联网项目大部分的开发工作是值得尝试的。面对下一个科技浪潮,结合更高效的开发语言,选择能够快速推出产品的开发技术非常重要。
物联网从孵化以来,经过多年的成长,羽翼更加丰满,Python是一双强有力的翅膀,能够让物联网快速腾飞,翱翔天际。它们的结合,必将是一场美丽的相遇。