一. 安装软件

根据文档安装软件, 文档中列出需要安装的python和python-serial是有问题的, 在Ubuntu20.04中只有python3没有python, 而python3已经安装, 另外没有python-serial, 这个要在后面通过pip安装

sudo apt install gcc git wget make libncurses-dev flex bison gperf vim cmake

 二. 工具链(编译器)

ESP8266 Linux 工具链可从乐鑫网站下载:

对于 64 位 Linux:https://dl.espressif.com/dl/xtensa-lx106-elf-gcc8_4_0-esp-2020r3-linux-amd64.tar.gz

对于 32 位 Linux:https://dl.espressif.com/dl/xtensa-lx106-elf-gcc8_4_0-esp-2020r3-linux-i686.tar.gz

在自己的文件目录下创建文件夹来存放(可以是esp8266),并使用命令行进入到该文件夹,把下载好的工具链文件放到该目录下,并执行解压命令

tar -xzf xtensa-lx106-elf-gcc8_4_0-esp-2020r3-linux-amd64.tar.gz

将存放的路径添加到PATH,执行命令

vim ~/.profile

内容为:

#在尾部添加 (一开始为只读,按下i键后可写数据)

export PATH="$PATH:/home/(用户名)/Esp8266/xtensa-lx106-elf/bin"



# 写完按Esc键,然后输入:wq 保存退出

导入和验证环境

source ~/.profile

printenv PATH

使用命令查看编译器是否能运行

xtensa-lx106-elf-gcc -v

三. 安装SDK

1. 下载SDK

进入Esp8266目录

(1) 使用命令(不建议)

git clone --recursive https://github.com/espressif/ESP8266_RTOS_SDK.git

(2) 直接在github下载zip包(推荐),地址:https://github.com/espressif/ESP8266_RTOS_SDK/releases

这里使用的是 ESP8266_RTOS_SDK-v3.4.zip

https://github.com/espressif/ESP8266_RTOS_SDK/releases/download/v3.4/ESP8266_RTOS_SDK-v3.4.zip

将其放入Esp8266目录,并解压即可。

unzip ESP8266_RTOS_SDK-v3.4.zip

2. 将IDF_PATH添加到环境变量

vim ~/.profile

内容为:

#在尾部添加 (一开始为只读,按下i键后可写数据)

export IDF_PATH="/home/(用户名)/Esp8266/ESP8266_RTOS_SDK"



# 写完按Esc键,然后输入:wq 保存退出

3. 导入和验证环境

source ~/.profile

printenv IDF_PATH

四. 安装python库

# 如果python命令不存在, 需要提前设置好ln

cd /usr/bin/

sudo ln -s python3 python

# 检查python版本

python --version

#安装 python3-pip 工具

sudo apt install python3-pip

# 安装

python -m pip install --user -r $IDF_PATH/requirements.txt

五. 更改GCC版本

ubuntu20.04默认安装的是gcc-9,而gcc-9会导致后面的配置和编译失败(最新版的SDK会这样,也就是直接拉取github项目时会出错,具体原因不清楚)。

gcc版本可以选择gcc-8或gcc-10,我这里使用的是gcc-10

sudo apt install gcc-10

修改gcc的链接

cd /usr/bin

#使用ln修改gcc链接

sudo ln -s gcc-10 gcc

使用命令检测是否修改成功

gcc -v

cc -v

# 显示 gcc version 10.3.0 就ok了

六. 配置开发板串口和编译烧写程序

使用VM虚拟机时,当电脑连接usb设备的使用会提示是否要连接到虚拟机,选择当前的ubuntu虚拟机即可。

连接开发板后,使用命令行

ls -l /dev/ttyUSB*

# 能找到/dev/ttyUSB0就证明设备连接成功

注意:截止至2022-6-17,使用 ubuntu22.04 时,连接usb设备后一开始是能够发现/dev/ttyUSB0这个设备的,但很快就会消失,但是使用dmesg命令却能够发现设备依旧连接着,或许是22.04的一个bug,若没有/dev/ttyUSB0这个设备,后面是无法烧写程序的。

linux中,普通用户是无法使用串口的,虽然可以使用root来进行烧写,但这不方便在后面的使用vscode当编码工具,

使用root时的环境搭建

# 使用root后,环境的导入就不是 source ~/.profile ,而是

source /home/(用户名)/.profile

# 并且需要重新安装python库

python -m pip install --user -r $IDF_PATH/requirements.txt

这里我们先进行程序的配置和编译,程序烧写问题后面再解决

进入ESP8266_RTOS_SDK/examples/get-started/hello_world,使用命令

# 这个命令要确保前面的环境都成功了才能使用 (注意gcc)

make menuconfig



# 然后配置对应的参数, 选择 Serial flasher config,设置如下(具体开发板具体自定义)

Default serial port: /dev/ttyUSB0

Default baud rate: 115200 baud

Use compressed upload: Yes

Flash SPI mode: DOUT

Flash SPI speed: 40 MHz

Flash size: 4MB

Before flashing: Reset to bootloader

After flashing: Hard reset after flashing

make monitor baud rate: 74880 bps



# 然后save, exit.

编译+烧录:make flash, 查看串口输出:make monitor, 编译+烧录+查看串口输出:make flash monitor

在root下,编译烧写没问题,而在普通用户下,编译是没问题,但烧写就会失败,具体原因是没有权限,虽然可以用chmod更改/dev/ttyUSB0的权限,但是我们拔插一下开发板,又得重新改了,非常麻烦。

这里又2种方法让普通用户可以访问串口:

1. 添加串口设备访问规则

   以root身份执行:

vim /etc/udev/rules.d/70-ttyusb.rules

内容为:

# 一开始是空文件,内容为: (一开始为只读,按下i键后可写数据)

   KERNEL=="ttyUSB[0-9]*",MODE="0666"

   

   # 写完按Esc键,然后输入:wq 保存退出

注意:内容里边的双引号不能丢,否则不会生效

此方法有两个弊端:

        (1).该方法会让所有的普通用户都具有访问这些串口设备的权限,存在一定的安全隐患

        (2).加入此规则后,必须拔掉设备重新插入,此规则才可生效

2. 将目标用户添加至dialout用户组

   因tty设备隶属于dialout用户组,所以将用户添加至dialout用户组,该用户就会具备访问tty等串口设备的权限

   则使用如下命令即可:

gpasswd --add (用户名) dialout

添加完之后可以用如下命令来查看是否添加成功

groups (用户名)

如果用完之后想删除该权限,则使用如下命令,从dialout用户组删除对应的用户即可

gpasswd --del (用户名) dialout

注意:添加和删除用户组都必须以root身份来执行,另外此方法也有一个弊端,就是添加或删除完成后必须logoff(注销),re-login(重新登录)才可生效

修改完成重启后,普通用户也能进行烧写程序了。

七. vscode编码环境搭建

安装linux版vscode后,下载c/c++,cmake,cmake tools这3个插件,用vscode打开hello_world目录,点击左下角的编译器选择 GCC 8.4.0 xtensa-lx106-elf,等待配置完成即可正常编码,编译和烧写用控制台即可