如何使用Micropython进行单片机开发
Micro Python介绍
传统开发模式的弊端
在传统的单片机开发中绝大多数人都是使用C语言进行开发,这种面向结构的语言使得我们编写的代码能够在资源受限的微控制器中高效的运行,但是这种开发方式的难度较高,主要体现在以下几个方面:
- 学习难度高:C语言在一众开发语言中属于较难的语言,与大多数面向对象的语言相比C语言并没有提供内存回收机制,一切的内存开销都需要用户自行把控。指针作为C语言中特有的数据类型让无数初学者望而却步,指针使用稍有不慎就会导致整个程序瞬间崩溃
- 开发效率低:每次修改完一行代码之后我们必须要经历:保存代码->预处理->编译->链接->生成对应.hex文件->将文件烧录进单片机->复位重启,这一系列操作少则几秒钟,多则几分钟,如果出现问题那就需要重新来过
- 调试难度高:我们在日常开发中时常会遇到代码经过一番调式后终于消除了所有的报错,但是当程序烧录后单片机却不能按照预先的规划执行相关操作,这个时候我们就只能不断的重复修改代码->烧录->验证代码的过程,这个过程如同盲人摸象一般,我们只能通过串口信息来推测问题所在,这对新手来说极不友好,直到代码可以在单片机中正常运行
- 环境配置繁琐:如果你使用的是
HAL进行传统的单片机开发,得益于CubeMX的可视化图形界面你可以轻松的在短时间内获得一个可以运行的项目。但是如果你使用的是标准库或者寄存器开发,那么你就需要自己手动配置相关的项目文件,这一过程及其繁琐,且出错概率高,无数新手在此被劝退 - 开发成本高:传统单片机开发需要安装庞大的
IDE(例如Keil),随后我们还需要购买对应软件授权(或者破解),且为了能够实现调试功能我们还需要购买硬件仿真器(例如ST-Link)
Micro Python的底层实现
综上所述,传统的单片机开发模式中存在着较多弊端,因此Micro Python就很好的避开了这些痛点,最初的作者Damien George(一位牛津大学的教授)并没有拿电脑上的标准Python直接生搬硬套,而是用纯C语言从0开始,重新写了一个转为单片机设计的Python解释器,因此Micro Python的底层仍然是C语言,在这里以后续我为大家展示所使用的K230为例,其中的Micro Python函数的底层实现逻辑如下:
- 工程师们先用C语言写好了操控底层硬件的驱动
- 随后他们利用
Micro Python提供的API写了一个包装层 - 这个包装层告诉
Micro Python编译器:如果用户在程序中调用了对应的硬件操作函数,那就直接去寻找并调用对应得底层硬件操作函数
所以上层的Python只是一层包装,真正在干活的还是C语言,它牺牲了大约10%~20%的纯C语言极限性能,同时消耗了较大的单片机内存,换来了极高的开发效率
Micro Python的特点
了解了原始开发单片机开发方式的弊端和Micro Python实现的底层原理,接下来就让我们介绍一下其特点:
- 交互式开发:通过
Micro Python进行开发我们只需要通过串口将单片机与PC机连接后我们就可以进入交互式解释器 (REPL),我们可以在终端中直接运行python语句(例如:print("hello world")),此时我们可以一边连着硬件一边在控制台中测试代码,完全不需要编译和烧录 - 抽象程度高:以前用传统开发方式进行单片机开发时即便是使用门槛最低的
HAL库开发模式我们在操作底层硬件时也需要调用多种相关函数(例如使能函数、初始化函数等),这些函数名也都比较长,更不用说用标准库或寄存器开发了。但是在Micro Python一切皆为对象,他将底层的协议进行了高度的抽象,我们不需要去阅读长篇的数据手册和用户参考手册也能轻松的实现外设以及时钟的配置操作,这极大降低了硬件驱动的门槛。不仅是基础引脚,包括定时器(Timer)、PWM(控制舵机)、SPI、UART、甚至WiFi网络,都可以用极简的面向对象语法调用 - 内存管理便捷:传统的开发方式中我们每天都在使用指针、
malloc、free,稍有不慎就会出现内存泄漏或野指针,导致程序无法正常运行,但是Micro Python完美继承了 Python 3 的语法,它引入了**垃圾回收机制 **。这意味着开发者无需手动释放内存,系统会在后台自动清理不再使用的变量
如何使用Micro Python进行单片机开发
前置要求
首先我们在前面介绍过Micro Python的开发方式相较于传统的开发方式会占用大量内存,因此并不是所有类型的单片机都能够承载这种病开发方式的,而且Micro Python开发方式并不是开箱即用的,其中最重要的一环就是要在单片机中烧录对应的固件,然后才能进行后续的单片机开发,因此如果网络上并没有支持你手中开发板的固件那么就无法进行后续的开发工作,我们可以到Micro Python的官网中查询目前支持了哪些硬件,网址如下:
在官网中我们可以查找是否有支持自己手中单片机的固件,如果大家也想体验一下使用Micro Python进行开发的流程的话在这里推荐大家可以购买ESP32核心板,在官方提供的固件中就包含了多款ESP32型号的固件,且这款国产核心板功能多,价格低,是新手入门的不二之选。如果你手中的预算充足或者不想进行繁琐的烧录操作,那么也可以尝试购买如树莓派、K230、K210等开发套件,这些套件一般在购买时商家就会提前将相关的固件烧录到TF卡中,一般情况下到手即用,接下来的开发中我将使用亚博智能官网购买的K230开发套件进行Micro Python开发,后续有机会我也会分享用ESP32开发板进行Micro Python的流程
开发环境介绍
如果你手中的开发板可以在官网中找到对应的固件包,那么你就可以尝试使用Micro Python进行单片机开发了,关于固件烧录的操作本次先不做讲解,下次会着重介绍一下单片机开发固件的烧录流程,本次的目标为搭建好主要的开发环境,并尝试编写第一个简单的程序
Thonny
这款软件是Micro Python单片机开发的首选软件,其界面略显简陋但是功能强大且配置简单,优势如下:
-
开箱即用:
Thonny的安装包只有几十MB的体积,插上开发板,在右下角的菜单中选择并连接上对应的引脚后即可直接进行后续的代码编写,同时底部的Shell窗口也会直接编程REPL交互终端,其官方下载地址如下考虑到其下载速度可能较慢,在这里还有对应的网盘链接供大家选择
通过网盘分享的文件:thonny-4.1.7.zip
链接: https://pan.baidu.com/s/1DtvovXDaXzHIB1VOMTgw-g?pwd=1234 提取码: 1234
--来自百度网盘超级会员v4的分享
软件的下载操作较为简单,在这里就不做过多赘述,接下来直接介绍一下软件的相关配置以及操作流程
软件打开后界面如下,按下键盘上的Ctrl+N或者直接点击左上角的加号就可以直接创建新文件

