跳到主要内容位置

AT指令(基于esp8266)

ESP8266-01s比01升级了

什么是AT指令#

AT(Attention) command set,AT指令集或AT命令集,一般称其为AT指令

来源于海斯命令集:Hayes command set

用于直接发送命令操作设备。

指令集参考文档rtos_doc_source\RTOS培训资料\00_基础资源资料\1_STM32F103\3_硬件资料\4_ESP8266-01S模块资料\01_技术手册\01_乐鑫(espressif)\ESP8266 Non-OS SDK AT 指令集_V3.0.1.pdf

注意事项

  • 发送”AT”可以判断模块是否就绪,返回”OK“表示就绪

  • AT命令区分大小写

  • 串口调试助手需要勾选发送新行,也就是命令后面需要有\r\n

    CR(Carriage Return)\r 表示回车, LF(Line Feed)\n 表示换行

    • Dos和Windows采用回车+换行(CR+LF)表示下一行 \r\n

    • UNIX/Linux采用换行符(LF)表示下一行 \n

    • MAC OS系统采用回车符(CR)表示下一行 \r

    Windows下编写的Shell脚本,直接放到linux/unix下执行会报错,就是因为行结束符不一样导致的。

AT指令的分类和提示信息#

分类:

  • 测试指令:⽤于查询设置指令的参数以及取值范围
  • 查询指令:返回参数的当前值
  • 设置指令:设置⽤户⾃定义的参数值
  • 执⾏指令:执⾏受模块内部程序控制的参数不可变的功能,如指令"AT"

注意:

  • 不是每条AT指令都具备上述4种类型的命令
  • []括号内为缺省值,不必填写或者可能不显示.例如,AT+CWJAP_DEF—连接 AP,保存到 Flash : AT+CWJAP_DEF=<ssid>,<pwd>[,<bssid>][,<pci_en>]
  • 使用双引号表示字符串数据"string”,例如:AT+CWSAP:="ESP756290","21030826",1,4
  • 默认波特率为115200,修改波特率 临时修改-AT+UART_CUR=<baudrate>,<databits>,<stopbits>,<parity>,<flow control>;写入FLASH修改,AT+UART_DEF=<baudrate>,<databits>,<stopbits>,<parity>,<flow control>
  • AT指令必须大写,并且以回车换行符结尾(CRLF)
  • 命令中分为xxx_CURxxx_DEF,前者为临时配置,后者为永久配置,写入Flash

基础AT指令#

基础AT指令是控制模块的基础功能模式的指令,如下表所示:

WIFI功能指令#

配置WIFI连接的AT指令,如下表:

TCP/IP 指令#


使用示例#

参考"rtos_doc_source\RTOS培训资料\00_基础资源资料\1_STM32F103\3_硬件资料\4_ESP8266-01S模块资料\01_技术手册\01_乐鑫(espressif)\ESP8266 Non-OS AT 指令使用示例_V1.3.pdf"

(1)单连接的TCP Client#

  • 配置WIFI模式

    AT+CWMODE=3 // softAP+station mode
  • 连接路由器

    AT+CWJAP="SSID","password" // SSID and password of router

    注:没有后缀的命令等于xxx_DEF,即写入Flash命令一样

    响应:

    busy p...
    WIFI CONNECTED
    WIFI GOT IP
    OK
  • 查询 ESP8266 设备的 IP 地址

    AT+CIFSR

    响应:

    busy p...
    +CIFSR:APIP,"192.168.4.1" //自己热点ap的ip
    +CIFSR:APMAC,"46:17:93:17:6b:c0"
    +CIFSR:STAIP,"192.168.3.21" //连接的路由器获得的ip地址
    +CIFSR:STAMAC,"44:17:93:17:6b:c0"
    OK
  • PC与ESP8266设备连接同⼀路由器,在PC端使⽤⽹络调试⼯具(使用sscom软件"rtos_doc_source\RTOS培训资料\00_基础资源资料\1_STM32F103\3_硬件资料\4_ESP8266-01S模块资料\02_开发工具\sscom5.13.1.zip"),建⽴⼀个UDP传输。
  • ESP8266 设备作为 TCP client 连接到上述服务器 AT+CIPSTART—建⽴ TCP 连接,UDP 传输或 SSL 连接

    AT+CIPSTART=<type>,<remote IP>,<remote port>[,<TCP keep alive>]
    <type>:字符串参数,连接类型,"TCP""UDP""SSL"
    <remote IP>:字符串参数,远端 IP 地址
    <remote port>:远端端⼝号
    AT+CIPSTART="TCP","192.168.3.3",8080
  • 发送数据 服务器发送数据:

    客户端esp8266发送数据:

    设置指令:AT+CIPSEND=<length> //单连接
    AT+CIPMODE=0 //需要线设置为普通传输模式
    AT+CIPSEND=4 //发送数据,4表示长度
    1234 //4个字节数据,超出指定字节的数据就会丢弃

    报错notail error

    是复制命令时后面有符号。 (- -)尴尬

    下面是正常的过程

    注:发送数据时,如果输⼊的字节数超过了设置⻓度(n),系统将提示 busy,并发送数据的前 n 个字节,发送完成后响应 SEND OK

  • 当ESP8266设备接收到服务器发来的数据,将提示如下信息:

    +IPD,n:xxxxxxxxxx // received n bytes, data=xxxxxxxxxx
    +IPD,25:hello,this is TCPServer //示例

    此指令在普通指令模式下有效,ESP8266 接收到⽹络数据时向串⼝发送 +IPD 和数据:

    (+CIPMUX=0)+IPD,<len>[,<remote IP>,<remote port>]:<data>


