本文档适用于 ESP-AT V2.1.0.0 以及之前的版本,最新版本编译方法请参见 编译 ESP-AT 工程。
AT 工程:https://github.com/espressif/esp-atAT 文档:https://docs.espressif.com/projects/esp-at/zh_CN/latest/
目录
- 介绍
- 一:目的
- 二:硬件准备
- 三:环境搭建
- 四:SDK 准备
- 五:编译&烧写&运行
- 六:ESP-AT 指令集
- 常见错误处理
介绍
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 一定要正确,可以试试反接有没有效果。