前言

当前开源硬件中最热门的技术当属MicroPython。它是由英国剑桥大学的教授Damien George(达米安·乔治)发明的。Damien George也是一名计算机工程师,他每天都要使用Python语言工作,同时也在做一些机器人项目。有一天,他突然冒出了一个想法: 能否用Python语言来控制单片机实现对机器人的操控呢?

可能很多读者都知道,Python是一款非常容易使用的脚本语言,它的语法简洁,用法简单,功能强大,容易扩展。Python有强大的社区支持,有非常多的库可以使用,它的网络功能和计算能力也很强,可以方便地和其他语言配合使用,用户也可以开发自己的库,因此Python被广泛应用于工程管理、网络编程、科学计算、人工智能、机器人、教育等许多行业。更重要的是,Python是完全开源的,不受商业公司的控制和影响,完全是靠社区在推动和维护,所以Python受到越来越多的开发者青睐。但遗憾的是,因为受到硬件成本、运行性能、开发习惯等一些原因的影响,Python在早期并没有在嵌入式方面得到太多的应用。

随着半导体技术和制造工艺的快速发展,芯片的升级换代速度也越来越快,芯片的功能、内部的存储器容量和资源不断增加,成本却在不断降低。这给Python在低端嵌入式系统上的使用带来了可能。

Damien George花费了6个月的时间开发了MicroPython。MicroPython本身使用GNU C进行开发,在微控制器上实现了Python 3的基本功能,拥有完备的解析器、编译器、虚拟机和类库等。在保留了Python语言主要特性的基础上,对嵌入式系统的底层做了非常不错的封装,将常用功能都封装到库中,甚至为一些常用的传感器和硬件编写了专门的驱动。用户使用时只需要通过调用这些库和函数,就可以快速控制LED小灯、舵机、多种传感器、SD卡文件系统、UART、I2C、SPI通信总线等实现各种功能,而不用再去研究底层外设模块的使用方法。这样不但降低了开发难度,而且减少了重复开发工作,缩短开发周期。

MicroPython最早是在STM32F4微控制器平台上实现的,随着社区开发者的不断努力,现在已经移植到STM32L4、STM32F7、ESP8266、ESP32、CC3200、dsPIC33FJ256、MK20DX256、microbit、MSP432、XMC4700、RT8195、IMXRT等众多硬件平台上。此外,不少开发者在不断尝试将MicroPython移植到更多的硬件平台上,还有更多的开发者在使用MicroPython做嵌入式应用,并将它们在网络上分享。


撰写本书的目的,原本是梳理作者在基于MM32F3微控制器移植MicroPython的过程中总结出的一些开发规范,以及一些奇思妙想,整理成文稿后,可作为软件组的其他同事在更多平台上移植MicroPython和深入开发的说明,撰写的重点在于如何移植现有的模块。

经过对MicroPython开发过程的多次梳理,作者逐渐体会到MicroPython的一些设计思想和典型的设计模型。因此,在开发说明文档的基础之上,补充了一些方法论的内容,将现有各模块的实现过程作为实践方法论的具体案例,从而将陈述的重点转向方法论的研究。调整方向后,可以将通用的嵌入式系统开发工程师纳入本书的读者范围。通过本书描述的具体设计案例,读者可以了解在具体硬件平台上可能遇到的不同设计需求及其解决方法,最终能够根据各自的具体应用场景,开发出应用专属的类模块。

从一系列开发说明文档到一本关于设计方法论的书稿,在这个过程中,可以对设计内容举一反三,不限定于具体的硬件平台。更长远地看,有机会在国内培养更多能够开发MicroPython内核的开发者,为国内的MicroPython生态贡献人才储备。同时,由众多开发者创建出的更多的模块也可以加入到MicroPython的技术生态中去,进一步促进MicroPython生态的成熟,从而催生更多好的、有趣的创意设计。

具体使用MM32F3微控制器平台,借着上海灵动微电子启动面向大学的技术人才培养与储备计划(简称“大学计划”)的契机,本书也可用于支持讲授嵌入式系统入门的课程,借助于Python语言简单易上手的特质,特别适合在学校里作为嵌入式系统相关专业学生的授课素材。

本书的读者可以是有开发经验的电子爱好者、嵌入式软件开发者,以及在中学、大学开始学习嵌入式系统开发的学生以及教授相关课程的老师。

相对于常规的教科书,本书更接近于一本干货满满的开发笔记。在介绍完必要的背景知识后,尽快进入理论与实践相互配合的内容,一边分析问题,一边调试代码,跟随作者的设计与思考的过程,直至全书的结尾。事实上,本书原本就是从若干篇主题相关的开发笔记整理而来,但作者精心安排了各个模块的出场顺序,从无到有、从小到大、由易到难、由浅入深地陈述设计方法和技术要点。所以,对于首次阅读本书的读者,建议先遵循全书的成文顺序完成阅读,以便在阅读某个问题的描述时,自然而然地进入上下文环境,有助于理解。如果本书有幸让读者有所启发,那么在后续的阅读过程中,也可以将本书作为工具书,根据具体问题进行索引。本书的各个章节都着眼于解决某个或者某几个典型的设计问题,或可成为开发者在遇到具体问题时可以查阅的参考方案。


本书主要作者苏勇编写了书稿的主要内容。清华大学的卓晴老师结合自己多年的教学和丰富的开发经验,为全书设计了MicroPython的实验以及对应的示例程序。来自成都逐飞科技有限公司的工程师陶麒丞也是一位资深的智能车竞赛支持专家,使用本书讲述的MicroPython和MM32F3微控制器设计实现了一辆可自主寻迹的智能小车,并在本书的创作过程中提供了许多有意义的建议。

在创作本书的过程中,感谢上海灵动微电子股份有限公司(书中简称“灵动”)的首席技术官周荣政先生和市场总监王维先生对本书创作内容的密切关注,并向作者分享了与芯片设计、客户应用及市场推广相关的宝贵经验。感谢全国大学生智能汽车组委会将MicroPython作为智能车竞赛的创意赛题,让更多的学生和指导老师可以了解并使用MicroPython完成一些有趣的设计。感谢成都逐飞科技有限公司的总经理范兵先生和他的技术团队,他们设计并生产了PLUSF3270开发板,作为本书讲述内容的实验平台,同时也设计了丰富的用例。

最后,感谢我的家人们——父亲、母亲、爱人和可爱的小女儿,在2021年秋天到2022年夏天的上海,为作者创造了良好的创作条件。


苏勇
2023年3月