AT指令
# AT指令规则
开发者在硬件产品MCU 上开发产品固件的功能时,需按照如下规则设计指令:
串口配置:115200,8N1格式,UART口为3.3V-5.0V TTL电平;
AT命令为以字符AT开始,参数以“,”分隔以回车换行符(\r\n)结束(即CR LF或0x0D 0A);
指令长度:总长度需小于1024个字符(包含AT字节头);
指令与参数应由合法字符构成,包括字母、数字、下划线;
当输入或输出的参数表示的是字符串需要使用[""]标定,表示数值型参数不使用[""],如果指令有特殊规定,则以该指令的规定为准;
所有指令均为立即生效,无需特殊指令进行保存,运行不合法AT指令,程序会立即返回ERROR;
注意,所有 AT 命令均为串行执行,每次只能执行一条命令。因此,在使用 AT 命令时,应等待上一条命令执行完毕后,再发送下一条命令。
除了字符串参数,指令的其他部分不允许出现空格;
# AT 命令包含 4 种命令格式:
Test Command
示例: AT
用途:测试命令。
Query Command
示例: AT+<x>?
用途: 查询命令,可以返回当前参数的值,以及其他相关联的信息。
Set Command
示例: AT+<x>=<…>
用途: 设置命令,向AT输入一些参数, 执行相应的操作。
Execute Command
示例: AT+<x>
用途: 执行指令,该指令不带参数。
# AT指令集
AT指令可以通过串口调试助手进行输入,也可以使用编程输入。
序号 | 指令 | 描述 |
---|---|---|
1 | AT | 测试AT串口是否通信正常; |
2 | AT+RST | 软件重启,复位CPU; |
3 | AT+GMR | 查看模组版本信息包括模组固件版本和硬件版本; |
4 | AT+SYSTIMESTAMP | 查询本地时间戳,时间格式为UTC时间; |
5 | AT+CWMODE | 查询WIFI 模式(Station/SoftAP/Station+SoftAP),模组使用的默认模式为Station模式; |
6 | AT+CWJAP | 设置命令,设置连接的AP,模组将尝试去连接该AP; 查询命令,查询连接AP的详细信息,包括STA的MAC,连接信号强度等信息; |
7 | AT+STAIP | 查询模组作为sta的IP,子网掩码,网段信息; |
8 | AT+STACONNSTATUS | 查询WIFI连接状态; |
9 | AT+GLDKEY | 烧写三元组信息到NVS永久保存,模组每次上电都会读取; |
10 | AT+MQTTCONNSTATUS | 查看云平台连接情况; |
11 | AT+GLDIOTSEND | 模组将来自用户设备的JSON数据发送至云端; |
12 | +GLDIOTREV | 模组将接收到的云端数据发送给用户设备; |
13 | AT+SOFTVERSION | 查询设置用户设备软件版本; |
14 | AT+HARDVERSION | 查询设置用户设备硬件版本; |
15 | AT+YMODEM | 进入Ymodem模式,准备接收OTA固件; |
# AT指令详解
# AT
功能:测试AT硬件通路是否通畅。
执行命令 | AT\r\n |
---|---|
响应 | OK\r\n |
说明 | 如果发送命令后,没有响应,请检查模组和设备之间的连线是否正常,以及模组的电压是否稳定 |
# AT+RST
功能:重启模组。
执行命令 | AT+RST\r\n |
---|---|
响应 | OK\r\n |
# AT+GMR
功能:查看模组版本信息。
查询命令 | AT+GMR?\r\n |
---|---|
响应 | +GMR: <MOD_FW_VER>,<MOD_HARD_VER>, <MOD_COMM_TYPE>,<MOD_TYPE>,<AT_VERSION>\r\n OK\r\n |
参数 | MOD_FW_VER(str):模组固件版本; |
MOD_HARD_VER(str):模组硬件版本。 | |
MOD_COMM_TYPE(str):模组的通信方式 wifi/4g/… 其他:预留 | |
MOD_TYPE(str): 模组的具体型号 | |
AT_VERSION(str): at指令的版本号 |
# AT+SYSTIMESTAMP
功能:查询本地UTC时间戳。
查询命令 | AT+SYSTIMESTAMP?\r\n |
---|---|
响应 | +SYSTIMESTAMP:<Unix_timestamp>\r\n OK\r\n |
参数 | Unix_timestamp(num):时间戳,以1970年开始秒数。 |
注意:只有在连接到 MQTT后,才能确保返回参数中的时间戳是有效的。
用户需要自行判断时间的有效性,推荐判断方式: 返回参数 > 1609430400(北京时间 2021-01-01 00:00:00)即为有效。
# AT+CWJAP
功能:查询/设置模组Station连接的AP信息。该指令只对WIFI模组有效。
- 查询命令
查询命令 | AT+CWJAP?\r\n |
---|---|
响应 | +CWJAP:<ssid>,<bssid>,<channel>,<rssi>, <authmode>\r\n OK\r\n |
参数 | ssid:连接AP的名称; |
bssid:模组作为STA的MAC地址; | |
Channel:连接的信道; | |
rssi:连接信号强度; | |
authmode:AP加密方式, 0:无加密; 1:WEP加密; 2:WPA_PSK加密; 3:WPA2_PSK加密; 4:WPA_WPA2_PSK加密; 5:WPA2_ENTERPRISE加密; 6:WPA3_PSK加密; 7:WPA2_WPA3_PSK加密。 |
- 设置命令
设置命令 | AT+CWJAP=<ssid>,<pwd>\r\n |
---|---|
响应 | OK\r\n |
参数 | ssid:连接AP的名称; |
pwd:连接AP的密钥; | |
说明 | 设置一次即可,如果重新上电,模组会自动按照最后一次配置自动连接。 |
# AT+STAIP
功能:查询模组作为sta的IP,子网掩码,网段信息。
设置命令 | AT+STAIP?\r\n |
---|---|
响应 | +STAIP=<IP >,<MASK>,<GW>\r\n OK\r\n |
参数 | IP:分配模组的IP地址; |
MASK:子网掩码; | |
GW:网关地址; |
# AT+STACONNSTATUS
功能:查询与 IoT模组Station与AP的连接状态。
查询命令 | AT+STACONNSTATUS?\r\n |
---|---|
响应 | +STACONNSTATUS:connect\r\n OK\r\n 或 +STACONNSTATUS:disconnect\r\n OK\r\n |
# AT+GLDKEY
- 查询命令
功能:查询三元组,如果未烧写三元组信息,调试串口将提示ERROR。
查询命令 | AT+GLDKEY?\r\n |
---|---|
响应 | +CLDKEY:<ModelID>,<DeviceID>,<DeviceToken>\r\n OK\r\n 或 ERROR\r\n |
- 设置命令
功能:该指令应该在调试阶段或者生产阶段使用,用于烧写三元组到模组中。
设置命令 | AT+GLDKEY=<ModelID>,<DeviceID>,<DeviceToken>\r\n |
---|---|
响应 | +GLDKEY:<ModelID>,<DeviceID>,<DeviceToken>\r\n OK\r\n |
参数 | ModelID:模型ID; |
DeviceID:设备ID; | |
DeviceToken:设备Token; | |
说明 | 1. 烧写三元组信息到模组flash永久保存,烧写成功返回OK,失败返回ERROR。 2. 烧写成功后,模组会断网,并重新连接网络和MQTT。 3. 烧写成功后,模组将清空ModelToken/绑定的设备SN号/记录的设备版本信息 |
# AT+MQTTCONNSTATUS
功能:查询与 IoT模组与云平台的连接状态。
查询命令 | AT+MQTTCONNSTATUS?\r\n |
---|---|
响应 | +MQTTCONNSTATUS:connect\r\n OK\r\n 或 +MQTTCONNSTATUS:disconnect\r\n OK\r\n |
# AT+GLDIOTSEND
格式:AT+GLDIOTSEND=<topic>[,<method>][,],<playload>\r\n
功能:模组往云端发布JSON消息。
说明:格式中参数有[]为可选项,发送的数据格式与发送的topic类型相关;
当用户收到云端的propset消息,用户需要更新当前相关属性值,并立即上报props消息;如果设备不上报修改后的最新属性,会导致后台无法判断属性设备是否成功。
当用户收到云端的cmd消息,用户需要执行相关动作,并立即上报cmd_reply消息, 后台收到cmd_reply,通过消息里面的返回码判断命令是否执行成功。
- 发送topic类型为props
设置命令 | AT+GLDIOTSEND="props",<playlod_len>,<playload>\r\n |
---|---|
响应 | +GLDIOTSEND:OK\r\n OK\r\n 或 +GLDIOTSEND:ERR\r\n OK\r\n |
参数 | playlod_len:playload的有效长度({..}内数据长度,包含{}本身); |
Playload:要发送的JSON数据,以{}括起来。 | |
例子 | [2021-06-17 09:28:48.462 T]AT+GLDIOTSEND= "props",31,"{"driverID":"hi","alarmLoad":3}"\r\n [2021-06-17 09:28:48.522 R]+GLDIOTSEND:OK\r\n OK\r\n |
- 发送topic类型为events
设置命令 | AT+GLDIOTSEND="events",<method>,<playlod_len>,<playload>\r\n |
---|---|
响应 | +GLDIOTSEND:OK\r\n OK\r\n 或 +GLDIOTSEND:ERR\r\n OK\r\n |
参数 | Method:事件类型; |
playlod_len:playload的有效长度({..}内数据长度,包含{}本身); | |
Playload:要发送的JSON数据,以{}括起来。 | |
例子 | [2021-06-17 09:28:48.462 T]AT+GLDIOTSEND= "events","zl.events.ap”, 13,"{"name":"hi"}"\r\n [2021-06-17 09:28:48.522 R]+GLDIOTSEND:OK\r\n OK\r\n |
- 发送topic类型为cmd_reply
设置命令 | AT+GLDIOTSEND="cmd_reply",<playload>\r\n |
---|---|
响应 | +GLDIOTSEND:OK\r\n OK\r\n 或 +GLDIOTSEND:ERR\r\n OK\r\n |
参数 | Playload:数值型字符,200 success 成功 50010 request parameter invalid 请求参数错误 |
例子 | [2021-06-17 09:28:48.462 T]AT+GLDIOTSEND= "cmd_reply",200\r\n [2021-06-17 09:28:48.522 R]+GLDIOTSEND:OK\r\n OK\r\n |
# GLDIOTREV
功能:接收云端发布的消息,并将数据通过AT串口发送给用户。
具体接收数据格式依topic类型而定。
- 接收到prospset类型
数据接收 | +GLDIOTREV="prospset",<playlod_len>,<playload>\r\n |
---|---|
参数 | playlod_len:playload的有效长度({..}内数据长度,包含{}本身); |
Playload:接收到的JSON数据,以{}括起来。 | |
例子 | +GLDIOTREV="prospset",11,"{"light":1}"\r\n |
- 接收到cmd类型
数据接收 | +GLDIOTREV="cmd",<method>,<playlod_len>, <playload>\r\n |
---|---|
参数 | Method:命令类型; |
playlod_len:playload的有效长度({..}内数据长度,包含{}本身); | |
Playload:接受到的JSON数据,以{}括起来。 | |
例子 | +GLDIOTREV="cmd","zl.cmd.switch",12,"{"status":1}"\r\n |
# AT+SOFTVERSION
用户设备固件版本:由字符串组成,最多11字节,中间由“.”隔开,如:“10.0.255”,每个字段范围0-255。
- 查询用户设备固件版本号
查询命令 | AT+SOFTVERSION?\r\n |
---|---|
响应 | +SOFTVERSION: <MCU_FW_VER>\r\n OK\r\n |
参数 | MCU_FW_VER:用户设备固件版本号,当平台下发新的用户设备固件到模组后,会回应最新固件版本号,格式X.X.X,当模组不知道用户设备的版本时,则回复版本号为 "0.0.0" |
例子 | [[2021-09-17 20:37:36.147 T]AT+SOFTVERSION?\r\n [2021-09-17 20:37:36.175 R] +SOFTVERSION:"2.0.0"\r\n OK\r\n |
- 用户设备向模组发送最新固件版本号
查询命令 | AT+SOFTVERSION=<MCU_FW_VER>\r\n |
---|---|
响应 | OK\r\n |
参数 | MCU_FW_VER:用户设备固件版本号,用户设备应当在升级完成后,重新上电时,主动发送一次设置当前固件版本号,以便平台更新最新版本 |
例子 | [2021-09-17 20:42:33.282 T] AT+SOFTVERSION="2.0.2"\r\n [2021-09-17 20:42:33.324 R]OK\r\n |
# AT+HARDVERSION
用户设备硬件版本:由字符串组成,最多7字节,中间由“.”隔开,如:“1.1”,每个字段范围0-255。
- 查询用户设备硬件版本号
查询命令 | AT+HARDVERSION?\r\n |
---|---|
响应 | +HARDVERSION:<MCU_HARD_VER>\r\n OK\r\n |
参数 | MCU_HARD_VER:用户设备硬件版本号,这个由用户设备初始化连接时,主动发送一次,格式"X.X" |
例子 | [2021-09-17 20:57:46.919 T]AT+HARDVERSION?\r\n [2021-09-17 20:57:46.943 R]+HARDVERSION:"1.2"\r\n OK\r\n |
- 用户设备向模组发送最新MCU硬件版本号
查询命令 | AT+HARDVERSION=<MCU_HADR_VER>\r\n |
---|---|
响应 | OK\r\n |
参数 | MCU_HARD_VER:用户设备硬件版本号,这个由用户设备初始化连接时,上报给模组,便于平台统一管理识别 |
例子 | [2021-09-17 20:59:33.138 T] AT+HARDVERSION="1.3"\r\n [2021-09-17 20:59:33.161 R]OK\r\n |
# AT+YMODEM
设置命令 | AT+YMODEM\r\n |
---|---|
响应 | OK\r\n或ERROR\r\n |
说明 | 模组收到AT+YMODEM启动命令后,若用户设备升级固件不存在,返回ERROR;正常则停止AT server并延时约3s后清空串口数据,进入ymodem模式,在此期间,用户设备应跳转到ymodem升级模式准备接受数据,等待下位机响应‘C’,若60s内没有得到应答则退出ymodem模式,重新进入AT server;如收到应答开始通过ymodem发送固件; |
例子 | [2021-09-17 21:09:17.692 T]AT+YMODEM\r\n [2021-09-17 21:09:17.709 R]ERROR\r\n【备注:当固件不存在时,返回错误】 [2021-09-18 09:08:25.776 T]AT+YMODEM [2021-09-18 09:08:25.800 R]OK |
# AT+GLDMODELINFO
- 查询命令
功能:查询模型ID和模型Token。
查询命令 | AT+GLDMODELINFO?\r\n |
---|---|
响应 | +GLDMODELINFO:<ModelID>,<ModelToken>\r\n OK\r\n 或 ERROR\r\n |
说明 | 考虑到对 modelToken的保护,将以'*'代替实际的内容。 |
- 设置命令
功能:烧写模型token和模型ID。
设置命令 | AT+GLDMODELINFO=<ModelID>,<ModelToken>\r\n |
---|---|
响应 | +GLDMODELINFO:<ModelID>,<ModelToken>\r\n OK\r\n |
参数 | ModelID:模型ID; |
ModelToken:模型Token; | |
说明 | 1. 烧写三元组信息到模组flash永久保存,烧写成功返回OK,失败返回ERROR。 2. 烧写成功后,模组会断网,并重新连接网络和MQTT。 3. 烧写成功后,模组将擦除DeviceID/DeviceToken/绑定的设备SN/设备的版本号等信息。 |
# AT+SN
- 查询命令
功能:查询和模组绑定的设备序列号。
查询命令 | AT+SN?\r\n |
---|---|
响应 | +SN:<和模组绑定的SN>\r\n OK\r\n 或 ERROR\r\n |
说明 | 如果返回的数据为空字符串,则模组还没有和任命设备进行绑定。 |
- 设置命令
功能:请求将设备SN和模组进行绑定。
设置命令 | AT+SN=<设备SN>\r\n |
---|---|
响应 | OK\r\n或ERROR\r\n |
参数 | 设备SN:生产时,烧写在设备侧的设备序列号; |
说明 | 1. 如果设备SN和模组原绑定的一致,则返回OK; 2. 如果模组是一机一密的方式,则该指令一直返回ERROR, 设备通过 AT+MODELINFO?指令,发现存在ModelToken,则说明是一型一密的方式; 3. 模组和设备SN进行绑定后,存储进flash; 4. 使用AT+GLDKEY或者AT+GLDMODELINFO烧写新的密钥信息,可以解除设备SN和模组的绑定。 |
# 调试与测试
首次使用广联达WIFI模组开发,建议使用串口板,先通过电脑串口,进行AT指令调试。
# WIFI模组
- 确认串口连接正常
发AT,回OK。
- 设置三元组信息
设置三元组信息通过本地烧写的方式,使用AT+GLDKEY命令将三元组通过串口烧录到模组NVS区。命令格式:
AT+ CLDKEY=<模型ID>,<设备ID>,<设备Token>\r\n
其中:
模型ID:即产品ID,创建产品时分配,长度不超过64字节;
设备ID:用户可自行定义,长度不超过64字节;
设备Token:服务器生产,不超过64字节;
注:设置一次即可,断电保存。
- 设置连接路由器信息
AT+CWJAP=<ssid>,<pwd>\r\n
<ssid>:目标 AP 的 SSID,最长 64 字节 ASCII;
<pwd>:密码最长 64 字节 ASCII。
注:SSID 和PWD中不允许出现 ","(逗号) 或者'"'(双引号);
设置一次即可,断电保存,来电自动按照最后一次配置自动连接。
- 自动连接到筑联服务器
连接服务器成功后,将收到串口数据
+MQTTCONNSTATUS:connect
或者通过AT+MQTTCONNSTATUS?命令查看服务器连接状态。
+MQTTCONNSTATUS:connect 连接上
+MQTTCONNSTATUS:disconnect 未连接
- 上报数据
命令:
AT+GLDIOTSEND =<topic>[,<method>],<playlod_len>,<playload>
playlod_len为playload的有效长度,模组接收到数据后,将数据发送到云端。
- 接收数据
+GLDIOTRCV:<接收到的内容>
三元组设置流程如下图:
WIFI设置流程如下图:
数据接入流程如下图: