ESP32提供了AT命令和Console命令,产品中到底用哪种更合适?这里整理了一些学习内容,看看最后产品用哪种比较合适。
(1)Console命令
\esp-idf\examples\system\console例程提供了Console命令,具有如下应用特点:
-》ESP32>作为命令提示符;
-》具有历史回放功能,命令自动补充功能;
Argtable3算法解析命令参数,参考如下
Argtable3 学习(2)--教程_凌云俯瞰-CSDN博客
解析程序的命令行一直以来都是一个分散注意力的主要编程任务。Argtable3 库通过允许程序员将源代码中的命令行选项直接定义为静态的结构数组来简化作业,然后将该数组传递给argtable3库函数,这些函数就会相应地解析命令行。从命令行中提取的值直接保存到用户定义的程序变量中,主程序就可以访问这些变量。argtable3还可以从同一数组中生成命令行语法的描述,以便显示为联机帮助。根据第三条BSD许可条款,此库是免费的。
argtable3使用netbsd getopt执行实际的解析,因此它遵循POSIX实用程序约定,大多数UNIX程序和一些Windows程序都遵循此约定。它支持短选项(如-abc
和-o myfile
)、长选项(如–-scalar=7
和–-verbose
)以及无标记参数(如[]
)。
argtable3是一个单文件的ansi-c库。您需要做的只是将argtable3.c添加到项目中,并在源代码中包含argtable3.h。
components\console\command.c给出的结构图如下
(2)AT命令,
【嵌入式开发】自定义AT指令实现sniffer网络嗅探功能_菇星獨行-CSDN博客
自定义AT指令
自定义 AT 指令命名时,使用英文字符,请勿使⽤用其他特殊字符或数字。 AT 基于 ESP8266_NONOS_SDK 编译,ESP8266_NONOS_SDK/example/at中提供了开发者自定 AT指令的示例。乐鑫原本提供的 AT 指令以库文件 libat.a 的形式提供,将包含在编译⽣生成的 AT BIN 固件中。
\esp-at-2.1.0.0_esp32s2\components\at\include\esp_at.h
最大特点是一个参数、四种命令--Test/Query/Set/Exec:
ESP32例程描述:libat_core.a 是 AT 命令集的核心部分, 包含默认的 AT 指令集, 具有 AT 命令解析、 执行和回复功能. 在此库中,可以处理 `AT+TEST=?`、 `AT+TEST?`、 `AT+TEST=“abc”` 和 `AT+TEST` 4 种格式的指令集. 可以根据相关 API 自定义命令, 并且还可以定义输入输出介质, 比如 uart, spi, socket, bt 等等.
首先是参照样例程序注册我们的AT指令
extern void at_exeCmdCiupdate(uint8_t id);
at_funcationType at_custom_cmd[] = {
{"+TEST", 5, at_testCmdTest, at_queryCmdTest, at_setupCmdTest, at_exeCmdTest},
{"+MACSNIFFER", 11, at_testMacSniffer, NULL, NULL, at_exeMacSniffer}
};
第一个参数是我们命令的名字,如上图,运行固件后发送AT+MACSNIFFER样式的命令即可执行我们的程序。
第二个参数 11 是命令字符串的长度。
由于我们只需要测试指令和执行指令,所以只在参数3和6里填上对应的函数即可,其余填入NULL。
可见,对于主要是各种参数和模式设置、查询来说,AT命令更简单些。从某种角度,AT命令是一种console 命令行。
从学习角度,进一步补充
解读乐鑫 AT 指令解析器,解锁你不知道的用法 - 知乎
乐鑫的 AT 指令语法也是遵循 3GPP TS 27.007 语法规范。
AT 指令共性的内容
- 遵循 AT 规范,AT 开头,CRLF 结尾(考虑到有些平台只用 LF 的情况,CRLF 结尾还需要容错);
- 有四类 AT 指令(TEST, GET, SET, EXEC),这里不带加号算作是 basic 指令;
- 字符串类型使用双引号("string")括起来;
- 整数类型不实使用双引号;
- 特殊字符需要转译;
- 等号后面必须有一个参数(当然你的解析器也可以容忍等号后面无参数,作为默认参数填充,这样的话跟执行命令又有什么不同呢);
- 支持省略参数。
以上这些都是需要基于 AT 解析器实现。
再补充:这是一个大问题吗?
ESP-AT核心文件不开源,根据ESP-AT 入门指南_乐鑫 Espressif-CSDN博客_esp-at编译本文主要介绍了 ESP32 AT 的入门指南。AT指令集可适用于用户快速进行 ESP32 开发,本文从硬件准备,编译环境搭建,到编译烧写运行,都做了一个较为详尽的描述,最后也给出了常见的错误处理,供读者参考。https://blog.csdn.net/espressif/article/details/78772678
编译环境用于编译 ESP32 AT 系列程序,环境搭建请参考 https://github.com/espressif/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 无法正常工作。
下载的SDK里面也没有esp-idf
├── esp-idf // esp-at 编译依赖 esp-idf
对应的版本号多少呢?在module_config目录下对应的具体模块IDF_VERSION文件中,比如
\esp-at-2.1.0.0_esp32s2\module_config\module_esp32s2_default\IDF_VERSION.
branch:release/v4.2
commit:dd3c032972c9f6f3dcfb614768ba88dd8a38ab63
repository:https://github.com/espressif/esp-idf.git
意味着4.3版本就不能用啦!!!!
折腾半天,用eclipse编译也没搞定ESP-AT,只能用命令行吗?
最后找了一个ESP8266 早期的AT框架开源代码,以后慢慢调吧