micropython和python区别-什么是MicroPython?

本文对比了MicroPython与传统硬件开发方式,介绍了MicroPython作为解释型语言的优势,并探讨了其在微控制器应用中的特点。

开始之前,你肯定会产生如下疑问:

什么是MicroPython?

简而言之,MicroPython 约等于一个可以运行在 微处理器上的 Python解释器,它使得我们可以编写Python脚本来控制硬件。12fd781d6b708b36c9005453c59f51decec2911c.png

尽管我觉得我概括的很完美,但是对于不明白Python这种解释型语言的人来说,简直就是一脸懵逼。

所以我尝试先给大家科普一下几个概念。

Python解释器

编程语言大致可以分为 *解释型语言 *和 非解释型语言。澄清¶

只为给萌新科普,就不要拿java这种又要编译又要解释的语言来难为人家啦

解释型语言大多也称作为脚本语言,例如Python这类不需要编译的编程语言,我们可以在交互式的Python解释器环境中输入一行指令,执行一行指令,获得输出;也可以把写好的脚本文件一次性交给Python解释器去解释执行。

而非解释型语言典型的以 C 语言为例,这类语言编写的代码需要通过*编译器 *编译之后才能被执行。

我越解释你可能越糊涂,所以我决定表述的形象生动具体。

我们编写的代码,无论C语言也好,Python语言也好,都是希望计算机去执行。但是计算机是机器,只能识别01构成的二进制代码。因此,为了让机器搞懂我们现在编写的C语言代码,或Python语言代码,都需要经过一番转换,才能变成计算机设备能够理解的,进而才能被正确执行。

这个转换过程需要使用到工具:编译型的C语言,需要用到编译器。

解释型的Python语言,需要用到解释器。

编译器就好比一个专门负责翻译的公共机构,他只负责翻译,你把写好的代码文件交给他,他便一次性把文件翻译出来,然后再交给你,这就好比于你把写好的C语言代码让编译器来编译这一过程。之后你就可以把翻译好的代码文件拿去给机器来执行了。

而解释器就不同了,他就好比是一个你的私人翻译官,你想让机器干的每一件事,都可以说给翻译官听,他负责把你的话翻译给机器听,然后机器按照翻译内容去执行。当你想直接对机器下达命令的时候,你便可以直接走进他的办公室,当着面,你说一句,他翻译一句给机器,然后机器立马执行。而 交互式的Python解释器环境 就好比于你的翻译官所在的办公室,你可以随时和你的翻译官交流沟通你的想法。当然你也可以把想要让机器执行的事情,一件一件按照顺序写在文件上,然后扔给你的翻译官,让他好好的一句一句翻译给机器去执行。而这就好比于你把写好的脚本文件一次性的交给Python解释器去解释执行。0a109cb35f5e809931812db5e183cd2737fdd829.jpg

我想,没有接触过Python这类脚本语言的,大概明白什么是解释器了吧,也应该明白了解释型的脚本语言和编译型的语言的区别。

MicroPython虽然在很大程度上都能无缝的支持Python的语法,Python的理念,但是,由于MicroPython是设计运行在微处理器上的,所以他在某些方面实现了精简以此来保障性能。同时在某些地方,MicroPython和普通的Python解释器存在一些微小的差异,所以说约等于。但这丝毫不会影响到你学习并使用Python去控制硬件的乐趣。

现在,你可以再尝试着去理解一下什么是MicroPython:

MicroPython *约等于 *一个可以运行在 微处理器 上的 Python解释器,它使得我们可以编写Python脚本来控制硬件。

Python更适合作为初学者的入门语言

但是在很多在大学中,我们的老师依旧选择C语言作为入门的编程语言,选择C51单片机让大家入门硬件控制,笔者在大学时对于这两者的学习都有亲身经历,说起来一点都没有感受到编程和创造的快乐。在C语言上,吃尽了苦头且没有吃到过甜头,更不用说C51了。

我切身的感受到,要想熟练的使用C语言,这需要学习者花费更多的精力去理解引用,指针等等对于一个新手而言完全搞不清楚的概念。而且当我们使用C语言开发时,一个很小的功能就需要花费很多行代码去实现。就拿最基本的拼接字符串而言:#include

#include

int main ()

