源码编译micropython到esp32,你可以试试

授人以渔

你有没有想过,一年后你再看这篇文章,是不是已经过时? 我是技术人员,给你演示过程,同时会告诉你方法,方法不会过时。 你可以回复消息,我会持续修正过时错误的部分

源码编译,验证质量

micropython是多年的一个框架,认可度极高。我想知道他对官方支持的芯片,是不是友好。 行业喜欢把代码交叉编译叫移植,官方支持的芯片,一般不叫移植。本来就支持嘛,那你就应该支持好, 别让我们再改bug嘛。

小知识

git config --global http.proxy http://127.0.0.1:xxxxx

git config --global https.proxy http://127.0.0.1:xxxxxx

git config --global --unset http.proxy

git config --global --unset https.proxy

上面这两行是配置github的网络的, 很多人github很慢, 需要做这个修改。看不懂问谷歌。 因为很多包在网上,很慢,容易断。不要让这些非技术原因阻碍你。

还有一个方法是云平台买一台linux服务器,按量付费买1天,地点选海外。在上面下载编译。速度很快。

不要搜教程

我还是手贱搜了一下, 有知乎,csdn,和b站。我看了一下文字版本的。 都是介绍他是怎么编译的, 结果是全错。都过时了。

如何硬刚源代码

  1. 搜 micropython 找到官网 https://micropython.org/
  2. 点击下载或者其他地方或者github直接搜,找到git地址: MicroPython is developed using git for source code management, and the master repository can be found on GitHub at github.com/micropython/micropython.
  3. 看首页说明,里面有编译方法。使用make作为编译脚本。挺好。页面写了交叉编译的方法和支持板子的方法 这里有个小坑,对应板卡编译的时候忘记写make命令了
  4. 针对不同的板卡移植还有一个更详细的说明。 在Supported platforms & architectures分类下找到,自己的板子 esp32 – Espressif ESP32 SoC (including ESP32S2, ESP32S3, ESP32C3). 点击esp32,进入板子页面 https://github.com/micropython/micropython/blob/master/ports/esp32/README.md

大方向如下

1, 安装特定版本的idf,如果已经下载了。就checkout指定版本。(特别好的方法。保证所有人环境一致)

$ git clone -b v5.0.4 --recursive https://github.com/espressif/esp-idf.git
  1. 按照idf要求,执行安装脚本,导出脚本
$ cd esp-idf
$ ./install.sh   # (or install.bat on Windows)
$ source export.sh   # (or export.bat on Windows)
  1. 编译交叉编译相关
$ make -C mpy-cross
  1. 编译板子相关
$ cd ports/esp32
$ make submodules
$ make
  1. 添加用户组是为了可以访问usb串口。这个我macos不需要,看系统要求。我跳过了。
  2. 文档说了串口路径。大概率每个人都不一样。 一定要注意是usb串口驱动,如果是猫驱动,需要重装,我以前文章提过这个坑。 打开Makefile直接改
Device serial settings.
PORT ?= /dev/cu.wchusbserial54E20303731(我已改,你的不一样。)
  1. 重新编译下载
make erase # 串口正确就能正常擦除
make BOARD=ESP32_GENERIC_S3 # 一定要选对板子。esp32s3是我的板子
make BOARD=ESP32_GENERIC_S3 deploy # 上一步指定不是默认板子,那这一步也要指定。

8.ok, 重启板卡,看串口能显示提示符号就成功了。

验证

>>> import sys
>>> sys.version
'3.4.0; MicroPython v1.23.0-preview.176.g90e517862.dirty on 2024-03-05'

help() # 执行这个函数,里面有wifi的例程可以看一下能不能搜到Wi-Fi路由器。