现在开源硬件中最热门的 MicroPython 是英国剑桥大学的教授 Damien George(达米安·乔治)所发明,Damien George 是一名计算机工程师,他每天都要使用 Python 语言工作,同时也在做一些机器人项目。有一天,他突然冒出了一个想法:能否用Python语言来控制单片机,进行实现对机器人的操控呢?
可能很多读者都知道,Python 是一款非常容易使用的脚本语言,它的语法简洁,使用简单,功能强大,容易扩展。而且python有强大的社区支持,有非常多的库可以使用,它的网络功能和计算功能也很强,可以方便的和其它语言配合使用,使用者也可以开发自己库,因此python被广泛应用于工程管理、网络编程、科学计算、人工智能、机器人、教育等许多行业,python语言也长期在编程语言排行榜上处于前五的位置。更重要的是python也是完全开源的,不像Windows、Java那样受到某些大公司的控制和影响,它完全是靠社区在推动和维护,所以python受到越来越多的开发者青睐。不过遗憾的是,因为受到硬件成本、运行性能、开发习惯等一些原因的影响,前些年python并没有在通用嵌入式方面得到太多的应用。
随着半导体技术和制造工艺的快速发展,芯片的升级换代速度也越来越快,芯片的功能、内部的存储器容量和资源不断增加,而成本却在不断降低。特别是随着象ST公司和乐鑫公司高性价比的芯片和方案应用越来越多,这就给python在低端嵌入式系统上的使用带来了可能。
Damien 花费了六个月的时间开发了MicroPython。MicroPython本身使用GNU C进行开发,在ST公司的微控制器上实现了Python 3的基本功能,拥有完善的解析器、编译器、虚拟机和类库等。在保留了python语言主要特性的基础上,他还对嵌入式系统的底层做了非常不错的封装,将常用功能都封装到库中,甚至为一些常用的传感器和硬件编写了专门的驱动。我们使用时只需要通过调用这些库和函数,就可以快速控制LED、液晶、舵机、多种传感器、SD、UART、I2C等,实现各种功能,而不用再去研究底层模块的使用方法。这样不但降低了开发难度,而且减少了重复开发工作,可以加快开发速度,提高了开发效率。以前需要较高水平的嵌入式工程师花费数天甚至数周才能完成的功能,现在普通的嵌入式开发者用几个小时就能实现类似的功能,而且要更加轻松和简单。
为了宣传 MicroPython,2014年的时候 Damien 在 KickStarter (国外最著名的众筹网站之一)上进行了一次众筹,众筹的内容就是我们后面将要介绍的pyboard(PYB V1.0)。PYB V10 是专门为 MicroPython 而设计,它使用了 STM32F405RG 微控制器,开发板上内置了4个不同颜色的LED指示灯、一个三轴加速传感器、一个microSD插座,可以通过USB下载用户程序和升级固件,使用非常方便。PYB V10 在 KickStarter 上的众筹非常成功,一推出就受到全世界的工程师和爱好者的广泛关注和参与,获得很高的评价,并很快被移植到多个硬件平台上,很多爱好者用它做出各种有趣的东西。
MicroPython 最早是在 STM32F4 微控制器平台上实现的,现在已经移植到STM32L4、STM32F7、ESP8266、ESP32、CC3200、dsPIC33FJ256、MK20DX256、microbit、MSP432、XMC4700、RT8195等众多硬件平台上,此外还有不少开发者在尝试将MicroPython移植到更多的硬件平台上,还有更多的开发者在使用MicroPython做嵌入式应用,并将它们在网络上分享。
MicroPython并不是在单片机/微控制器上唯一尝试使用python编程的,更早还有象PyMite这样的开源项目,但是它们都没有真正完成,而MicroPython是第一个真正在嵌入式系统上完整实现了Python3的核心功能,并可以真正用于产品开发。
除了MicroPython,在嵌入式系统上还有象Lua、Javascript、MMBasic等脚本编程语言。但是它们都没有MicroPython的功能完善,性能也没有MicroPython好,在可移植性、使用的简便方面都不如MicroPyton,可以使用的资源也很少,因此影响并不是太大,只是在创客和DIY方面有所应用。
为什么要使用 MicroPython?
Python作为一种高级语言,可以解释执行;这意味着其可以逐条执行,随时查看变量信息,这对在单片机上的调试非常方便。
单片机逻辑控制越来越复杂,变化也越来越多,高级的脚本语言无疑开发成本更低、迭代效率更高。
单片机的性能越来越高,在做逻辑控制时不再斤斤计较于一点性能。
# 导入 pyb 库 import pyb # 点亮板载的 LED pyb.LED(1).on() # 串行控制台输入一行文字 print('Hello MicroPython!')