小白也能快速学会的Micropython编译指南

2023-11-20

小白也能快速学会的Micropython编译指南

大家好,我是CSDN上的 上坂龍二 哦,今天给大家带来的是:如何快速一次成功地将Micropython和自己喜欢的模块编译进自己的Esp32固件中哦~

事前准备

Python

python的环境都可以,由于需要pip,推荐使用python3,pip模块更好用一些

Windows下访问https://www.python.org/下载安装python

Ubuntu下 apt install python3 python3-pip

MacOS下 curl https://bootstrap.pypa.io/get-pip.py | python3

make

Windows下需要单独安装,Linux和MacOS应该都是自带这玩意儿的

Windows下访问http://gnuwin32.sourceforge.net/packages/make.htm

下载Complete package, except sources版本的Setup

安装后手动将安装目录加入PATH就可以正常在powershell里面使用make了

Git

同上Windows下需要单独安装,Linux和MacOS应该都是自带这玩意儿的

Windows下访问https://gitforwindows.org/下载安装git,开启命令行支持更方便

第一步 - 克隆并配置ESP-IDF及工具链

1、准备好一个纯英文的专用路径,并且在你的终端中打开它

例如:

/Users/username/esp

/home/username/esp

D:\Workspace\esp

这样的路径,完全不要出现特殊字符和中文哦(如果不知道特殊符号如何界定的话,就只用英文吧)

在下文中,我们会将这个路径以 %ESP_ROOT% 来代替哦

在这一步准备好后,我们将在后续步骤中默认在终端窗口中已经进入了%ESP_ROOT%路径了

2、使用git来将esp-idf克隆进%ESP_ROOT%目录下

在这里,我们直接运行

git clone https://github.com/espressif/esp-idf.git

如果网络不是很好的话,需要挂上梯子,或者多尝试几遍、耐心等待一下

克隆下来后,将esp-idf设置为IDF_PATH

Linux及MacOS下应该在对应的shell配置文件中加入

export IDF_PATH=%ESP_ROOT%/esp-idf

Windows直接打开高级系统设置来配置路径和变量

3、访问网站,下载并将工具链加入PATH中

接下来,从 MacOS点这里 Linux点这里 Windows点这里 获取到相关的toolchain

将下载到的压缩文件解压到%ESP_ROOT%下并且将工具链中的bin文件夹加入到PATH中

Linux及MacOS下应该在对应的shell配置文件中加入

export PATH= P A T H : PATH: PATH:HOME/esp/xtensa-esp32-elf/bin

Windows直接打开高级系统设置来配置路径和变量

第二步 - 克隆并配置Micropython

1、克隆micropython项目到本地

回到%ESP_ROOT%路径下,使用git克隆micropython

git clone https://github.com/micropython/micropython.git

在确认无错误克隆下项目后,进入%ESP_ROOT%/micropython目录下,使用

git submodule update --init --recursive

来将依赖全部更新好,同样的,如果中间出现failed或者错误的话,要重复运行这个指令直到运行后什么都不提示为止哦

2、为项目选定ESP-IDF版本

打开%ESP_ROOT%/micropython/ports/esp32/Makefile,里面有个部分像这样写着

# The git hash of the currently supported ESP IDF version.
# These correspond to v3.3.2 and v4.0.1.
ESPIDF_SUPHASH_V3 := 9e70825d1e1cbf7988cf36981774300066580ea7
ESPIDF_SUPHASH_V4 := 4c81978a3e2220674a432a588292a4c860eef27b

这里指明了需要的esp-idf的版本和对应的checkout分支哦,因为3.3.2对于网络功能的支持更全一些,所以这里选择用v3的版本(记住你自己的makefile文件中记载的分支代码,因为需要制作的micropython版本不同,我这里的可能和你需要的不一样),所以我将这里的9e70825d1e1cbf7988cf36981774300066580ea7简称为 %ESP_IDF_V3_CHECKOUT%

然后回到%ESP_ROOT%/esp-idf文件夹下,执行

git checkout %ESP_IDF_V3_CHECKOUT%

git submodule update --init – recursive

将esp-idf指定版本后,更新所有的依赖,方便后续编译

3、创建虚拟的python环境

进入%ESP_ROOT%/micropython/ports/esp32目录下,依次执行