(2)固定远端的UDP通信(多连接)#

UDP 传输不区分 server 或者 client ,由指令 AT+CIPSTART 建⽴传输。

  • 配置 WiFi 模式

    AT+CWMODE=3 // softAP+station mode
  • 连接路由器

    AT+CWJAP="HUAWEI-HiLink","qc709709"
  • 查询 ESP8266 设备的 IP 地址

    AT+CIFSR
    busy p...
    +CIFSR:APIP,"192.168.4.1"
    +CIFSR:APMAC,"46:17:93:17:6b:c0"
    +CIFSR:STAIP,"192.168.3.21"
    +CIFSR:STAMAC,"44:17:93:17:6b:c0"
    OK
  • PC 与 ESP8266 设备连接同⼀路由器,在 PC 端使⽤⽹络调试⼯具,建⽴⼀个 UDP 传输。

  • UDP 通信的远端固定,由 AT+CIPSTART 指令的最后⼀个参数设置为 0 决定。系统将分配⼀个连接号给这个固定连接,UDP 通信双⽅不会被其他设备替代。

    • 使能多连接

      AT+CIPMUX=1
    • esp8266创建 UDP 传输。 分配连接号为 4, UDP协议, 远端ip:192.168.3.3,远端端口号:8080, 本地端口号:9090, UDP模式为0,即远端固定,收到数据后不更改远端目标

      AT+CIPSTART=4,"UDP","192.168.3.3",8080,9090,0

      格式:多连接模式 (AT+CIPMUX=1) 时:AT+CIPSTART=<link ID>,<type>,<remote IP>,<remote port>[,(<UDP local port>),(<UDP mode>)]

  • esp8266发送数据

    AT+CIPSEND=4,7 // Send 7 bytes to transmission NO.4
    >UDPtest // enter the data, no CR

    多连接时:(+CIPMUX=1) AT+CIPSEND=<link ID>,<length>

  • esp8266接收到数据

    和之前类似,多了4表示网络连接号。

  • 断开UDP连接(多连接)

    AT+CIPCLOSE=<link ID>

    当ID为5时,关闭所有连接。


(3)远端可变的UDP通信#

设置与连接wifi部分,和前文一致。这里直接从建立传输开始

当使⽤ AT+CIPSTART 指令创建 UDP 通信,将最后⼀个参数设置为 2 时,UDP 通信的远端可改变。UDP传输远端会⾃动更改为最近⼀个与ESP8266 UDP 通信的远端。

  • 创建 UDP 传输

    AT+CIPSTART="UDP","192.168.3.3",8080,9090,2

    注意,上面连接方式需要先设置为单连接:

    AT+CIPMUX=0
  • 发送数据

    AT+CIPSEND=7 // Send 7 bytes
    >UDPtest // enter the data, no CR 没有回车换行
  • 发送数据到其他指定远端。例如,发数据到192.168.3.3, 端⼝8081 。

    AT+CIPSEND=7,"192.168.3.3",8081

UDP传输远端会⾃动更改为最近⼀个与ESP8266 UDP通信的远端。就是说,现在继续发送,都是默认和8081通信:

AT+CIPSEND=7 // Send 7 bytes
>UDPtest // enter the data, no CR 没有回车换行

  • 接收数据

  • 断开连接(单连接)

    AT+CIPCLOSE

(4)TCP Client 单连接透传#

注:ESP8266 AT 默认仅在 TCP client 单连接UDP 传输模式时,⽀持透传

