陈拓 2021/01/10-2021/01/25
1. 概述
ESP8266的开发工具是在linux系统下运行的。阿里云服务器(Elastic Compute Service,简称ECS)可以安装多种操作系统,我们安装的是CentOS。
下面介绍在阿里云CentOS下安装ESP8266-RTOS_SDK开发环境,编译C语言程序,并将编译好的bin文件下载到本地,再用Flash下载工具烧写到ESP8266模块上运行。
- 登录阿里云
你可以使用Win10自带的ssh,也可以使用PuTTY,我用PuTTY。
- 查看阿里云上我的Linux系统版本:lsb_release -a
在《Win10-Ubuntu子系统构建ESP8266_RTOS_SDK开发环境》
https://zhuanlan.zhihu.com/p/346072018
https://blog.csdn.net/chentuo2000/article/details/112973413
一文中,我们已经在个人PC上安装了ESP8266_RTOS_SDK开发环境。现在我们将ESP8266_RTOS_SDK开发环境安装到阿里云上就可以供多人使用。
1.1 ESP8266技术文档
https://www.espressif.com/zh-hans/support/documents/technical-documents?keys=&field_type_tid%5B%5D=14
1.2 工具链和SDK
因为ESP8266功能太弱,不足以支持开发工作,所以需要在其他平台上安装开发系统进行开发。下面我们在阿里云CentOS下构建ESP8266开发环境,将ESP8266的C程序代码编译链接成ESP8266可执行的bin文件,这个过程就是交叉编译,交叉编译所需的软件工具叫做工具链toolchain。
SDK提供了操作ESP8266的API函数,我们用C语言通过调用这些函数就可以开发出所需功能的程序,再用工具链编译成可执行代码。
多个SDK可以同时存在,ESP8266_NONOS_SDK和ESP8266_RTOS_SDK也可以都安装。
1.3 ESP8266开发工具SDK的分类
在官方文档《ESP8266 SDK入门指南》中有关于开ESP8266发工具的分类。
2. 换源
为例加快下载速度,将yum源设置为国内镜像站点。国内镜像站点有清华源、科大源和阿里源,在阿里云上当然用阿里源。
- 备份/etc/yum.repos.d/CentOS-Base.repo
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
- 下载更改源
sudo wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
- 清空yum缓存并生成cache文件
sudo yum clean all
sudo yum makecache
- 更新系统
sudo yum -y update
参考[https://www.cnblogs.com/hester/p/12365068.html]
3. Linux 平台工具链的标准设置
https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32/get-started/linux-setup.html
3.1 安装准备
- 编译ESP-IDF需要以下软件包
前面查过了,我们的系统是CentOS 7。
sudo yum -y update && sudo yum install git wget flex bison gperf ncurses-devel python3 cmake ninja-build ccache dfu-util
注意:官方给出的命令缺少ncurses-devel包。
另外dfu-util包未安装成功:
但这并不影响我们的工作,因为dfu-util包主要用于通过USB连接的设备上下载和上传固件。我们不能在云端连接设备,所以这个包可以不安装。
3.2 设置 Python 3 为 CentOS 默认 Python 版本
- 安装 Python 3
sudo yum -y update && sudo yum install python3 python3-pip python3-setuptools
- 检查Python 3
ls -l /usr/bin/python*
- 设置Python3为默认Python版本
当前默认Python版本:
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 10 && alias pip=pip3
update-alternatives是linux系统中专门维护系统命令链接符的工具,通过它可以很方便的设置系统默认使用哪个命令、哪个软件版本。
update-alternatives --list
update-alternatives --display python
现在默认的Python版本:
- 删除版本指定
sudo update-alternatives --remove python /usr/bin/python3
- 别名指定
sudo alias pip=pip3用别名指定默认pip为pip3
- 查看别名
- 删除别名
sudo unalias pip
- yum命令失效问题
为什么要删除默认的Python版本指定和pip别名指定,因为将默认Python指定为Python3之后yum就失效了。
这是因为yum只支持Python2。用删除默认Python指定的办法太麻烦了。
- 让yum命令生效
1) 修改urlgrabber-ext-down文件。它在这里:
sudo nano /usr/libexec/urlgrabber-ext-down
将下面红框中的内容
改成
2) 修改yum文件。它在这里
sudo nano /usr/bin/yum
将下面红框中的内容
改成
这样就可以了:
4. 获取工具链
- 网址
https://github.com/espressif/ESP8266_RTOS_SDK
右击Linux(64),复制链接地址:
https://dl.espressif.com/dl/xtensa-lx106-elf-gcc8_4_0-esp-2020r3-linux-amd64.tar.gz
- 创建编译链目录
mkdir esp
cd esp
- 下载
wget https://dl.espressif.com/dl/xtensa-lx106-elf-gcc8_4_0-esp-2020r3-linux-amd64.tar.gz
- 解压
tar -xzvf xtensa-lx106-elf-gcc8_4_0-esp-2020r3-linux-amd64.tar.gz
路径:/home/ccdc/esp/xtensa-lx106-elf
- 设置环境变量
回到家目录,就是我们登录的目录
cd ~
看看有没有文件.bashrc
编辑这个文件nano ~/.bashrc
将export PATH=/home/ccdc/esp/xtensa-lx106-elf/bin:$PATH
添加到最后一行。
保存,退出。
重新登录,查看环境变量echo $PATH:
工具链的路径已经在里面了。
- 运行xtensa-lx106-elf-gcc -v来验证安装
5. 获取ESP8266_RTOS_SDK
5.1 克隆ESP8266_RTOS_SDK
cd esp
git clone --recursive https://github.com/espressif/ESP8266_RTOS_SDK.git
失败!下载很困难。
好消息是乐鑫已经在gitee上有了国内镜像,网址是:
https://gitee.com/EspressifSystems
点击ESP8266_RTOS_SDK
点击“复制”得到克隆地址:https://gitee.com/EspressifSystems/ESP8266_RTOS_SDK.git
克隆ESP8266_RTOS_SDK到阿里云
git clone https://gitee.com/EspressifSystems/ESP8266_RTOS_SDK.git
很快,也很顺利。
5.2 安装子模块
- 扩展工具esp-gitee-tools
在乐鑫gitee镜像上有一个仓库esp-gitee-tools可以用来安装子模块:
点击“submodule-update使用”
- ESP8266_RTOS_SDK的子模块
在乐鑫开源/ESP8266_RTOS_SDK仓库下有.gitmodules文件:
需要安装5个子模块。
- 安装扩展工具
git clone https://gitee.com/EspressifSystems/esp-gitee-tools.git
进入 esp-gitee-tools 目录,export submodule-update.sh 所在路径,方便后期使用,如:
cd esp-gitee-tools
export EGT_PATH=$(pwd)
- 安装子模块 submodules
进入ESP8266_RTOS_SDK目录执行submodule-update.sh脚本:
cd ~/esp/ESP8266_RTOS_SDK
$EGT_PATH/submodule-update.sh
子模块安装完成。
- 设置ESP8266_RTOS_SDK环境变量
和设置工具链环境变量一样在~/.bashrc中添加一行:
export IDF_PATH=~/esp/ESP8266_RTOS_SDK
nano ~/.bashrc
保存,退出。
刷新环境变量:
source ~/.bash_profile
验证:
echo $IDF_PATH
6. 测试项目编译
用esp8266_rtos_sdk/examples/get-started/hello_world项目进行测试。
参考GitHub - espressif/ESP8266_RTOS_SDK: Latest ESP8266 SDK based on FreeRTOS, esp-idf style.。
- 进入项目目录
cd ~/esp/ESP8266_RTOS_SDK/examples/get-started/hello_world
- 启动项目配置工具
make menuconfig
进入Serial flasher config --->,修改串口和芯片Flash大小。
Windows中的串口COM4对应Linux中的设备/dev/ttyS4。
串口设置按照《Win10-Ubuntu子系统构建ESP8266_RTOS_SDK开发环境》
https://zhuanlan.zhihu.com/p/346072018
https://blog.csdn.net/chentuo2000/article/details/112973413
一文中的描述设置,因为最后烧写程序是在我的PC上进行,所以要按照我的PC进行设置。我用的ESP8266-12F的Flash大小是4MB。
保存,退出。
- 编译
烧写命令:
python /home/ccdc/esp/ESP8266_RTOS_SDK/components/esptool_py/esptool/esptool.py --chip esp8266 --port /dev/ttyS4 --baud 115200 --before default_reset --after hard_reset write_flash -z --flash_mode dio --flash_freq 40m --flash_size 4MB 0x0 /home/ccdc/esp/ESP8266_RTOS_SDK/examples/get-started/hello_world/build/bootloader/bootloader.bin 0x10000 /home/ccdc/esp/ESP8266_RTOS_SDK/examples/get-started/hello_world/build/hello-world.bin 0x8000 /home/ccdc/esp/ESP8266_RTOS_SDK/examples/get-started/hello_world/build/partitions_singleapp.bin
从命令中可以获取以下信息:
- 串口号
/dev/ttyS4
- 波特率
115200
- Flash芯片模式
flash_mode dio
- Flash芯片频率
40m
- Flash芯片大小
4MB
需要下载3个文件和烧写地址:
- bootloader.bin
0x0 /home/ccdc/esp/ESP8266_RTOS_SDK/examples/get-started/hello_world/build/bootloader/bootloader.bin
- hello-world.bin
0x10000 /home/ccdc/esp/ESP8266_RTOS_SDK/examples/get-started/hello_world/build/hello-world.bin
- partitions_singleapp.bin
0x8000 /home/ccdc/esp/ESP8266_RTOS_SDK/examples/get-started/hello_world/build/partitions_singleapp.bin
0x0,0x10000和0x8000是烧写地址,后面要用到。
7. 下载bin文件到PC
- 进入CMD窗口
Win+R
输入cmd,确定。
- 用sftp登录阿里云
@前面是用户名,后面是IP地址。
- 进入远程项目的build目录
cd /home/ccdc/esp/ESP8266_RTOS_SDK/examples/get-started/hello_world/build
- 切换本地目录
lcd E:\ct\ESP8266
- 下载bootloader.bin
get bootloader/bootloader.bin
- 下载hello-world.bin
get hello-world.bin
- 下载partitions_singleapp.bin
get partitions_singleapp.bin
- 查看本地目录
- 退出sftp
8. 烧写bin文件到ESP8266模块
- 下载Windows的Flash烧写工具
https://www.espressif.com/zh-hans/support/download/other-tools?keys=&field_type_tid%5B%5D=14
点击下载:
flash_download_tool_v3.8.5_1.zip
- 解压
点击flash_download_tool_v3.8.5_1.zip
点击提取:
点击全部解压缩:
点击提取:
打开flash_download_tool_v3.8.5文件夹:
- 双击flash_download_tool_v3.8.5.exe运行
选择开发者模式:
选择ESP8266下载工具。设置如下,地址在前面已经有了,对应如下:
0x0 bootloader.bin
0x10000 hello-world.bin
0x8000 partitions_singleapp.bin
https://blog.csdn.net/yunyin_link/article/details/77676886
默认生成 bootloader.bin、app_demo.bin、partitions_singleapp.bin
设置如下:
点击START开始烧写。
烧写完成:
9. 用串口调试助手查看程序运行结果
串口调试助手的使用请看《Win10使用CH340 USB-SERIAL串口》
https://zhuanlan.zhihu.com/p/343013801
https://blog.csdn.net/chentuo2000/article/details/112323488
10. 程序说明和波特率修改
波特率74800不是标准的波特率,我们通常使用标准波特率115200。有关C程序和运行结果的说明,以及波特率的更改请看:
《Win10-Ubuntu子系统构建ESP8266_RTOS_SDK开发环境》
https://zhuanlan.zhihu.com/p/346072018
https://blog.csdn.net/chentuo2000/article/details/112973413