{

char str[50];

strcpy (str,"hello, micropython!");

strcat (str,"hello, 1ZLAB!");

puts (str);

return 0;

}

首先,对于不懂C语言的人来说,代码的可读性并不是很高,其次,实现步骤繁琐,需要用到额外的string库,同时在变量的声明时你还需要考虑变量的类型,长度等问题,你更需要明白str字符串数组的指针意味着什么...

如果是Python代码,事情就没有那么的繁琐了:str1 = 'hello, micropython!'

str2 = 'hello, 1ZLAB!'

print(str1 + str2)

即使你没怎么学过编程,这三行代码,我估计你也能够大致明白他在干什么。

C语言固然很重要,他有着十分必要的价值,CPython和MicroPython都是由C语言所实现的。但是C语言需要你对计算机组成,对硬件底层有着十分深刻的认识,才能有所驾驭。除非兼顾硬件底层和追求性能,否则C语言已经无法满足当今的众多应用场景的需求了。

而Python学习成本简单,且应用场景几乎渗透到了各个方面:科学计算

数据挖掘

Web后台

图像处理

人工智能

...等等,还有本教程想要教会你的硬件控制

所以学会了Python,你有很多发展的方向供你选择。同时我们1Z实验室认为:

Python已经不再是单纯的一门计算机编程语言,它更是一个无所不能的工具,我们可以使用Python让一些复杂的事情,变得简单。

MicroPython VS 传统硬件开发¶

对于传统的硬件开发而言,大多使用C/C++这类编译型语言。

这种开发方式往往需要以下几个步骤:编写代码

编译代码

烧录到芯片

运行程序4da3189ec86b94d55d3ab219866c24c13f65481b.jpg

在这种模式下,当你发现自己的代码里有一行出了bug,即使是很微小的改动就能够修复,但你仍旧需要重新执行编译和烧录,才能够正确的运行。

而对于MicroPython而言,只要我们给芯片刷入了MicroPython固件,(结合我们上节所解释的解释器的概念,这就相当于我们为自己雇佣了一个私人翻译官,随时在芯片里等待着为我们翻译解释代码给芯片去执行。)之后的一切就简单得多。我们可以以两种方式来进行开发:进入交互式解释器 测试和运行代码

我们可以进入交互式的解释器环境随时输入代码执行(进入这位翻译官的办公室,当面发号施     令),发现代码有误,可以立即更改。

将代码保存到文件系统,让解释器开机之后按特定规则去执行。

   我们还可以将代码整理好,保存到MicroPython的文件系统中(没错这就相当于这位翻译官的文件夹,你可以让这位翻译官按照你规定的顺序去执行这些文件中的代码)。MicroPython默认开机后从boot.py开始执行,然后开始执行main.py。abbdde4a65f7c58a6dee476738c0cae6bc417903.png

因此我们根本无需因为代码的更改而反复编译代码和烧录固件,只需要简单的更改文件系统对应脚本文件中的内容即可。

可见,MicroPython的开发方式更加轻便和灵活。

