前言

人生如逆旅,我亦是行人。


名词解释

缩写意思
AT(automatic transmission)自动变速器
WiFi无线网
AP(Access Point)无线访问接入点,无线路由器等类设备的统称
AP 模式无线接入点模式
RST(TCP协议的 6 个标志之一)表示重置连接、复位连接
TCP传输控制协议
UDP用户数据报协议
SSL安全套接字协议
RF(Radio Frequency)射频,射频电流
Serve服务
DHCP动态主机配置协议

ESP8266本身就是一个MCU(微型控制单元,可以进行编程),具有两种功能:
  • 做为一个普通的 WIFI 模块,连接 STM32单片机,通过使用官方集成的 AT 指令进行开发;
  • 作为一个集成了 WIFI 功能的 MCU(单片机),用平台提供的 SDK 进行深度的开发;

下面记录一下作为 WIFI 模块去使用所需要了解的 AT 指令。大致主要分为:

  • 基础 AT 指令
  • WIFI 功能 AT 指令
  • Top/IP 工具箱 AT 命令

一、基础 AT 命令

在这里插入图片描述
主要需要掌握的有:

命令功能
AT测试 AT 启动 ,返回 OK
AT + RST重启模块,返回 OK
AT + GMR查看版本信息,返回 OK,为8位版本号

基础 AT 命令很多,但大部分的使用都不是很多,大多使用的就一个 AT 命令,用于测试 AT 启动。


二、Wi-Fi AT 命令集

在这里插入图片描述


1)AT + CWMODE:查询/设置 Wi-Fi 模式

Wi-Fi 的三种模式:

模式功能<mode>
Station 模式(客户模式)ESP8266模块通过路由器连接互联网,手机或电脑通过互联网实现对设备的远程控制1
SoftAP 模式ESP8266模块作为热点,实现手机或电脑直接与模块通信,实现局域网无线控制2
SoftAP+Station 模式两种模式的共存模式,即可以通过互联网控制可实现无缝切换,方便操作3
无 WIFI 模式关闭 Wi-Fi RF0

1、查询命令:查询 ESP 设备的 Wi-Fi 模式

命令:

AT+CWMODE?

响应:

+CWMODE:<mode>
OK

2、设置命令:设置 ESP 设备的 Wi-Fi 模式

命令:

AT+CWMODE=<mode>[,<auto_connect>]

响应:

OK

示例:

	printf("2. CWMODE\r\n");        //查询/设置 Wi-Fi 模式:设置WiFi模式为Station模式
	while(ESP8266_SendCmd("AT+CWMODE=1\r\n", "OK"))
例1:Station 模式下 TCP serve
ESP8266模块通过路由器连接互联网,手机或电脑通过互联网实现对设备的远程控制
AT+CWMODE=1									设置模组为STA模式(串口助手)
AT+CWJAP									查询附近 WiFi(串口助手)
AT+CWJAP="WIFI名称(最好使用英文)","WIFI密码"	连接WiFi(串口助手)
											当外面需要再用引号将其括起来时,里面则需要在每个引号的前面加上 / 作为转义字符
AT+CIFSR									查看路由器分配给模组的IP地址,例如:192.168.43.103(串口助手)
AT+CIPMUX=1									打开多连接(串口助手)
AT+CIPSERVER=1,8080							设置模块服务器端口(串口助手)

打开网络调试助手进行设置:
请打开电脑连接路由器的WIFI热点,并且打开网络调试助手,在网络调试助手上输入连接模块的 IP和设置的端口。
路由器给模块分配的 IP  192.168.43.103,端口为自己设定的 8899(默认的为 333)(网络调试助手)

AT+CIPSEND=0,11								进入数据发送模式:11个字节

例2:SoftAP 模式下 TCP serve
ESP8266模块作为热点,实现手机或电脑直接与模块通信,实现局域网无线控制
AT+CWMODE=2							开启 AP 模式(串口助手)
AT+CWJAP="ESP8266","密码",11,0		设置模块的 wifi 名和 wifi 密码(串口助手)
									当外面需要再用引号将其括起来时,里面则需要在每个引号的前面加上 / 作为转义字符
AT+CIPSERVER=1,8080					设置模块服务器端口(串口助手)

打开电脑去连接模块建立的AP热点
打开网络调试助手,输入连接模块的 ip 和设置的端口。

AT+CIPSEND=0,11								进入数据发送模式:11个字节

例3:SoftAP+Station 模式下 TCP serve
两种模式的共存模式,即可以通过互联网控制可实现无缝切换,方便操作

2)AT+CWDHCP:启用/禁用 DHCP

查询命令

命令:

AT+CWDHCP?

响应:

<state>:状态

设置命令

功能: 启用/禁用 DHCP

命令:

AT+CWDHCP=<operate>,<mode>
	printf("3. AT+CWDHCP\r\n");     //启用/禁用 DHCP
	while(ESP8266_SendCmd("AT+CWDHCP=1,1\r\n", "OK"))

响应:

OK