创建好新文件后点击右下角的端口配置,此时就会出现软件扫描到的硬件端口,如果此时你在当前界面中能够找到匹配的端口号,那就直接点击连接即可

否则需要在当前界面中点击配置解释器,在新弹出的窗口中我们可以选择对应的解释器,这里使用的K230开发套件,因此此时我们选择通用解释器即可,大家可以根据自己选择的开发板来选择合适的解释器

选择好对应的解释器后下一步就是选择合适的端口,同样是在当前界面,点击端口栏,在接下来弹出的选项中选择对应的端口,如果此时仍旧没有对应的单片机端口,那么此时你就需要检查一下单片机对应的端口驱动是否安装成功

此时不出意外的话底部的Shell窗口就弹出连接成功的提示,此时在底部终端中出现了>>>符号就说明此时进入了交互式解释器模式,你现在可以尝试直接在终端中写几句简单的python代码并观察输出

接下来我们在顶部的视图选项栏目中点击文件选项后即可在左侧侧边栏中观察到对应的主机文件目录和单片机中的文件目录

此时你就可以在打开或新创建的python类型文件中编写对应的代码,随后按下键盘上的F5按键,或者点击顶部的绿色运行按钮即可在底部观察到输出结果

至此软件的开发环境就已经搭建完毕,你就可以在电脑中愉快的使用Micro Python进行单片机开发
总结
mg-XGUnGCyv-1771639934907)]
至此软件的开发环境就已经搭建完毕,你就可以在电脑中愉快的使用Micro Python进行单片机开发
总结
本次主要讲解了使用Micro Python进行单片机开发的优劣,以及如何在PC端上配置对应的软件开发环境,并尝试编写并运行了第一个简单的Micro Python程序,后续我还会分享更多自己的学习经验和心得