目标:把我们的python项目编译到esp8266里
esp8266的micropython编译要在linux下进行,如果是用windows的读者,可以下载一个虚拟机,比如说vmware就是一个比较方便的选择,然后在ubuntu官网下载ubuntu的镜像,最好可以用桌面版,有图形化界面,用起来方便,作者这里用的是ubuntu-20.04.2-desktop-amd64.iso。
然后打开虚拟机,按照官方的文档:https://github.com/micropython/micropython/blob/master/ports/esp8266/README.md,我们先配置esp的编译链:
1、apt换源:
https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu/ 这里用的是清华的源,亲测可用 然后再sudo apt-get update更新一下就可以了
2、下载依赖库:
sudo apt-get install make unrar-free autoconf automake libtool gcc g++ gperf flex bison texinfo gawk ncurses-dev libexpat-dev python-dev python sed git unzip bash help2man wget bzip2
官方的文档中还要求下载python-serial,但是因为各种各样奇怪的问题,这样下载会出错,我们也有办法解决,详情看第三步
如果ubuntu版本大于14.04,要先sudo apt-get install libtool-bin,才能下载
3、搞定python-serial
curl https://bootstrap.pypa.io/2.7/get-pip.py --output get-pip.py
sudo python2 get-pip.py
pip install pyserial
4、克隆esp编译链
在桌面打开命令行
运行git clone --recursive https://github.com/pfalcon/esp-open-sdk.git用于下载esp-open-sdk,也就是esp的编译链
这个时候我们在esp-open-sdk目录里要make一下,但是因为esp-open-sdk有一些问题,导致出现了bash版本要大于3.1的提示,这个时候我们可以修改esp-open-sdk/crosstool-NG/config.ac文件里的193行,version后面改成([0-9.]+)'),也就相当于修改了bash的版本限制,保存一下 之后我们再make,就不会出现这样的问题啦
5、解决tarballs文件夹里的源码包
make了之后,会提示tarballs有问题,这是因为tarballs里面没有源码包
链接:https://pan.baidu.com/s/1H6P5HHHryGl1j47uVklEVg?pwd=4ft0
提取码:4ft0
然后进入ubuntu,在esp-open-sdk/crosstool-NG/.bulid/tarballs里面,把里面的文件全部删了,再把百度网盘下载的压缩包里面文件复制进去,再在esp-open-sdk里make一下就不会报错了
提醒:
(1)、ubuntu会自动隐藏"."开头的文件,所以在crosstool-NG里面可能会找不到.bulid目录,这个时候ctrl+h,就能显示隐藏文件夹了,如果还是找不到的话,就再在esp-open-sdk文件夹里make一下,因为tarballs文件夹要make了才会出来
(2)、make后面加上-jx参数可以多核编译,x代表的是你编译是要使用的核心数量,比如说我的电脑是4核心的,你就可以输入make -j4,表示用4个cpu核心来编译,能大大提高编译速度
6、搞定编译链 进入esp-open-sdk目录,make一下,等待编译完成,如果输出Espressif ESP8266 SDK is installed, its libraries and headers are merged with the toolchain即为编译成功 然后配置环境变量,运行make之后输出的倒数第二句话,exports开头的。
然后编译环境配置完毕,现在我们就可以开始下载我们的主角:micropython源码在桌面运行:git clone --recursive https://github.com/micropython/micropython.git(必须用git clone的方式,不然会出错)
之后就能完成最终目标了
进入micropython文件夹,按照官方手册,运行:(make之前最好先make clean一下,不然怕出错)
make -C ports/esp8266 submodules
make -C mpy-crosscd ports/esp8266
make
没有看到error就是编译成功了 那么这时候我们可以在micropython/ports/esp8266/build-GENERIC里面找到我们想要的固件:firmware-combined.bin,如果安装了VMware Tools,我们可以直接把它拖到桌面,直接烧录进去,就可以在里面写micropython程序啦
其他:如果要把自己的python模块添加进固件里,我们可以把这个模块放入micropython/ports/esp8266/modules,这里要注意,里面的文件不要删,直接添加进去就行
如果我们要保护自己的源码,我们可以把自己的项目文件全部添加进micropython/ports/esp8266/modules里,然后在同一个目录里面的_boot.py文件最后面加上一行:
import [你的项目主程序(文件名不带后缀名)]
那么,你的代码就编译进去了,开机会自动启动你的项目主程序
大家可以试着把源码修改下,再编译 esp32也是类似的方法,只不过有一点不一样,可以自己查看官方文档:https://github.com/micropython/micropython/blob/master/ports/esp32/README.md
注意:编译的时候一定不要用wsl,本人亲测,会有bug,一定要用正统的ubuntu
还没有时间配图,到时候加上