python3 -m venv build-venv

source build-venv/bin/activate

pip install --upgrade pip

pip install -r %ESP_ROOT%/esp-idf/requirements.txt

4、完成make前最后一步配置

进入%ESP_ROOT%/micropython/mpy-cross目录下,执行

make mpy-cross

进入%ESP_ROOT%/micropython/ports/esp32目录下,执行

make submodules

第三步 - 更改并编译你的固件

到这里,我们已经可以直接使用make来编译制作我们的固件了~

但是,既然都自己编译了,那么肯定有一些东西是我们希望能够添加到固件中的不是吗?

那么我们只需要知道以下几点哦

1、ntptime.py在esp8266目录下,可以修改一下让授时自动加上时区方便观看

2、添加自己写的py文件在modules文件夹中,可以将对应的模块编译到固件中哦

3、添加C语言编写的模块时,在%ESP_ROOT%下新建一个c_modules目录,将需要的模块放进去,然后在编译的时候加上USER_C_MODULES=%ESP_ROOT%/c_modules/ all参数即可

4、可以自己编写一个makefile,按照实际情况更改下面的内容即可

ESPIDF ?=

BOARD ?= GENERIC

# PORT ?= /dev/ttyUSB0

# FLASH_MODE ?= qio

# FLASH_SIZE ?= 4MB

# CROSS_COMPILE ?= xtensa-esp32-elf-

# USER_C_MODULES=%ESP_ROOT%/c_modules/ all

include Makefile

最后,使用make命令,即可完成对于你的专属固件的编译哦

后记

写的时候姑且还是蛮开心的,希望大家看的时候也能够一样开心吧

git操作的时候千万不要发脾气哦~

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

