本帖最后由 allankliu 于 2016-9-13 09:05 编辑
虽然,本栏目是micropython的专栏,但是准备了一些与Embedded Python有关的内容,也准备在本栏中介绍。
About VIPER/Zerynth
本篇介绍来自意大利和美国的Viper/Zerynth。该项目原来起名VIPER:Viper Is Python Embedded in Realtime。后来因为同样的商品名称被其他公司注册,所以改名为Zerynth。个人觉得不如原来响亮。Zerynth最初是一家意大利公司,位于比萨,并在美国纽约设立分公司。
Zerynth是一种易于使用的专业化开发套件,专门针对交互产品、艺术产品和互联网/联网设备的高层设计和跨平台设计。Zerynth是针对基于ARM Cortex 32位微控制器、新型传感器、执行器和扩展板的交互设备和应用的开发利器。开发者可以利用这些开发板硬件平台进行原型验证,可以利用其规模效应和成熟生产线实现产品化,并快速推向市场。同时,Zerynth通过各种编程实例和参考设计帮助设计者将原型设计进行快速软件的产品化。
Zerynth采用开源设计,这一点笔者曾经有所怀疑。后来发现Zerynth Studio底层的Python代码都留着,所以的确是开源的。实际上Zerynth安装后,PC中多了Python3.4以及扩展库,以及Zerynth IDE和后台工具。这些都可以在安装路径中找到源码,但是需要开发者仔细阅读器源码才能够理解其中的奥妙。
目标人群和技术支持
Zerynth的发展目标不同于micropython。前者面向的是创客、艺术家、系统设计师,所以提供的是相对完整的工具链。而micropython主要针对硬件Hacker、工程师。有重叠,但是有所区别。Zerynth宣称让开发者关注应用本身,而不必纠缠在没有附加值的底层开发,如针对开发板的I/O定制,设备驱动,存储器管理等细节。Zerynth内置RTOS(FreeRTOS/ChibiOS)支持,必要的话,可以充分利用底层资源。
micropython的技术支持主要是依靠社区,比如@dcexpert这些先行使用的人群来做。而Zerynth主要依靠论坛和自己的技术团队。可能是因为知道本人写书的原因,Zerynth的技术支持一直非常连贯。
- Zerynth的最初的环境在国内无法使用,后来过了一些优化,现在无需翻墙也可以使用论坛。
- Zerynth的硬件可以初始化,但是无法上传用户代码,所以Zerynth提供了Ubuntu的虚拟机作为测试。
- 通过Zerynth的远程支持,最终问题定位在ST-Link固件需要更新上。并最终完成了评估。
系统组成
- Zerynth VM虚拟机是Zerynth核心部分,支持Python 3脚本,可以编写不依赖于特定硬件,可重用的高层应用代码。
- Zerynth Studio是专用开发环境,在IDE中开发代码,用户可以在本地和云之间同步代码。同时通过IDE可以管理不同硬件平台,并为不同硬件下载不同虚拟机。不过,国内用户更新IDE或会遇到联网问题。
- Zerynth APP是相关的简单APP,用户无需编写任何代码就可以控制设备。
- Zerynth Shield是多传感器扩展板,可以在Arduino(Atmel Cortex)和Particle(STM32F103)平台上使用。
- Zerynth Cloud是其隐含的服务,通过git来配合Studio做源码管理等。
Zerynth Studio
Zerynth Studio是一个基于Python和node.js开发的IDE。它不是完全由Python QT/Tinker之类开发的,而是一种WebKit封装。其中包含开发所涉及的方方面面,包括源码管理(Git集成),串口终端、编译链接等等,还提供了许多例程。从某个角度来看,类似于Arduino Processing IDE。
目标硬件
Zerynth支持的硬件主要由STM/Atmel两个系列,包括STM32F401RE/STM32F103CB/SAM3X8E。由于Zerynth还有自己的Cloud,APP。所以UDOO平台可以同时支持运行Zerynth Python和Zerynth Android APP。
与标准Python区别
Zerynth VM是针对嵌入式设备而设计的Python实现,其存储和计算资源非常宝贵。Zerynth是Python的子集,因为有些特性对于嵌入式编程来说过于浪费了。
Zerynth不支持的Python 3.4特性:
- 没有带字符参数的getattr和setattr;
- 不得超过65535个名称(对象名);
- 函数不得超过256个参数,没有 **kwargs支持;
- sequence/map限制在65535个元素;
- 用内置和其他模块方式,而非采用标准Python库;
- 没有闭包、生成器、装饰器;
- 没有eval()和compile()。
Zerynth附加特性:
- 内置实时线程;
- 内置原生C函数调用;
- 异常不是类,而是带有可选错误码的名称;
- 支持与硬件相关的内置类,如GPIO,ADC,PWM等。
对于开发者来说,能够支持STM32F103入门级MCU,以及与Micropython共享STM32F401开发板是很有价值的。