<think>好的,用户现在问的是MicroPythonPython的关系。我需要先回顾之前的对话,确保回答的一致性。之前用户询问是否应该学习C++,特别是针对ESP8266开发。现在他转向了MicroPythonPython的关系,可能是在寻找替代方案,或者在比较两者之间的区别适用场景。 首先,用户可能对Python有一定了解,但MicroPython对他来说可能是个新概念。我需要明确两者的联系区别MicroPythonPython 3的子集,专为微控制器设计,所以核心点应该是它们的关系,以及各自的优缺点。 用户可能想知道,如果他熟悉Python,是否能够轻松过渡到MicroPython,或者在哪些情况下应该选择其中一个。此外,用户之前提到ESP8266,所以需要结合这个硬件平台来举例说明,比如代码示例,性能差异,资源占用等。 需要分析两者的相同点不同点。相同点比如语法相似,标准库部分兼容。不同点则包括运行环境(微控制器 vs 通用计算机)、性能、资源限制、支持的库等。还要提到MicroPython特有的硬件访问功能,比如直接控制GPIO,而Python通常不涉及这些。 另外,用户可能关心学习路径,是否需要先学Python再学MicroPython,或者是否可以单独学习MicroPython。同时,要指出在资源受限的环境下,MicroPython的优势局限性,比如适合快速开发但效率可能不如C++。 还要考虑用户可能的后续问题,比如在ESP8266项目中如何选择语言,是否需要根据项目复杂度来决定使用MicroPython还是C++。因此,在回答中可以适当引导,比如简单项目用MicroPython,复杂或需要高性能的用C++,但用户现在的问题主要是两者的关系,所以需要紧扣主题。 需要确保语言简洁,结构清晰,分点列出,可能用对比表格或示例代码来说明。同时,避免使用过多技术术语,保持易懂。最后,总结适用场景,帮助用户根据需求选择合适的技术。</think>MicroPython Python 是**同一语言的不同实现版本**,前者是后者的精简子集,专为嵌入式设备设计。以下是详细对比: --- ### 一、**核心关系** #### 1. **语法继承** - MicroPython **完全兼容 Python 3 语法**,例如条件判断、循环、函数定义: ```python # Python MicroPython 通用代码 def toggle_led(pin): led = Pin(pin, Pin.OUT) led.value(not led.value()) # 反转LED状态 ``` - 支持 `列表推导式`、`lambda 表达式` 等高级特性。 #### 2. **标准库裁剪** - MicroPython 保留了 Python **约 30% 的核心库**(如 `sys`、`math`、`json`),但移除了 `numpy`、`pandas` 等大型库。 - 新增**硬件操作库**(如 `machine` 模块控制 GPIO): ```python from machine import Pin, ADC sensor = ADC(0) # 读取ESP8266的A0引脚 ``` --- ### 二、**关键差异** | **特性** | **Python** | **MicroPython** | |-------------------|--------------------------------|--------------------------------| | **运行环境** | PC/服务器(x86/ARM64) | 微控制器(ESP8266/ESP32/RP2040)| | **内存占用** | 通常需数百MB内存 | 最低只需 16KB RAM(如STM32F4) | | **性能** | 快(JIT优化如PyPy) | 慢(ESP32上约比C++慢10-100倍) | | **硬件控制** | 依赖第三方库(如RPi.GPIO) | 原生支持(直接操作GPIO/I2C) | | **开发工具** | PyCharm/VSCode + 丰富调试工具 | 简易IDE(Thonny)或命令行 | --- ### 三、**典型应用场景** #### 1. **Python 更适合** - 数据分析:用 `pandas` 处理 CSV 文件 - 机器学习:基于 `TensorFlow` 训练模型 - Web开发:Django/Flask 搭建后台 #### 2. **MicroPython 更适合** - **ESP8266 物联网设备**:快速实现传感器数据上传 ```python import network sta_if = network.WLAN(network.STA_IF) sta_if.connect("WiFi名称", "密码") # 连接WiFi ``` - **教育项目**:用 `BBC micro:bit` 教学生编程 - **快速原型验证**:无需编译,直接通过REPL调试 --- ### 四、**性能与资源权衡** - **优势**:MicroPython 代码可直接运行于 ESP8266(4MB Flash),开发效率高 - **劣势**: - 浮点运算慢(ESP32 上 1秒 ≈ 10^6次加法,而 C++ 可达 10^8次) - 内存不足时可能崩溃(需手动管理 `gc.collect()`) --- ### 五、**如何选择?** - **学 MicroPython 若**: - 目标是快速实现嵌入式原型(如智能家居传感器) - 已熟悉 Python 基础语法 - 硬件资源充足(ESP32 比 ESP8266 更适合) - **坚持用 Python 若**: - 项目涉及复杂算法或大数据处理 - 需要成熟的第三方库支持 --- ### 六、**互通性与学习建议** - **代码迁移**:大部分纯逻辑代码(如数据处理函数)可在两者间直接复用 - **学习路径**: 1. 先掌握 Python 基础(推荐《Python Crash Course》) 2. 通过 MicroPython 实践硬件交互(如用 ESP8266 制作温湿度监测器) 3. 深入优化:混合使用 C++ 编写高性能模块(通过 MicroPython 的 `FFI` 接口调用) --- **总结**:MicroPython = Python 的“嵌入式特化版”,牺牲部分性能换取硬件易用性,适合物联网快速开发,但复杂项目仍需结合 C++。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值