mpython、micropython的环境配置完整攻略
Mpython的环境配置
GITHUB上拉去资源:
mkdir -p ~/espcd ~/esp
git clone -b v4.3 --recursive https://github.com/espressif/esp-idf.git
未成功完全拉取子模块的话,更换网络,执行以下步骤
git submodule update --init
git submodule update --init --recursive
进入esp-idf 目录 ,拉取子模块
安装工具环境:
sudo apt-get install git wget flex bison gperf python3 python3-pip python3-setuptools cmake ninja-build ccache libffi-dev libssl-dev dfu-util libusb-1.0-0
参考官网链接:
https://docs.espressif.com/projects/esp-idf/zh_CN/v4.3/esp32/get-started/linux-setup.html
安装工具
cd ~/esp/esp-idf
./install.sh
设置环境变量
. $HOME/esp/esp-idf/export.sh
拷贝例程测试下
cd ~/esp
cp -r $IDF_PATH/examples/get-started/hello_world .
cd ~/esp/hello_world
配置工程
idf.py set-target esp32
idf.py menuconfig
编译
idf.py build
下载测试
idf.py -p /dev/ttyUSB0 flash
idf.py -p /dev/ttyUSB0 monitor
如果USB权限不够,执行以下命令
sudo usermod -a -G dialout $USER
再拉取micropython进行编译
cd ~/esp
git clone https://github.com/micropython/micropython --depth=1
接着编译一下 mpy-coress ,用来给 Python 文件预编译为 bytecode 到固件里的工具链。
make -C mpy-cross
然后初始化一下相关的子仓库。
git submodule init lib/berkeley-db-1.xx
git submodule update
最后在编译(make)一下。
cd ports/esp32
Make
如果有问题,需要确定esp-idf的版本是否匹配:
micropython 依赖于 esp-idf ,但是需要切换 esp-idf 的版本,也就是说随着 micropython 不一定会支持最新的 esp-idf 代码,如果出现错误,你需要通过 git checkout 切换版本号。
命令格式示范:git checkout <Current supported ESP-IDF commit hash>
而尾巴的<hash> 存放在 Makefile 文件中的,如下内容。
# the git hash of the currently supported ESP IDF version
ESPIDF_SUPHASH := 6b3da6b1882f3b72e904cc90be67e9c4e3f369a9
所以在 esp-idf 的目录下有如下操作(注意和 readme 有点点不同鸭)
cd esp-idf
git checkout 6b3da6b1882f3b72e904cc90be67e9c4e3f369a9
git submodule update --init --recursive
最后编译mpython
Python 版本安装的pyserial和 pyparsing包
pip install pyserial 'pyparsing<2.4'
拉取mpython的git仓库,
git clone https://github.com/labplus-cn/mpython.git
将拉取的文件(除了esp-idf,micropython 文件夹)复制到esp文件夹中,再执行
git submodule update --init --recursive
编译mpython固件
cd ~/esp/port
make
打开串口收发,组合 Ctrl + A 和 Ctrl + Q 退出串口(需要安装 picocom )
picocom -b 115200 /dev/ttyUSB0
擦除 esp32 中 flash 。
make erase
编译后烧录 micropython 固件。
make deploy
清理编译结果。
make clean
组合命令,烧录完固件后打开串口。
make deploy && picocom -b 115200 /dev/ttyUSB0
额外的信息
为什么固件只有一个 firmware.bin 文件?
固件编译后的 firmware.bin 文件产生在 port/esp32/build 文件夹,它是通过 makeimg.py 合成的,看一下就知道发生了什么。
import sys
OFFSET_BOOTLOADER = 0x1000
OFFSET_PARTITIONS = 0x8000
OFFSET_APPLICATION = 0x10000
files_in = [
('bootloader', OFFSET_BOOTLOADER, sys.argv[1]),
('partitions', OFFSET_PARTITIONS, sys.argv[2]),
('application', OFFSET_APPLICATION, sys.argv[3]),
]
file_out = sys.argv[4]
cur_offset = OFFSET_BOOTLOADER
with open(file_out, 'wb') as fout:
for name, offset, file_in in files_in:
assert offset >= cur_offset
fout.write(b'\xff' * (offset - cur_offset))
cur_offset = offset
with open(file_in, 'rb') as fin:
data = fin.read()
fout.write(data)
cur_offset += len(data)
print('%-12s% 8d' % (name, len(data)))
print('%-12s% 8d' % ('total', cur_offset))
可以得知,firmware.bin 是由 bootloader + partitions + application 而来的一个单独的 bin ,即为固件,所以只需要在 0x1000 起始位置烧入 esp32 的 flash 里就可以运行 micropython 了。
如果要改为0x00开始烧写的话,
cur_offset = OFFSET_BOOTLOADER
改为
cur_offset = 0x00
参考链接:
https://github.com/labplus-cn/mpython
https://docs.espressif.com/projects/esp-idf/zh_CN/v4.3/esp32/get-started/index.html#
https://www.cnblogs.com/juwan/p/11448072.html
问题参考:
安装好依赖包,python,cmake3.5以上,pyserial ' pyparsing<2.4 '
sudo apt-get install git wget flex bison gperf python3 python3-pip python3-setuptools cmake ninja-build ccache libffi-dev libssl-dev dfu-util libusb-1.0-0
pip install pyserial pyparsing==2.3.1
参考:https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32/get-started/linux-setup.html
https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32/get-started/linux-setup-scratch.html
ubuntu中设置工具链并加入PATH环境变量
1. 需要先安装以下软件包:
sudo apt-get install gcc git wget make libncurses-dev flex bison gperf python python-serial
· 1
1. 从 Espressif 的网站下载ESP32 工具链:
64-bit Linux:https://dl.espressif.com/dl/xtensa-esp32-elf-linux64-1.22.0-80-g6c4433a-5.2.0.tar.gz
32-bit Linux:https://dl.espressif.com/dl/xtensa-esp32-elf-linux32-1.22.0-80-g6c4433a-5.2.0.tar.gz
2. 下载完成后,将它解压到 ~/esp 目录,更新环境变量 PATH
export PATH="$PATH:$HOME/esp/xtensa-esp32-elf/bin"
1. 检查 PATH 设置是否正确
printenv PATH
检查一下字符串的末尾是否包含类似的工具链的路径
$ printenv PATH
/home/user-name/bin:/home/user-name/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/home/user-name/esp/xtensa-esp32-elf/bin
xtensa-esp32-elf命令没有,esp32工具链
参考:https://blog.csdn.net/qq_40773212/article/details/108931402
fatal error: curses.h: 没有那个文件或目录
解决办法:安装ncurses即可
sudo apt-get install libncurses5-dev
Arch Linux需按照以下应用:
sudo apt-get install gcc git wget make libncurses5-dev flex bison gperf python python-setuptools python-cryptography python-pyparsing python-pyelftools
ubuntu软件中心应用商店不见了
sudo apt install ubuntu-software
/bin/sh: 1: /usr/bin/cmake: not found
sudo apt install cmake
#用这指令可以正常安装到/usr/bin,但是可能会版本过低的情况,用容器sudo snap install cmake可以安装3.20的但是路径不对。
参考CMake安装:https://www.cnblogs.com/wangdongfang/p/13550017.html
1、下载cmake源码包(https://cmake.org/download/),解压后进入解压目录
2、执行安装配置命令:配置软件二进制安装到/usr/bin目录下(esp32编译路径需改为/usr/bin)
./bootstrap --prefix=/usr/bin
3、接下来执行make命令,直至安装成功
4、sudo make install
记得用sudo不然会新建不了文件以下报错
file cannot create directory: /usr/bin/doc/cmake-3.19/cmsys. Maybe need
administrative privileges.
安装路径还是有问题。
Cmake官网有提供APT存储库的添加方法,https://apt.kitware.com/
添加相应Ubuntu版本的库,就能加载更多APT版本
用以下方式查询APT支持的软件包版本
apt-cache madison <<package name>>
apt-cache policy <<package name>>
apt-get安装指定版本
apt-get install <<package name>>=<<version>>
在/esp/micropython/ports/esp32目录下,make出现以下报错。
esp-idf/components/xtensa
-- Configuring incomplete, errors occurred!
在makefile中添加如下内容(ESPIDF应根据自己的esp-idf目录进行更改):
ESPIDF = esp/esp-idf
#PORT = /dev/ttyUSB0
#FLASH_MODE = qio
#FLASH_SIZE = 4MB
#CROSS_COMPILE = xtensa-esp32-elf-
include Makefile
esp32 ninja: build stopped: subcommand failed
git checkout 4c81978a3e2220674a432a588292a4c860eef27b
切换分支从新安装报:FAILED: build.ninja