扩展c模块的教程见下文
Esp-idf
如已安装,请见下文
!注意!请安装micropython
支持的esp-idf
版本,否则会出现奇怪的报错
详情见 esp-idf 官方安装文档 (Mac/Linux),以下是适用于我电脑的简单概括
安装依赖
使用homebrew
:
brew install cmake ninja dfu-util ccache
cd ~/Tools
git clone -b v5.4.2 --recursive https://github.com/espressif/esp-idf.git
# 如果github速度慢,可以使用镜像下载
# git clone -b v5.4.2 --recursive https://bgithub.xyz/espressif/esp-idf.git
mv esp-idf esp-idfv5.4
cd esp-idfv5.4
# 国内使用以下命令设置github镜像
# export IDF_GITHUB_ASSETS="dl.espressif.cn/github_assets"
./install.sh
# 将以下命令添加到你的shell配置文件中
alias get_idf='. $HOME/Tools/esp-idfv5.4/export.sh'
# 重启shell或运行:
# source [你的shell配置文件路径]
# 进入esp-idf的环境
get_idf
至此,esp-idf
环境配置成功
Micropython
cd ~/Tools
# 不要忘记进入虚拟环境(如果上面运行过,就不用再运行了)
get_idf
# 克隆micropython仓库
git clone https://github.com/micropython/micropython
# 国内镜像加速
# git clone https://bgithub.xyz/micropython/micropython
sudo chmod a+rwx micropython
cd micropython
# 编译mpy-cross
make -C mpy-cross
cd ports/esp32
make submodules
添加自定义模块
将模块文件夹放入ports/esp32下的modules即可
!注意! 如果模块中含有使用c编译的mpy文件,请阅读以下文档
如果原来的c模块导入了 #include "py/dynruntime.h"
那么就要讲代码转换为使用#
的代码,注意,不只是要修改一行代码include "py/runtim
e.h"
可以让ai帮忙修改,跟他说:
帮我把以下代码转换成使用runtime.h
的c代码,我将要把它编译进micropython
固件
注意事项:static
是小写的,需要定义模块全局字典、模块结构、要默认注册到micropython
之后,在micropython
文件夹下新建一个usrmod
文件夹,进入
创建一个文件夹,用于保存你的一个扩展模块
进入刚创建的文件夹,将你的模块放进去(只要源码,不需要Makefile
)
接下来,新建文件micropython.cmake
,并输入以下内容
add_library(usermod_模块名 INTERFACE)
target_sources(usermod_模块名 INTERFACE
${CMAKE_CURRENT_LIST_DIR}/模块的c文件
)
# 如果项目含有头文件
target_include_directories(usermod_模块名 INTERFACE
${CMAKE_CURRENT_LIST_DIR}
)
target_link_libraries(usermod INTERFACE usermod_模块名)
在usrmod
文件夹中创建一个micropython.cmake
,并输入以下内容:
include(${CMAKE_CURRENT_LIST_DIR}/上面创建文件夹的名字/micropython.cmake)
# 如果有多个模块,就写多条语句
编译
# 在ports/esp32下执行
# 如果没有自定义c模块:
make
# 如果有自定义c模块:
make USER_C_MODULES=../../../usrmod/micropython.cmake
烧入
不建议使用idf.py flash
,特别是在使用自定义c模块时
# 进入输出结果文件夹内
cd build-ESP32_GENERIC
python -m esptool --chip esp32 -b 460800 --before default_reset --after hard_reset write_flash "@flash_args"
其实就是在编译完成后终端输出烧入方法中的最后一种方法,编译完成的终端输出:
Project build complete. To flash, run:
idf.py flash
or
idf.py -p PORT flash
or
python -m esptool --chip esp32 -b 460800 --before default_reset --after hard_reset write_flash --flash_mode dio --flash_size 4MB --flash_freq 40m 0x1000 build-ESP32_GENERIC/bootloader/bootloader.bin 0x8000 build-ESP32_GENERIC/partition_table/partition-table.bin 0x10000 build-ESP32_GENERIC/micropython.bin
or from the "/Users/kaixin/Tools/micropython/ports/esp32/build-ESP32_GENERIC" directory
python -m esptool --chip esp32 -b 460800 --before default_reset --after hard_reset write_flash "@flash_args"
Comments NOTHING