本文档适用于 ESP-AT V2.1.0.0 以及之前的版本,最新版本编译方法请参见 编译 ESP-AT 工程。
AT
工程:https://github.com/espressif/esp-at
AT
文档:https://docs.espressif.com/projects/esp-at/zh_CN/latest/
目录
介绍
espressif
基于 esp-idf
和 ESP8266_RTOS_SDK
,针对 ESP
芯片,实现了一些常用的 AT
指令集,链接地址为 esp-at。该指令集可用于 用户/MCU/PC
同 ESP
设备进行交互,也适用于快速进行 ESP
项目开发。
一: 目的
本文基于 ubuntu
环境和 windows
环境,介绍快速的搭建 ESP32 AT
编译环境和烧写运行过程,供读者参考。
二:硬件准备
- linux 环境 或 windows 环境
用来编译&烧写&运行等操作的必须环境。
- ESP32 设备
ESP32 设备包括 ESP32芯片,ESP32模组ESP-WROOM-32,ESP32开发板ESP32-DevKitC,ESP32开发板ESP-WROVER-KIT等。如:
- USB转UART接口模块
USB
转 UART
接口模块一般采用专用的 USB
转 UART
接口芯片,输出为 TTL
电平,可以和 ESP32
内置的串口(UART
)直接连接,使ESP32
通过 USB
口和计算机通讯,方便、快捷。
三: 环境搭建
3.1 编译器环境搭建
编译环境用于编译 ESP32 AT
系列程序,环境搭建请参考 https://docs.espressif.com/projects/esp-at/zh_CN/latest/Compile_and_Develop/How_to_clone_project_and_compile_it.html#esp-at 目录下的 esp-idf
中的编译环境搭建。
注意: 以下的 esp-idf
需要是 esp-at
下的 esp-idf
,这个 esp-idf
通常是比较稳定的版本,而不是最新的 esp-idf
,所以 esp-at
和 esp-idf
必须匹配。如果 esp-at
和 esp-idf
不匹配,有可能因为 esp-idf
函数接口或者结构体定义等的变动,导致 esp-at
无法正常工作。
3.1.1 ubuntu系统
参考 esp-idf/docs/get-started/linux-setup.rst
教程
通过此教程,您将完成编译器安装并默认生成 ~/esp/xtensa-esp32-elf/
目录。
3.1.2 window系统
参考 esp-idf/docs/get-started/windows-setup.rst
教程
通过此教程,您将完成编译器安装并默认在 C
盘生成 msys32
目录。
以下步骤都将在 C:\msys32\mingw32.exe
shell
中进行操作。
3.2 接线
默认 ESP32
与 PC/MCU
接线如下配置:
a) 通过串口线将 ESP32
连接到 PC
,默认为 UART0
口,UART0
口默认用来显示 ESP32
工作中详细的 log
以及用于烧录代码。
这些默认配置可通过 make menuconfig
由用户自己定义。
make menuconfig
--> Component config
--> ESP32-specific
--> UART for console output
来配置 log
输出
b) 通过 USB
转 UART
接口模块将 ESP32
连接到 PC
,默认为 UART1
口,UART1
口默认用来发送 AT
指令以及查看命令是否成功执行。
如 ESP-WROOM-32
的默认 GPIO
口如下:[如果要在其他 ESP32
设备上,需要根据官方文档,重新配置引脚]
GPIO16
-RXD
GPIO17
-TXD
GPIO14
-RTS
GPIO15
-CTS
这些默认配置可通过 make menuconfig
由用户自己定义。
make menuconfig
--> Component config
--> AT
来配置 GPIO
口。
四: SDK 准备
用户可通过如下方式获取整个 SDK
。
$ git clone https://github.com/espressif/esp-at.git
目录结构如下:
├── build // 存放编译后生成的文件
├── components // 核心组件
| ├── at // AT 主目录
| | ├── component.mk // AT 编译入口
| | ├── include // 用户可用的 AT 头文件
| | └── lib
| | └── libat_core.a // 核心 AT 功能实现
| ├── fs_image
| └── customized_partitions // customized_partitions 用于编译 AT 中,可以自定义使用的一些 bin 文件,如:ssl ca、ssl cert、ble server table 等
├── module_config // partition 配置, 用户配置, SDK 配置等
├── examples // AT 应用方案
├── docs // 说明文档
├── esp-idf // esp-at 编译依赖 esp-idf
├── main // AT 应用程序入口
├── Makefile // 总编译入口 makefile
├── README.md // AT 说明
├── LICENSE // 版权说明
└── tools // 相关工具集
五:编译&烧写&运行
5.1 python 模块安装
由于编译过程依赖于 python
以及 python
中 yaml
,xlrd
模块,在编译前需正确安装好 python
,yaml
,xlrd
。(如已安装,忽略 5.1)
根据自己的环境选择安装步骤a) or b):
a) windows 中安装:
选择安装高版本的 python
,如 python 3.6.3,选择完全安装,yaml
,xlrd
模块将自动安装在 PC
上。
或:
选择安装低版本的 python
,如python 2.7
接着安装下载工具pip
再安装 yaml
,xlrd
模块
$ pip install pyyaml xlrd
如果安装失败,请尝试下面方式:
$ easy_install rosinstall
$ easy_install python-yaml
$ easy_install xlrd
b) ubuntu 中安装:
$ sudo apt-get install python
$ sudo apt-get install python-yaml
$ sudo apt-get install python-xlrd
5.2 编译&烧写
5.2.1 [可选]编译前配置
配置 ESP32 AT
的编译环境:
$ make menuconfig
如选择串口:
make menuconfig
-> Serial flasher config
-> Default serial port
5.2.2 [可选]编译前配置
擦除 ESP32
的 Flash
& 删除编译信息 & 删除编译配置:
$ make erase_flash && make clean && rm sdkconfig && make defconfig
5.2.3 编译&烧写
$ make flash
通过 make flash
将编译整个 esp-at
,同时下载/烧录编译好的程序到 ESP32
上。
5.3 运行
- 打开串口工具,连接,连接配置如下:
波特率: 115200
数据位: 8
停止位: 1
奇偶校验: None
流控: None
- 将
ESP32
调到运行状态,通过串口工具查看并发送AT
指令,如通过cutecom
可得到:
以上,可查看 AT
信息并完成具体的交互过程。
六:ESP32 AT 指令集
参考官网文档:ESP32 AT 指令集与使用示例
该文档描述了 ESP32 AT
指令集功能以及使用方法,并介绍几种常见的 AT
指令使用示例。
常见错误处理
a) 为什么 git clone
速度奇慢无比?
可能由于服务器本身原因,可通过为 git
设置代理来git config --global 加速下载。
b) 为什么编译不过?
-
是不是
python/yaml/xlrd
模块没有下载好,参考 5.1 节,参考 issue 46 -
是不是子模块没有完整
clone
下来,参考第四节 -
出现
pthread
编译错误,是不是编译器和esp-at
不匹配?
由于有些用户已经下载过 esp-idf
编译器,以为不用再重新下载编译器,其实不然,用户需下载和 ESP32 AT
对应的编译器,参考 3.1 节,参考issue 48
c) 为什么 AT
启动不了,出现 no factory ,can not find boot
等情况?
编译前没有擦除 flash
中以前参数,请使用 5.2.2 节命令擦除
d) 为什么 AT 启动不了,出现 invalid magic number 1
等情况?
有些用户导出了最新的 esp-idf
,将会由于 esp-at
和 esp-idf
不匹配而启动出错,因为在 ESP32 AT
下,用户无需自己导出esp-idf
, ESP32 AT
将导出默认的 esp-at/esp-idf
。参考issue 52
e) 为什么启动了 AT
,两个串口都能看到 log
, 但输入命令,控制台无反应?
按照步骤 3.2 上重新接线, RX 和 TX 一定要正确,可以试试反接有没有效果。