小白也能快速学会的Micropython编译指南 的相关文章

  • 如何在算术表达式的结果上添加 SQLAlchemy 标签?

    我如何将这样的东西翻译成 SQLAlchemy select x y as difference 我知道该怎么做 x label foo 但我不确定在哪里放置下面的 label 方法调用 select table c x table c y
  • Pytest:如何使用从夹具返回的列表来参数化测试?

    我想使用由固定装置动态创建的列表来参数化测试 如下所示 pytest fixture def my list returning fixture depends on other fixtures return a dynamically
  • 为 PyCharm 中的所有配置设置相同的环境变量

    我有一个与 Celery 和很多不同的工作人员一起的项目 如何避免每次将 PyCharm 中的环境变量复制粘贴到每个运行 调试配置 有什么方法可以在项目设置中设置它们吗 找到解决方案here https stackoverflow com
  • multiprocessing.freeze_support()

    为什么多处理模块需要调用特定的function http docs python org dev library multiprocessing html multiprocessing freeze support在被 冻结 以生成 Wi
  • 使用 Python 解析 XML,解析外部 ENTITY 引用

    在我的 S1000D xml 中 它指定了一个带有对公共 URL 的引用的 DOCTYPE 该 URL 包含对包含所有有效字符实体的许多其他文件的引用 我使用 xml etree ElementTree 和 lxml 尝试解析它并得到解析错
  • 以编程方式将列名称添加到 numpy ndarray

    我正在尝试将列名称添加到 numpy ndarray 然后按名称选择列 但这不起作用 我无法判断问题是在添加名称时出现 还是在稍后尝试调用它们时出现 这是我的代码 data np genfromtxt csv file delimiter
  • 熊猫记忆

    我有冗长的计算 我重复了很多次 因此 我想使用记忆 诸如jug http packages python org Jug and joblib http packages python org joblib memory html 与Pan
  • 如何像在浏览器中一样检索准确的 HTML

    我正在使用 Python 脚本来呈现网页并检索其 HTML 它适用于大多数页面 但对于其中一些页面 检索到的 HTML 不完整 我不太明白为什么 这是我用来废弃此页面的脚本 由于某种原因 每个产品的链接不在 HTML 中 Link http
  • 如何解码 dtype=numpy.string_ 的 numpy 数组?

    我需要使用 Python 3 解码按以下方式编码的字符串 gt gt gt s numpy asarray numpy string hello nworld gt gt gt s array b hello nworld dtype S1
  • 将具有不同大小的行的数据加载到 Numpy 数组中

    假设我有一个包含如下数据的文本文件 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 如何将它加载到 numpy 数组中 使其看起来像这样 1 2 3 4 5 0 6 7 8 0 0 0 9 1
  • 从 python 中的缩进文本文件创建树/深度嵌套字典

    基本上 我想迭代一个文件并将每行的内容放入一个深层嵌套的字典中 其结构由每行开头的空格数量定义 本质上 目标是采取这样的事情 a b c d e 并将其变成这样的东西 a b c d e Or this apple colours red
  • 与函数复合 UniqueConstraint

    一个快速的 SQLAlchemy 问题 我有一个 文档 类 其属性为 数字 和 日期 我需要确保没有重复的号码同年 是 有没有办法对 数字 年份 日期 进行UniqueConstraint 我应该使用唯一索引吗 我如何声明功能部分 SQLA
  • 将参数传递给 __enter__

    刚刚学习 with 语句尤其是这篇文章 http effbot org zone python with statement htm 问题是 我可以传递一个参数给 enter 我有这样的代码 class clippy runner def
  • django如何将字符串转换为模块?

    我试图了解 django 的另一个神奇之处 它可以将字符串转换为模块 In settings py INSTALLED APPS声明如下 INSTALLED APPS django contrib auth django contrib c
  • Scikit Learn - K-Means - 肘部 - 标准

    今天我想学习一些关于 K means 的知识 我已经了解该算法并且知道它是如何工作的 现在我正在寻找正确的 k 我发现肘部准则作为检测正确的 k 的方法 但我不明白如何将它与 scikit learn 一起使用 在 scikit learn
  • DRF:以编程方式从 TextChoices 字段获取默认选择

    我们的网站是 Vue 前端 DRF 后端 在一个serializer validate 方法 我需要以编程方式确定哪个选项TextChoices类已被指定为模型字段的默认值 TextChoices 类 缩写示例 class PaymentM
  • 在 python 查询参数中使用 %20 而不是 + 作为空格

    我使用 python requests 编写了以下 python 脚本 http requests readthedocs org en latest http requests readthedocs org en latest impo
  • 使用Python重命名目录中的多个文件

    我正在尝试使用以下 Python 脚本重命名目录中的多个文件 import os path Users myName Desktop directory files os listdir path i 1 for file in files
  • 如何将 Pandas Dataframe 中的字符串转换为字符列表或数组?

    我有一个名为的数据框data 其中一列包含字符串 我想从字符串中提取字符 因为我的目标是对它们进行一次性编码并使之可用于分类 包含字符串的列存储在预测因子如下 predictors pd DataFrame data columns Seq
  • 从 git 签出后 nuget dll 丢失

    I have a C solution containing different projects On those projects I have some normal nuget packages like Newtonsoft Js

