ESP32-S3 搭建 micropython 开发环境,固件编译,烧录
简述
上手了一块乐鑫科技官方推出的ESP32-S3-DevKitC-1开发板,发现 ESP32-S3 的综合性能较比前两代有着非常明显的提升,wifi与蓝牙功能,更充足的外设扩展能力,可以看出其在未来物联网开发应用中将占有更大的地位与应用场景。
micropython实现了大部分python 3 特性和语法,易学易上手,验证程序效果无需编译直接下载进芯片运行。有python基础的自然知道好用,没python基础的,上手难度也绝对远低于其他编程语言,在开源社区有多年积累的丰富资源,代码易读性高,理解快,就如同python一样拥有极强的生命力与应用价值。
micropython团队在GitHub上的代码维护是很积极的,芯片支持,功能更新,BUG修复,所以掌握自行编译最新的micropython固件是很有必要的。
在此总结一番 micropython 开发环境的搭建,ESP32-S3 的固件编译,烧录的一整套流程,以便大家上手应用。
Linux
Linux系统目前对于 micropython 来说是必须的。
如果已经有在用的Linux系统就可直接进行后续步骤,如果正在使用Windows系统则推荐一条上手Linux最便利的路径,安装VMware虚拟机+Ubuntu系统。
其他上手Linux的方法多不胜数,各种虚拟机,各色Linux发行版本百花齐放,但若说目前最低门槛我认为就是这条,仅需在搜索引擎里搜索 VMware Ubuntu 即可获取很成熟的配置经验与资源。
关于软件本体及系统镜像文件建议直接从各自的官方网站上获取,安全可靠。
esp-idf环境搭建
ESP32系列芯片的开发绝大部分都是经由乐鑫科技提供的SDK软件开发工具包 esp-idf 来进行的, micropython 也需要应用此SDK。
可以直接参考乐鑫科技的 esp-idf中文快速入门指南 来搭建。
以下是简要汇总。
首先需要在home目录下创建一个文件夹。
打开一个 Terminal 终端 输入以下命令创建文件夹:
mkdir -p ~/esp
进入这个文件夹:
cd ~/esp
输入以下两个命令之中的一个,从github上克隆esp-idf到这个文件夹里,建议用后面一个命令,--depth=1命令可以使得克隆时不用获取历史提交(commit),对于这样一个大型项目来说可以极大减少下载时间。将https替换为git则有可能解决各种下载失败的问题,如何还是不行则需要再另寻他方,网络疑难杂症容易使人头疼脑热:(
git clone --recursive https://github.com/espressif/esp-idf.git
git clone --recursive git://github.com/espressif/esp-idf.git --depth=1
进入esp-idf文件夹:
cd ~/esp/esp-idf
输入以下命令安装 ESP-IDF 使用的各种工具,比如编译器、调试器、Python 包等,可以一次单独只为一个芯片型号配置,如 ./install.fish esp32s3 ,建议直接用以下命令全部安装,一劳永逸:
./install.sh all
如果遭遇网络问题,多次尝试无果后,也可以试试替换下载源到 Espressif 下载服务器:
cd ~/esp/esp-idf
export IDF_GITHUB_ASSETS="dl.espressif.com/github_assets"
./install.sh all
仓库克隆和工具安装都弄好后,在需要运行 ESP-IDF 的终端窗口运行以下命令即可,例如在micropython开始编译之前就必须要使其运行起来:
. $HOME/esp/esp-idf/export.sh
运行后输入命令idf.py --help可以查看帮助,idf.py --version查看当前版本,idf.py --list-targets检查当前支持的芯片型号。
在Ubuntu中为esp-idf创建快捷命令
用命令来打开文件并修改对于不熟悉linux的生手来说还需要多加学习和适应,我们可以利用好 Ubuntu 比较完善的图形化操作界面,如同在windows里修改文件一般来修改linux里的文件,为esp-idf创建快捷命令。
在Ubuntu桌面打开home文件夹(一般它的名字是你的用户名),在右上角的选项栏中开启显示隐藏文件。

双击这个.bashrc文件,即可用文本编辑器打开它。
在其最后一行,输入以下命令并保存文件。
# get run esp-idf
alias get_idf='. /home/wind/esp/esp-idf/export.sh'

打开一个终端,输入以下命令使之生效:
source ~/.bashrc
以后在任何终端中输入以下命令即可运行ISP-IDF:
get_idf
这比前文提到的要容易记忆很多,也可以自行替换成任何与其他命令不冲突的命令文本来使用。
micropython环境搭建
可以直接参考GitHub:micropython/port/esp32中的描述来搭建,以下是中文简述,不想看英文的可以参考一下。
克隆micropython仓库到本地,我选择在esp文件夹中再创建一个mpy文件夹来放置。
在一个终端中打开要放置micropython的文件夹:
cd ~/esp/mpy
输入以下命令克隆仓库:
git clone git://github.com/micropython/micropython --depth=1
进入micropython目录中:
cd micropython/
先输入以下命令编译一下 mpy-coress ,这是为了构建MicroPython交叉编译器,以便将一些内置脚本预编译为字节码,这只需要做一次:
make -C mpy-cross
再打开ESP32的目录:
cd ports/esp32
输入以下命令初始化子模块,这只需要做一次:
make submodules
固件编译
确认ESP-IDF已经运行后,在ports/esp32目录中可以立即输入以下命令尝试编译一个默认设置的ESP32的micropython固件出来:
make
一切顺利的话会在此目录中出现一个build-GENERIC文件夹,且内涵一个firmware.bin文件,这就是适用于ESP32芯片的micropython固件。
如果并不顺利,需要先检查ESP-IDF是否启动,检查ESP-IDF是否是最新版,检查ESP-IDF所用相关工具是否都安装完备,极大部分问题都是由于ESP-IDF或其相关工具出问题所导致的。
选择linux系统也有考虑这部分原因,ESP-IDF在linux系统中配置起来最轻松稳定不容易产生各种疑难杂症。
确认可以正常编译后,就可以开始做ESP32-S3芯片的固件编译了。
在ports/esp32目录可以找到一个Makefile文件,前文中make命令就是直接执行其内部的命令,打开它进行编辑。

第6行设置要编译的型号,此处改成GENERIC_S3即可设置为ESP32S3了,此时保存文件后就可以去终端用make命令开始编译。

关于此Makefile文件,我们可以稍微再了解得细致一些,以便后续自行修改与使用。
第6行BOARD ?=指向的是ports/esp32/boards目录下的文件夹名称,打开后可以看到已经有不少micropython官方支持的板型,在 BOARD ?=后面填入对应板型的文件夹名即可在终端使用make命令编译适用于对应板型的固件。

第12行PORT ?=用于设置将要烧录固件的设备接口。
第13行BAUD ?=用于设置波特率,这将改变烧录速度,也可能对烧录稳定性有影响。
建议在第33行下面增加一行代码,这将在每次使用make命令编译时,在最开始将应用ESP-IDF的idf.py menuconfig命令打开工程配置窗口,方便调整芯片的各项功能,在以后熟悉修改工程配置文件后可以删除此行,如果编译时不需要修改配置也可以直接按一下键盘的esc键退出,后续将自动完成编译。
idf.py $(IDFPY_FLAGS) menuconfig


第44行后面的代码比较容易直观理解,例如在终端中使用make clean命令等同于idf.py fullclean命令,完全删除工程文件夹内的所有文件。
固件烧录
对于ESP32-S3芯片,目前ESP-IDF尚且不支持通过芯片的USB接口来将固件烧录进flash,暂不知道为什么擦除flash却可以,推测后期ESP-IDF的更新会支持,届时本文也将更新相应内容。
如果是使用乐鑫科技官方的FLASH下载工具 flash_download_tool 在Windows PC平台则可以直接通过ESP32-S3芯片USB接口将固件烧录进flash。
无论用什么方法,在对flash进行操作前,要保证芯片进入固件下载模式,对于ESP32-S3-DevKitC-1开发板,进入固件下载模式的按键顺序是:
按住BOOT键,按一下RESET键并松开,松开BOOT键。
其他设备或是出现的问题则需要参考ESP-IDF编程指南中关于烧录过程中可能遇到的问题的描述或者是芯片手册上的描述。
以下将简述两种烧录方法。
Ubuntu终端make命令烧录
目前在Ubuntu系统中使用终端命令的方法暂且只支持通过ESP32-S3芯片的UART串口烧录固件到flash。通常需要一个 ch340 或 cp2102 芯片将UART串口转换为USB与系统连接,ESP32-S3-DevKitC-1开发板自带一个,通过其UART转USB的接口与PC的USB接口连接即可。
烧录前要确认一下系统是否识别到设备,通常需要先在VMware虚拟机中做好USB连接的相关设置才行。
在不接入待烧录的设备的情况下,先在终端中输入以下命令查看当前所有设备:
ls /dev/tty*
接入设备,再输入此命令,正常的话可以看到多出一个USB设备,如果仅有接入这一个设备,通常就是ttyUSB0,在Makefile文件中无需修改接口名,若是别的就需要做出相应修改并保存。
确认当前终端里ESP-IDF运行中,且固件编译已经完成,ESP32-S3芯片处于固件下载模式。
先用擦除命令擦除当前芯片的flash,再用烧录命令将固件烧录进flash中。
make erase
make deploy
如果遇到权限问题,使用如下命令获取此USB接口的权限:
sudo chmod 777 /dev/ttyUSB0
Windows FLASH下载工具烧录
将firmware.bin文件从其对应的工程文件夹中拷贝出来,放到Windows系统下的文件夹里。VMware虚拟机拷贝文件很容易,在Ubuntu里选择文件并复制,再到Windows的文件夹里粘贴即可将其拷贝出来,可以修改一下文件名以便记录是用于什么芯片,在什么时候编译的。

打开乐鑫科技的FLASH下载工具,选择芯片,选择烧录接口的模式,这里就可以选择USB,使用芯片自带的usb接口烧录,如果是ESP32-S3-DevKitC-1开发板就直接用USB口,而不用UART转接出的USB。

在烧录前先确认ESP32-S3芯片是否已经设置为固件下载模式,ESP32-S3芯片是否已被Windows识别,可以到设备管理器中查看对应串口名,如果没有则需要先排除一下是否自动连接到虚拟机的系统里了,如果有则要断开其与虚拟机的连接。
在芯片处于固件下载模式的条件下,修改COM接口为对应的接口,添加固件,对于ESP32-S3芯片要设置flash起始地址为0x0,具体见下图。

可以修改BUAD波特率加快下载速度,但对稳定性可能有影响。
设置好后,先点击ERASE按钮擦除flash,擦除完成后再点击START烧录固件进flash中。
简单验证固件是否有效
推荐使用 PuTTY 串口调试软件,无论在Linux或是Windows中都可以下载使用,操作便捷。
在Linux系统如Ubuntu的终端里使用如下命令安装PuTTY:
sudo apt-get install putty
在终端输入putty命令即可打开,也可直接在应用程序列表找到它。
在Windows系统中,可以在PuTTY官网下载到64位的putty.exe文件,运行即可,无需安装。
PuTTY设置方法如图:

需要注意前面编译的micropython固件默认将调试信息输出在芯片的USB接口而不是UART串行接口,所以此时需要将直连芯片的USB接口与PC连接。
在Linux中,此时的设备接口名称应为ttyACM0,而在Windows中则是一个COM端口,具体名称需查看设备管理器再对于填入。
Speed 一定要设置为 115200 ,这是芯片设计决定的。
点击Open即可打开一个窗口,一般此时并无信息,建议用组合按键ctrl + D软件重启micropython,可看到如下信息。

这就是micropython的 REPL交互式解释器 。
可以直接在此处键入micropython代码,例如:
print("Hello Wind~")
如果没有得到类似上图的信息,乱码或是无响应,则需要回头去检查编译烧录等各项设置流程是否有差错了。
对本文有任何疑问的地方,欢迎留言提问,不一定及时回复,但总会回复的~
ESP32-S3 搭建 micropython 开发环境,固件编译,烧录的更多相关文章
- Fedora15下搭建QT开发环境及编译QT
		
看了不少linux上编译qt的文章,实际上直接通过yum 安装qt是最方便的,请参考<yum安装qt> 不过初步接触fedora,为了了解一下如何在linux上编译.安装开源代码,所以必须 ...
 - Fedora15下搭建QT开发环境及编译QT(提前一键安装完,qt编译所有必需库 yum install gcc-c++ libXtst-devel freetype freetype-devel fontconfig-devel libXrender-devel )
		
看了不少linux上编译qt的文章,实际上直接通过yum 安装qt是最方便的,请参考<yum安装qt> 不过初步接触fedora,为了了解一下如何在linux上编译.安装开源代码,所以必须 ...
 - 【001:ubuntu下搭建ESP8266开发环境--编辑 编译 下载】
		
系统环境:ubuntu 16.04 TLS 64BIT 编辑器: Eclipse CDT 版本 编译器:xtensa-lx106-elf 交叉编译工具链 下载工具:esptool.py pyseria ...
 - mac 下 用 glfw3  搭建opengl开发环境
		
mac 下 用 glfw3 搭建opengl开发环境 下载编译 glfw3 Build Setting 里面, Library Search Paths -> 设置好编译 glfw 库的路径 H ...
 - 单机搭建Android开发环境(二)
		
前文介绍了如何优化SSD和内存,以发挥开发主机的最佳性能,同时提到在SSD上创建虚拟机.为什么不装双系统呢?双系统性能应该会更好!采用Windows+虚拟机的方式,主要是考虑到安卓开发和日常办公两方面 ...
 - 使用virtualenv搭建python3开发环境
		
问题描述 环境: CentOS6.5 想在此环境下使用python3进行开发,但CentOS6.5默认的python环境是2.6.6版本. 之前的做法是直接从源码安装python3,替换掉现有的开发环 ...
 - 搭建Android开发环境附图详解+模拟器安装(JDK+Eclipse+SDK+ADT)
		
——搭建android开发环境的方式有多种,比如:JDK+Eclipse+SDK+ADT或者JDK+Eclipse+捆绑好的AndroidSDK或者Android Studio. Google 决定将 ...
 - 搭建java开发环境、使用eclipse编写第一个java程序
		
搭建java开发环境.使用eclipse编写第一个java程序 一.Java 开发环境的搭建 1.首先安装java SDK(简称JDK). 点击可执行文件 jdk-6u24-windows-i586. ...
 - 单机搭建Android开发环境(五)
		
前文介绍了Android系统开发环境的搭建,本文将简单介绍Android应用开发环境的搭建. 基于Android Studio搭建应用开发环境,相比使用Eclipse简单得多.Android Stud ...
 
随机推荐
- 解决 Asp.Net5 在视频文件下载预览时无法快进的问题
			
前情提要 https://www.cnblogs.com/puzhiwei/p/15265005.html 在解决.Net5 如何修改Content-Disposition实现在线预览的功能后,我又遇 ...
 - C# .NET Core 3.1中使用 MongoDB.Driver 更新嵌套数组元素和关联的一些坑
			
C# .NET Core 3.1中使用 MongoDB.Driver 更新数组元素和关联的一些坑 前言: 由于工作的原因,使用的数据库由原来的 关系型数据库 MySQL.SQL Server 变成了 ...
 - == 和 equals区别
			
== equals是两种字符串的方式 区别 == 是比较两个对象的引用地址值 equals是比较两个对象的具体内容 示例 package com.oop.demo06; public class De ...
 - Android系统编程入门系列之应用间数据共享ContentProvider
			
内容提供者ContentProvider与前文的界面Activity.服务Service.广播接收者BroadcastReveiver,并列称为Android的四大组件,均是需要自定义子类继承上述组件 ...
 - 题解 [CTSC2006]歌唱王国
			
题目传送门 Desctiption 见题面. Solution 人类智慧... 考虑这样一个赌博游戏,现在有一个猴子,它随机从 \(1\sim n\) 中选一个打出来.现在有若干个赌徒,他们一开始都有 ...
 - 数据库已经存在表, django使用inspectdb反向生成model实体类
			
1.通过inspectdb处理类,可以将现有数据库里的一个或者多个.全部数据库表生成Django model实体类 python manage.py inspectdb --database defa ...
 - Frida高级逆向-Hook Native(Java So)
			
Frida Hook Native Frida Hook Java Jni demo: function hook_java() { Java.perform(function () { const ...
 - k8s学习笔记(3)- kubectl高可用部署,扩容,升级,回滚springboot应用
			
前言:上一篇通过rancher管理k8s,部署服务应用扩容,高可用,本篇介绍kubectl命令行部署高可用集群节点,测试升级.扩容等 1.测试环境:3节点k3s,使用其中2节点(ubuntunode1 ...
 - Go语言核心36讲(Go语言进阶技术二)--学习笔记
			
08 | container包中的那些容器 我们在上次讨论了数组和切片,当我们提到数组的时候,往往会想起链表.那么 Go 语言的链表是什么样的呢? Go 语言的链表实现在标准库的container/l ...
 - 【HMS Core 6.0全球上线】华为钥匙环服务,打造跨应用跨形态无缝登录体验
			
华为钥匙环服务(Keyring),是HMS Core在安全领域开放的全新服务,为全球开发者提供用户认证凭据(以下简称"凭据")本地存储和跨应用.跨形态共享能力,帮助您在安卓应用.快 ...