[原创] micropython外的选择:viper/zerynth python VM

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开发板是很有价值的。 本帖最后由 allankliu 于 2016-9-13 09:05 编辑
  • Zerynth Logo

回复评论 (18)

2推荐 allankliu 

引用: 迈尔风随 发表于 2016-9-13 11:28 microphthon都还晕乎着,又来一个高大上的,更晕了,我这开发还纠缠在底层开发,对这类上层应用开发的搞不 ...
我个人觉得Python是帮我们解脱底层开发的利器。无论是抽取文档,转换文档、制作虚拟仪器、制作虚拟设备(MODEM串口模拟/服务器Socket模拟,Python CAN总线包就是没有硬件情况下完成的)、Software QA(Git/Subversion)、软件测试(黑盒测试和IC逻辑的单元测试)、电路仿真(SPICE/IBIS)、代码生成器、字符点阵提取、3D建模/AR/VR、通讯报文抓包与分析、媒体(图片、音频和视频)处理... 有个典型的Python围绕EE产品开发的例子:吉他效果音发生器 1)Python产生的音频信号; 2)Python进行模拟电路的SPICE仿真; 3)Python播放电路仿真后的音频信号; 4)Python支持多路网络传输,所以可以通过网络采集吉他原声,并将混音后的声音通过Socket传送RTSP码流。 EE工程师总是特别忙,桌子特别乱(我也是如此)。所以我们需要时刻回顾,时间浪费在哪些机器可以做的事情上了? 本帖最后由 allankliu 于 2016-9-14 08:23 编辑
点赞  2016-9-14 08:15
看起来非常不错,给我们提供了又一种选择,特别是可以支持STM32F103这样的MCU,适应范围比STM32F4要大多了。感谢allankliu。 本帖最后由 dcexpert 于 2016-9-13 09:45 编辑
点赞  2016-9-13 09:42
allankliu版主现身啦
点赞  2016-9-13 09:45
要不要弄来玩玩!
点赞  2016-9-13 10:37
microphthon都还晕乎着,又来一个高大上的,更晕了,我这开发还纠缠在底层开发,对这类上层应用开发的搞不太来
刻苦学习,共同进步
点赞  2016-9-13 11:28
今天尝试了一下,没有成功。没有Nucleo-F401的板子,用F411的代替,可以下载虚拟化固件,但是脚本下载不了。能不能给个教程?你是在写Zerynth的书吗?
点赞  2016-9-13 21:27
引用: dcexpert 发表于 2016-9-13 21:27
今天尝试了一下,没有成功。没有Nucleo-F401的板子,用F411的代替,可以下载虚拟化固件,但是脚本下载不了 ...

我没有试过F411的板子,F401的板子问题在于需要先升级ST-LINK,请度娘 STSW-LINK007,升级ST-LINK固件后。我和Zerynth的技术支持花了很长时间发现这个问题。Uplink不行与ST-LINK固件有关。
点赞  2016-9-14 07:24
引用: dcexpert 发表于 2016-9-13 21:27
今天尝试了一下,没有成功。没有Nucleo-F401的板子,用F411的代替,可以下载虚拟化固件,但是脚本下载不了 ...

F411并没有在Zerynth正式支持的PCBA清单中,不过你可能用411/Qualiboard试试看。它支持的是:

ESP8266/NodeMCU;
NUCLEO F401;
Arudino DUE, SAM3X;
Flip_Click from mikroE, based upon SAM3X;
Quali board,based upon STM32F427;
Spark/Paticle,STM32F103CB和STM32F205RG。

我会每天抽时间添加一些Zerynth教程。Zerynth的开发者非常专业,适配速度很快。不过我还需要深入了解他们的业务模式。

Python书稿已经交付电子工业出版社了。整整花了11个月时间,编辑说他还要3个月流程才能够最后出版。其中嵌入式Linux虚拟机中包括了micropython,zerynth,pymite over mbed作为重点介绍。除了MCU级别Python虚拟机外,该章节对于在各类嵌入式Linux上的运行环境总结了一下可用的Python虚拟机。主要包括:

1)LFS/CLFS(Cross Linux from Scratch), 交叉编译标准CPython(最麻烦);
2)LFS/CLFS,交叉编译pymite desktop和micropython UNIX版(很简单,但需要OS/C API适配)
3)嵌入式Linux,如OpenMoko/OpenWRT,使用软件管理器安装预先交叉编译(一堆路由器可用);
4)嵌入式Linux,如树莓派和NanoPi等,使用apt/yum安装CPython;
5)嵌入式Linux+Java,使用Jython运行Python脚本和Java程序(在树莓派上测试了来自瑞士的TigerJython);
6)完整版Linux/OS,使用原生GCC,往往具备自己的CPython版本和Pypy加速版本。

Python另外的应用重点在于服务器端和数据分析。因为GIL和CPython运行速度不理想,我已经评估了pypy的运行速度,是CPython的8倍。接下来要评估libuv异步库在Python中的使用。据说优化后的速度和Golang在一个数量级上。

有许多话题可以讨论。
点赞  2016-9-14 08:01
引用: strong161 发表于 2016-9-13 10:37
要不要弄来玩玩!

推荐NUCLEO-401,直接可用。
点赞  2016-9-14 08:20
引用: allankliu 发表于 2016-9-14 08:01
F411并没有在Zerynth正式支持的PCBA清单中,不过你可能用411/Qualiboard试试看。它支持的是:

ESP8266 ...

希望早点看到你的教程
点赞  2016-9-14 10:00
下载安装了NodeMCU v2的库和Board文件,但是在Support board中为什么还是看不到NodeMCU的选择?
点赞  2016-9-14 10:04
多谢分享!!!
点赞  2016-9-14 11:50
又实验了一下,在虚拟机里安装了Linux,这次成功了,发现问题在固件下载上,windows上下载固件一般很容易出问题,最后自己用STM32 ST-LINK Utility重新下载,这样就可以保证成功了。
点赞  2016-9-14 14:25
初步尝试了一下,感觉它还是尝试了二进制文件,不是真正用python脚本解释运行。好处是速度更快,缺点是使用麻烦。

另外对于硬件的支持没有micropython好,不知道是否可以自己修改硬件和固件。
点赞  2016-9-14 14:27
请问怎么下载其他开发板的支持包,我这只有这几个
11.bmp
喝最烈的酒,..DIY最实用的东西
点赞  2016-9-18 10:51
引用: lidonglei1 发表于 2016-9-18 10:51
请问怎么下载其他开发板的支持包,我这只有这几个

在windows下,我下载总是不成功,开发板加不进去。在Linux下就快一些,一个是在第一次安装的时候会添加,然后在库管理中可以添加。添加时会加入开发板对应的开发环境,所以文件很大,对网络要求较高。
点赞  2016-9-18 14:39
引用: lidonglei1 发表于 2016-9-18 10:51
请问怎么下载其他开发板的支持包,我这只有这几个

目前就这几种,不过请留意对应的MCU厂牌,Atmel,STM32F103/F401。如果你需要增加哪些PCBA,请于官网的新MCU/PCBA票选网站添加。你手里的有哪些?

http://www.zerynth.com/blog/pyth ... hich-board-and-win/

此外,最新的就是ESP8266,选用的型号就是@dcexpert采用的那款带屏蔽盒的型号。可能需要更新Installer软件。
点赞  2016-9-22 06:03

多谢分享!!!
点赞  2019-3-11 22:34
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复