ESP8266之最详细的win10子系统ubuntu+VSCode下开发环境搭建
2019.2.26更新:补全环境搭建过程,添加工程编译步骤
2019.6.19更新:重新安装环境过程中发现了一些新问题,添加进去以供参考
2019.12.27更新:重新安装环境过程中发现了一些新问题,添加进去以供参考
2020.10.10更新: ESP32可以参考乐鑫官方教程https://www.bilibili.com/read/cv7755144
1.首先需要启用windows的linux子系统功能,如果找不到直接搜索“windows功能”就是了。启用后需要重启一下计算机,然后在windows商店下载ubuntu,没错,直接在windows商店下载!我这里是用的ubuntu18.04LTS,LTS=Long Term Support,即受到长期支持的版本。安装好后会提示设定用户名和密码(建议设的简单点)。
装好后建议先更新一下
sudo apt-get update
sudo apt-get upgrade
如果下不动可以尝试换源,参考https://www.linuxidc.com/Linux/2018-08/153709.htm
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 python-serial sed git unzip bash help2man wget bzip2
然后创建一个文件夹,我就放在C:\workspace\esp8266下面的,可以直接在文件管理器里面创建,然后ubuntu进入该文件夹。
cd /mnt/c/workspace/esp8266
在这里我们将会有三个文件夹
xtensa-lx106-elf //交叉编译工具链
ESP8266_RTOS_SDK //SDK开发工具包
project //放置工程源码
首先下载交叉编译工具链,工具链的链接可以在这个页面下找到https://github.com/espressif/ESP8266_RTOS_SDK
选择linux(64)复制链接,现在编写这篇文章时的版本是
xtensa-lx106-elf-linux64-1.22.0-92-g8facf4c-5.2.0.tar.gz
在ubuntu终端可以使用以下命令下载
wget https://dl.espressif.com/dl/xtensa-lx106-elf-linux64-1.22.0-92-g8facf4c-5.2.0.tar.gz
下载后用下面命令解压
tar zxvf xtensa-lx106-elf-linux64-1.22.0-92-g8facf4c-5.2.0.tar.gz
输入ls查看已下载解压的文件
3.接下来拉取最新的SDK
git clone https://github.com/espressif/ESP8266_RTOS_SDK.git
下载完后就会有ESP8266_RTOS_SDK文件夹了,如果需要更新SDK,再次克隆或者git pull就可以了。
在SDK文件夹里找到“Kconfig”文件,用vscode之类的编辑器打开。找到
default "xtensa-lx106-elf-" if IDF_TARGET_ESP8266
改成
default "/mnt/c/workspace/esp8266/xtensa-lx106-elf/bin/xtensa-lx106-elf-" if IDF_TARGET_ESP8266
这里是修改SDK里面交叉编译工具链的路径
*最新的SDK已改为如下,照样修改即可
menu "SDK tool configuration"
config SDK_TOOLPREFIX
string "Compiler toolchain path/prefix"
default "xtensa-lx106-elf-"*
然后再在esp8266的目录下创建一个project文件夹用来放工程源码
4.现在可以创建工程了,可以先在esp8266 - ESP8266_RTOS_SDK - examples文件夹下找一个例程放进去进行编译,我们把“project_template”复制进project文件夹下。然后打开vscode,打开8266的文件夹,编译之前先要更改Makefile文件,虽然可以配置环境变量,但我不建议这样做,之前同时开发esp8266和esp32时有冲突。将Makefile中间空着的那行加上
IDF_PATH=/mnt/c/workspace/esp8266/ESP8266_RTOS_SDK//根据自己的SDK路径
在此之前我们还要修改VSCode的默认终端,改成Ubuntu的bash。打开文件-首选项-设置,搜索shell,按照下面修改,应该是wsl.exe,修改完后重新打开终端,终端目录是你文件夹打开的目录。就能够调用linux子系统了。
5.编译工程,首先进入工程目录,cd project,cd project_template。进入到之前拷贝的例程下面,输入make menuconfig。
注:可能提示linux子系统没有安装make,使用命令sudo apt install make安装即可
如果出现错误提示可能是终端窗口太小了,拉大一点就好了。这里有很多设置选项,我只介绍几个。
Serial flasher config,串口烧录的配置选项,可以配置要烧录的串口、波特率、烧录模式、SPI速度,flash大小等等,按需配置。退出时需要选择save保存!
编译时可能出现错误大概就是toolchain not found之类的。检查一下之前的Kconfig修改对不对,修改完交叉编译工具链路径文件后,需要删除掉打开项目文件目录下的“sdkconfig”配置文件,然后重新编译即可。
接下来我们烧录程序进行简单测试,用vscode进行程序编写及烧录调试
#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_system.h"
void app_main(void)
{
while(1)
{
printf("SDK version:%s\n", esp_get_idf_version());
vTaskDelay(1000 / portTICK_RATE_MS);
}
}
记得要添加IDF_PATH
打开终端输入“make all”编译,没有问题后输入“make flash”烧录程序,注意串口是否正确
出现如下报错可能是没有安装pip,
pkg_resources cannot be imported probably because the pip package is not installed and/or using a legacy Python interpreter. Please refer to the Get Started section of the ESP-IDF Programming Guide for setting up the required packages.
/mnt/c/workspace/esp8266/ESP8266_RTOS_SDK/make/project.mk:466: recipe for target 'check_python_dependencies' failed
make: * [check_python_dependencies] Error 1
输入如下指令安装
sudo apt install python-pip
安装完成后,我们可以使用以下打印pip版本的命令验证安装:
pip --version
重新执行make all如果还出现如下问题
The following Python requirements are not satisfied:
future>=0.15.2
Please refer to the Get Started section of the ESP-IDF Programming Guide for setting up the
required packages. Alternatively, you can run "/usr/bin/python -m pip install --user -r /mnt/c/workspace/esp8266/ESP8266_RTOS_SDK/requirements.txt" for resolving the issue.
/mnt/c/workspace/esp8266/ESP8266_RTOS_SDK/make/project.mk:466: recipe for target 'check_python_dependencies' failed
查看报错信息可知,运行如下指令即可解决
/usr/bin/python -m pip install --user -r /mnt/c/workspace/esp8266/ESP8266_RTOS_SDK/requirements.txt
然后可以打开串口助手查看打印的信息。linux下串口助手有minicom,安装好后“sudo minicom”打开。
也可以输入“sudo minicom -s”进行设置。
烧录完成后发现打印出的信息乱码,原来是esp8266波特率默认为78440,可以修改接收波特率即可显示正确
小提示:为了方便,编译和烧录可以用一条命令“make all&&make flash”搞定!!