参数:

  • <operate>:0表示禁用;1表示启用;
  • <mode>:Bit0 表示 Station 的 DHCP;Bit1 表示 SoftAP 的 DHCP;
  • <state>:DHCP 的状态
    • Bit0:
      • 0:禁用 Station 的 DHCP
      • 1:启用 Station 的 DHCP
    • Bit1:
      • 0:禁用 SoftAP 的 DHCP
      • 1:启用 SoftAP 的 DHCP
    • Bit2(ESP32 only)
      • 0: 禁用 Ethernet 的 DHCP
      • 1: 启用 Ethernet 的 DHCP

三、TCP/IP AT 命令


在这里插入图片描述


1)AT+CIPSTATUS:查询 TCP/UDP/SSL 连接状态和信息

命令:

AT+CIPSTATUS

响应:

STATUS:<stat>
+CIPSTATUS:<link ID>,<"type">,<"remote IP">,<remote port>,<local port>,<tetype>
OK

参数:
在这里插入图片描述

2)AT+CIPSTART:建立 TCP 连接、UDP 传输或 SSL 连接

1、建立 TCP 连接

  • 命令:
// 单连接 (AT+CIPMUX=0):
AT+CIPSTART=<"type">,<"remote host">,<remote port>[,<keep alive>][,<"local IP">]

// 多连接 (AT+CIPMUX=1):
AT+CIPSTART=<link ID>,<"type">,<"remote host">,<remote port>[,<keep alive>][,<"local IP">]
  • 响应:
CONNECT

OK
  • 参数:
    在这里插入图片描述

  • 连接OneNet 的 MQTT 的实际应用:

//连接上OneNet的 MQTT
#define ESP8266_ONENET_INFO		"AT+CIPSTART=\"TCP\",\"183.230.40.39\",6002\r\n" 
  • 示例:
AT+CIPSTART="TCP","iot.espressif.cn",8000
AT+CIPSTART="TCP","192.168.101.110",1000
AT+CIPSTART="TCP","192.168.101.110",1000,,"192.168.101.100"
AT+CIPSTART="TCPv6","test-ipv6.com",80
AT+CIPSTART="TCPv6","fe80::860d:8eff:fe9d:cd90",1000,,"fe80::411c:1fdb:22a6:4d24"

// esp-at 已通过 AT+CWJAP 获取到 IPv6 全局地址
AT+CIPSTART="TCPv6","2404:6800:4005:80b::2004",80,,"240e:3a1:2070:11c0:32ae:a4ff:fe80:65ac"

2、建立 UDP 传输

  • 命令:
// 单连接:(AT+CIPMUX=0)
AT+CIPSTART=<"type">,<"remote host">,<remote port>[,<local port>,<mode>,<"local IP">]

// 多连接:(AT+CIPMUX=1)
AT+CIPSTART=<link ID>,<"type">,<"remote host">,<remote port>[,<local port>,<mode>,<"local IP">]
  • 响应:
CONNECT

OK
  • 参数:

在这里插入图片描述

  • 示例:
// UDPv4 单播
AT+CIPSTART="UDP","192.168.101.110",1000,1002,2
AT+CIPSTART="UDP","192.168.101.110",1000,,,"192.168.101.100"

// 基于 IPv6 网络的 UDP 单播
AT+CIPSTART="UDPv6","fe80::32ae:a4ff:fe80:65ac",1000,,,"fe80::5512:f37f:bb03:5d9b"

// 基于 IPv6 网络的 UDP 多播
AT+CIPSTART="UDPv6","FF02::FC",1000,1002,0

3、建立 SSL 连接

  • 命令:
AT+CIPSTART=[<link ID>,]<"type">,<"remote host">,<remote port>[,<keep alive>,<"local IP">]
  • 响应:
OK
  • 参数:

在这里插入图片描述

  • 示例:
AT+CIPSTART="SSL","iot.espressif.cn",8443
AT+CIPSTART="SSL","192.168.101.110",1000,,"192.168.101.100"

// esp-at 已通过 AT+CWJAP 获取到 IPv6 全局地址
AT+CIPSTART="SSLv6","240e:3a1:2070:11c0:6972:6f96:9147:d66d",1000,,"240e:3a1:2070:11c0:55ce:4e19:9649:b75"

ESP8266 初始化示例:

void ESP8266_Init(void)
{
	
	ESP8266_Clear();
	
	printf("1. AT\r\n");            //AT:测试AT启动
	while(ESP8266_SendCmd("AT\r\n", "OK"))
		HAL_Delay(500);
	
	printf("2. CWMODE\r\n");        //查询/设置 Wi-Fi 模式:设置WiFi模式为Station模式
	while(ESP8266_SendCmd("AT+CWMODE=1\r\n", "OK"))
		HAL_Delay(500);
	
	printf("3. AT+CWDHCP\r\n");     //启用/禁用 DHCP
	while(ESP8266_SendCmd("AT+CWDHCP=1,1\r\n", "OK"))
		HAL_Delay(500);
	
	printf("4. CWJAP\r\n");         //连接wifi
	while(ESP8266_SendCmd(ESP8266_WIFI_INFO, "GOT IP"))
		HAL_Delay(500);
	
	printf("5. CIPSTART\r\n");		//连接ONENET的TCP协议
	while(ESP8266_SendCmd(ESP8266_ONENET_INFO, "CONNECT"))
		HAL_Delay(500);
	
	printf("6. ESP8266 Init OK\r\n");

}
Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