随机推荐

  • 大数据复习笔记——hive

    这次主要讲解一下平常使用较多的数据仓库hive 目录 一 Hive 1 Hive的介绍 2 Hive的搭建模式 a 内嵌Derby模式 b Local方式 c Remote方式 3 Hive的数据库和表操作 a 创建数据库 b 删除数据库
  • mysql-bin.index文件_MySQL 启动报错:File ./mysql-bin.index not found (Errcode: 13)

    Linux下安装初始化完MySQL数据库之后 使用mysqld safe启动mysql数据库 如下发现 启动失败 root SVNServer bin mysqld safe user mysql 或 root SVNServer bin
  • 简单看看很好用的Vite

    前言 Vite对于前端到底需不需要打包提出了自己的观点 在某些情况下他做的确实更好 打包 首先回顾一下什么是打包 从结果导向来看 打包使得开发人员所写的代码和最终运行的代码是不甚相同的两个样子 这样做有什么好处呢 在HTTP2普及之前 浏览
  • 相机开启图像采集与结束图像采集的步骤

    如何开启图像采集线程与关闭该线程 步骤如下 一 按下采集按钮 开始创建一个图像采集线程 ch 按下开始采集按钮 en Click Start button void CBasicDemoDlg OnBnClickedStartGrabbin
  • ASI ‘CFNetwork SSLHandshake failed (-9824)‘

    文章目录 ASI CFNetwork SSLHandshake failed 9824 问题 解决 思考 参考 ASI CFNetwork SSLHandshake failed 9824 10年的老项目 网络库使用是ASIHTTPRequ
  • 微信小程序自动化测试pytest版工具使用方法

    mini https github com zx490336534 pytest mini 微信小程序自动化测试pytest插件 工具 基于MiniTest进行pytest改造 使用方法 准备测试小程序 根据miniprogram demo
  • 自己动手写操作系统(一)

    本系列文章将一步步实现一个简单的操作系统 实验环境是在Linux系统下通过Bochs虚拟机运行我们自己写的操作系统 一 实验环境搭建 1 Ubuntu的安装 Windows用户可以选择在虚拟机中安装Ubuntu 具体安装教程可自行搜索 2
  • UDIMM、LRDIMM、RDIMM三种内存的区别

    目前使用的内存条类型 DIMM 主要有三种 UDIMM RDIMM和LRDIMM UDIMM UDIMM 全称Unbuffered DIMM 即无缓冲双列直插内存模块 指地址和控制信号不经缓冲器 无需做任何时序调整 直接到达DIMM上的DR
  • JavaScript Array splice() 方法

    定义 splice 方法向 从数组添加 删除项目 并返回删除的项目 用法 array splice index howmany item1 itemX 参数 index index 必需 类型为整数 指定在什么位置添加 删除项目 使用负值指
  • Go_关键字、编译、转义字符

    关键字 关键字是指被go语言赋予了特殊含义的单词 共25个 关键字不能用于自定义名字 只能在特定语法结构中使用 break default func interface select case defer go map struct cha
  • 汽配企业如何利用MES管理系统优化生产流程

    随着汽车市场个性化需求不断增强 汽配企业急需数字化转型来满足客户需求 如何优化生产流程 提高生产效率和产品质量成为了关键问题 汽配企业MES管理系统可以通过数字化技术和智能化设备 优化生产流程 提高生产效率和产品质量 下面 我们将介绍汽配企
  • react(craco)移动端使用postcss-px-to-viewport自适应布局

    Craco 使用postcss px to viewport devDependencies craco craco 6 4 3 xianzhengquan postcss px 2 vw 0 0 1 postcss 8 3 0 peerD
  • java I/0操作 FileWriter类

    package filewriter p1 import java io FileWriter import java io IOException public class FileWriterDemo 获取当前系统的换行符 获取指定键指
  • ssh Forward X11

    参考链接 https www jianshu com p 24663f3491fa https www cnblogs com tsfh p 9022170 html https blog csdn net lvbian article d
  • Vue中修改浏览器图标Logo

    1 找到index html文件 2 修改这段代码中的图片 3 图标没有变化的话清除一下游览器缓存
  • linux查看根目录下所有文件夹大小的方法

    linux查看根目录下所有文件夹大小的方法如下 1 进入根目录 cd 2 使用命令 du sh 查看根目录下每个文件夹的大小3 进入占用空间比较大的文件夹 然后再使用2中命令查找大文件 原文地址 https zhidao baidu com
  • git的使用场景

    Git 是一种分布式版本控制系统 常用于管理软件开发过程中的代码 以下是 Git 的一些常见使用场景 代码版本控制 Git 可以跟踪代码的历史变更 并在必要时还原代码到以前的某个版本 分支管理 Git 可以创建多个分支 使得多个开发者能够并
  • 以太坊创始人Vitalik Buterin北京演讲:Casper与分片技术最新进展

    三言财经6月3日现场报道 在今天的以太坊技术及应用大会上 以太坊创始人Vitalik Buterin做了题为 Casper与分片技术最新进展 的主题演讲 V神在演讲中阐述了Casper和分片的技术流程 以及如何在系统中成为验证者验证节点 对
  • 中国中间件第一人---袁红岗

    最早开发Windows上的企业应用软件 打造独立知识产权的EJB服务器Apusus 很多JAVA程序员对袁红岗极其佩服 源于他做了很多人不敢想更不敢做的事情 这就是他打造了国产的EJB服务器 很快 金蝶将在国内推出自主产权EJB服务器的3
  • 小白也能快速学会的Micropython编译指南

    小白也能快速学会的Micropython编译指南 大家好 我是CSDN上的 上坂龍二 哦 今天给大家带来的是 如何快速一次成功地将Micropython和自己喜欢的模块编译进自己的Esp32固件中哦 事前准备 Python python的环