一. 安装软件
根据文档安装软件, 文档中列出需要安装的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,等待配置完成即可正常编码,编译和烧写用控制台即可