透传是什么?

透明传输:在传输过程中,对外界透明,不管所传输的内容、数据协议形式,不对要传输数据做任何处理,只是把需要传输的内容当成一组二进制数据完美地传输到目的节点。

  • 配置WIFI模式,连接路由器;查询 ESP8266 设备的 IP 地址,PC 与 ESP8266 设备连接同⼀路由器,在 PC 端使⽤⽹络调试⼯具,建⽴⼀个 TCP 服务器
AT+CWMODE=3
AT+CWJAP="SSID","password"
AT+CIFSR
AT+CIPSTART="TCP","192.168.3.3",8080
  • 使能透传模式
AT+CIPMODE=1
  • ESP8266 设备向服务器发送数据
AT+CIPSEND
> //From now on, data received from UART will be transmitted to server automatically.

收到此命令后先换⾏返回 >

进⼊透传模式发送数据,每包最⼤ 2048 字节,或者每包数据以 20 ms 间隔区分。

  • 退出发送数据

在透传发送数据过程中,若识别到单独的⼀包数据 “+++”,则退出透传发送。

“+++“退出透传发送数据,回到正常AT指令模式。此时,TCP连接仍然是保持的,可以再发AT+CIPSEND指令,重新开始透传。

  • 退出透传模式

    AT+CIPMODE=0
  • 断开 TCP 连接

    AT+CIPCLOSE

(5)UDP 透传#

ESP8266 作为 softAP 实现 UDP 透传的举例,ESP8266 作为 station 可同理实现透传,跳过第二步就可以了。

  • 配置 WiFi 模式

    AT+CWMODE=3 // softAP+station mode
  • (可选)PC 连⼊ ESP8266 softAP,

  • 在 PC 端使⽤⽹络调试⼯具,建⽴⼀个 UDP 传输

  • ESP8266 与 PC 对应端⼝建⽴固定对端的 UDP 传输

    AT+CIPSTART="UDP","192.168.3.3",8080,9090,0
  • 使能透传模式

    AT+CIPMODE=1
  • 发送数据

    AT+CIPSEND
    >
  • 退出发送数据

    在透传发送数据过程中,若识别到单独的⼀包数据 “+++”,则退出透传发送
  • 退出透传模式

    AT+CIPMODE=0
  • 断开 TCP 连接

    AT+CIPCLOSE

(6)多连接 TCP Server#

  • 配置 WiFi 模式

    AT+CWMODE=3 // softAP+station mode
  • 使能多连接

    AT+CIPMUX=1
  • 建⽴ TCP server

    AT+CIPSERVER=1,9090 // default port = 333
    AT+CIPSERVER=<mode>[,<port>]

    <mode>

    ​ ‣ 0:关闭服务器

    ​ ‣ 1:建⽴服务器

    <port>:端⼝号,默认为 333。

    注:多连接情况下 (AT+CIPMUX=1),才能开启 TCP 服务器。

    ​ 创建 TCP 服务器后,⾃动建⽴ TCP 服务器监听。

    ​ 当有 TCP 客户端接⼊,会⾃动占⽤⼀个连接 ID。

  • 在 PC 端使⽤⽹络调试⼯具,建⽴⼀个 TCP client,连接 ESP8266 的 TCP server

    ESP8266 作为 TCP server 有超时机制,如果连接建⽴后,⼀段时间内⽆数据来往,ESP8266 TCP server 会将 TCP client 踢掉

    补充:设置 TCP 服务器超时时间 - ESP8266 作为 TCP 服务器,会断开⼀直不通信直⾄超时了的 TCP 客户端连接

    AT+CIPSTO?
    AT+CIPSTO=<time>

    <time>:TCP 服务器超时时间,取值范围 0 ~ 7200s。如果设置 AT+CIPSTO=0,则永远不会超时,不建议这样设置。

  • esp8266发送数据

    AT+CIPSEND=0,4 // send 4 bytes to connection NO.0
    >test // enter the data, no CR

  • esp8266接收数据

    +IPD,2,12:UDPtest,8081
    +IPD,1,14:UDPtest,8080
    +IPD,0,n:xxxxxxxxxx // form NO.0 , received n bytes, data=xxxxxxxxxxx

  • 断开连接

    AT+CIPCLOSE=0
    设置指令(⽤于多连接的情况):
    AT+CIPCLOSE=<link ID>
    功能:关闭 TCP/UDP 传输。
    <link ID>:需要关闭的连接 ID 号。当 ID
    5 时,关闭所有连接。

请点击左侧菜单(移动端为右下角)选择要查看的所有笔记吧。