Linux下 ESP8266 开发环境搭建
Linux系统为Manjaro XFCE
打开终端,克隆crosstool-NG到本地,并编译生成xtensa-lx106-elf编译器
如果有代理,可以配置git代理提高下载速度
git config --global http.proxy 'http://127.0.0.1:1080'
git config --global https.proxy 'https://127.0.0.1:1080‘
cd ~
mkdir Espressif
cd Espressif
git clone https://github.com/jcmvbkbc/crosstool-NG.git
cd crosstool-NG
./bootstrap && ./configure --prefix=`pwd` && make && make install
./ct-ng xtensa-lx106-elf
./ct-ng build
编译过程中可能会报错,在crosstool-NG/build.log查看报错原因
1) 文件下载失败:
通过build.log文件中的地址手动下载文件并放入crosstool-NG/.build/tarballs文件夹下,推荐预先下载文件放入文件夹,编译过程中下载非常耗时。注意下载版本要与config一致。
部分文件下载地址:
2) error: too few arguments to function _PyImport_FixupBuiltin:
此函数在python3.7中是一个内部函数,使用gdb-8.2及以上版本,在crosstool-NG/config/debug/gdb.in文件添加
config GDB_V_8_2
bool
prompt "8.2"
select GDB_8_2_or_later
config GDB_8_2_or_later
bool
select GDB_8_2_or_later
default "8.2" if GDB_V_8_2
以上内容参考源文件插入相应位置
编译成功后编译器位于builds文件夹下,将编译器加入环境变量
sudo cp -f builds/xtensa-lx106-elf /opt
cd ~
sudo nano .bashrc
export PATH=/opt/xtensa-lx106-elf/bin:$PATH
source .bashrc
编译工程
cd Espressif/ESP8266-NONOS_SDK/app
./gen_misc.sh
如果不能执行./gen_misc.sh -> chmod u+x gen_misc.sh 或者选中该文件->右键->属性->权限->选中允许此文件作为程序运行
1)提示缺少stdint.h文件 https://github.com/esp8266/esp8266-wiki/raw/master/include.tgz 下载解压放入/opt/xtensa-lx106-elf/lib/gcc/xtensa-lx106-elf/4.8.5/
2)提示缺少libhal.a文件 https://github.com/esp8266/esp8266-wiki/raw/master/libs/libhal.a 下载放入/opt/xtensa-lx106-elf/lib/gcc/xtensa-lx106-elf/4.8.5/
3)提示SyntaxError: Missing parentheses in call to 'print'. Did you mean print('file_name cannot be none\n')? python版本过高,需要搭建python虚拟环境使用低版本python
cd ~
sudo pip install virtualenvwrapper
mkdir .virtualenvs
sudo nano .bashrc
export WORKON_HOME=~/.virtualenvs
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3.7
export VIRTUALENVWRAPPER_VIRTUALENV=/usr/bin/virtualenv
source /usr/bin/virtualenvwrapper.sh
source .bashrc
mkvirtualenv -p /usr/bin/python2.7 env27
在终端中输入 workon env27即可在python2.7环境中编译工程
串口烧写bin文件到WiFi模块
安装esptool串口下载工具
sudo pip install esptool
擦除
esptool.py --port /dev/ttyUSB0 erase_flash
烧写全部bin文件
esptool.py --port /dev/ttyUSB0 -b 115200 write_flash 0x0000 ../bin/boot_v1.7.bin 0x1000 ../bin/upgrade/user1.2048.new.3.bin 0x1fc000 ../bin/esp_init_data_default_v05.bin 0x1fe000 ../bin/blank.bin
烧写user.bin文件
esptool.py --port /dev/ttyUSB0 -b 115200 write_flash 0x1000 ../bin/upgrade/user1.2048.new.3.bin
/dev/ttyUSB0表示第一个usb设备,如果电脑上接了多个usb设备,需要自行确定编号, 上述命令可编写为执行文件,例如 erase_flash.sh
#!/bin/bash
esptool.py --port /dev/ttyUSB0 erase_flash
修改权限为允许作为程序运行,终端输入 ./erase_flash.sh 即可擦除flash
如果烧写时报错 /dev/ttyUSB0 permission denied
ls -al /dev/ttyUSB0
crw-rw---- 1 root uucp 188, 0 10月 16 15:29 /dev/ttyUSB0
sudo gpasswd --add username uucp
列出ttyUSB0的工作组为uucp,然后把当前用户username加入uucp,重启后串口即可正常工作。