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,即受到长期支持的版本。安装好后会提示设定用户名和密码(建议设的简单点)。

20190312 (3).png

20190312 (1).png

20190312 (2).png

装好后建议先更新一下

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子系统了。

20190312 (4).png

5.编译工程,首先进入工程目录,cd project,cd project_template。进入到之前拷贝的例程下面,输入make menuconfig。

注:可能提示linux子系统没有安装make,使用命令sudo apt install make安装即可

如果出现错误提示可能是终端窗口太小了,拉大一点就好了。这里有很多设置选项,我只介绍几个。

Serial flasher config,串口烧录的配置选项,可以配置要烧录的串口、波特率、烧录模式、SPI速度,flash大小等等,按需配置。退出时需要选择save保存!

20190312 (5).png

20190312 (6).png

编译时可能出现错误大概就是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”搞定!!

本文链接:

https://www.veryxs.com/index.php/archives/4/
1 + 2 =
快来做第一个评论的人吧~