参考连接 https://docs.espressif.com/projects/esp-at/zh_CN/latest/AT_Command_Set/index.html
没有特殊说明,基本上每条指令都已回车换行结尾进行发送。
连接wifi
1.设置wifi工作模式
发送:(AP+STATION模式)
AT+CWMODE=3
返回:
AT+CWMODE=3
OK
2.连接wifi
发送:
AT+CWJAP="XXXXX","YYYYY"
返回: 1.SSID或者密码错误:
WIFI DISCONNECT
busy p...
+CWJAP:4
ERROR
注意在输出 busy p… 会有一定的延时
2.成功:
WIFI CONNECTED
WIFI GOT IP
OK
3.已连接再次连接(正确的SSID和密码):
WIFI DISCONNECT
WIFI CONNECTED
WIFI GOT IP
OK
注意在DISCONNECT 后会有一定延时
3.查询本地ip地址和MAC地址
发送:
AT+CIFSR
返回:
+CIFSR:APIP,"192.168.4.1"
+CIFSR:APMAC,"c6:4f:33:d6:45:fb"
+CIFSR:STAIP,"192.168.3.241"
+CIFSR:STAMAC,"c4:4f:33:d6:45:fb"
OK
注意一般取STAIP
4.电脑连接模块发出的wifi (可选)
后续可以搭配手机客户段,完成一些对单片机的配置。
连接后会输出mac和ip:
+STA_CONNECTED:"08:5b:d6:91:41:82"
+DIST_STA_IP:"08:5b:d6:91:41:82","192.168.4.3"
5.扫描当前可用AP
AT+CWLAP
返回
AT+CWLAP
+CWLAP:(3,"HUAWEI-B315-E82C",-49,"30:45:96:2f:e8:2c",7)
+CWLAP:(4,"TP_LINK",-59,"08:bd:43:c8:5f:6f",11)
。。。。
OK
6.断开wifi
AT+CWQAP
返回
WIFI DISCONNECT
OK
7.上电自动连接到AP
发送
AT+CWAUTOCONN=1
或者
AT+CWAUTOCONN=0
8.查看当前连接AP信息(信号强度)
发送
AT+CWJAP?
返回
+CWJAP:"wifi-ssid","04:40:a9:4d:a5:10",11,-62,0,0,0,0
OK
含义:
+CWJAP:<ssid>,<bssid>,<channel>,<rssi>,<pci_en>,<reconn_interval>,<listen_interval>,<scan_mode>,<pmf>
OK
9.Airkiss配网
发送
AT+CWSTARTSMART=3 //支持ESP-Touch和Airkiss智能配网
返回
OK
然后手机连接要配网的无线wifi,打开安信可公众号,选择微信配网,点击开始配置 按钮,等待配网完成,再次过程中,esp芯片会输出想干信息,如下:
smartconfig type:AIRKISS
Smart get wifi info
ssid:xxxxxxxxxxx //wifi名称
password:yyyyyyyyyyy //wifi 密码
WIFI CONNECTED
WIFI GOT IP
smartconfig connected wifi
AT+CIPSTATUS
STATUS:2
OK
TCP 客户端
以 连接通信猫服务器为例进行测试,连接远端服务器于此相同。
通信猫测试网页为:http://tongxinmao.com/App/Detail/id/1
打开后获取端口和ip信息
1.连接服务器
发送
AT+CIPSTART="TCP","120.76.100.197",10002
返回:
失败:
ERROR
成功:
CONNECT
OK
2.发送数据
发送分两步,与ec20相同,先发配置和字节长度, 等到收到>号后再发具体的数据,超过字节长度的数据会被截断。
发送第一步(配置):
AT+CIPSEND=10
返回:
错误:
ERROR
正确:
OK
>
发送第二步(数据):
0123456789
返回:
busy p...
Recv 10 bytes
SEND OK
注意有一定的延时,可以根据 是否具有 SEND OK来判断发送是否成功。
3.接收数据
收到数据格式为:++IPD,长度:数据 ,比如:
+IPD,10:0123456789
表示收到10个字节,数据为:0123456789
MQTT 连接
1.配置参数
发送
AT+MQTTUSERCFG=<LinkID>,<scheme>,<"client_id">,<"username">,<"password">,<cert_key_ID>,<CA_ID>,<"path">
其中
-
:
- 1: MQTT over TCP;
- 2: MQTT over TLS(不校验证书);
- 3: MQTT over TLS(校验 server 证书);
- 4: MQTT over TLS(提供 client 证书);
- 5: MQTT over TLS(校验 server 证书并且提供 client 证书);
- 6: MQTT over WebSocket(基于 TCP);
- 7: MQTT over WebSocket Secure(基于 TLS,不校验证书);
- 8: MQTT over WebSocket Secure(基于 TLS,校验 server 证书);
- 9: MQTT over WebSocket Secure(基于 TLS,提供 client 证书);
- 10: MQTT over WebSocket Secure(基于 TLS,校验 server 证书并且提供 client 证书)。
-
<client_id>:MQTT 客户端 ID,最大长度:256 字节。 -
:用户名,用于登陆 MQTT broker,最大长度:64 字节。 -
:密码,用于登陆 MQTT broker,最大长度:64 字节。 -
<cert_key_ID>:证书 ID,目前 ESP-AT 仅支持一套 cert 证书,参数为 0。 -
<CA_ID>:CA ID,目前 ESP-AT 仅支持一套 CA 证书,参数为 0。 -
:资源路径,最大长度:32 字节。
普通使用:
发送:
AT+MQTTUSERCFG=0,1,"i_am_esp_wif","username","password",0,0,""
返回:
OK
2.连接
发送:
AT+MQTTCONN=0,"82.156.12.133",1883,1
返回
正确
+MQTTCONNECTED:0,1,"82.156.12.133","1883","",1
OK
错误:
+MQTTDISCONNECTED:0
ERROR
注意:有一定的时间延迟
3.订阅
发送
AT+MQTTSUB=0,"rcv_topic",1
返回
OK
当收到订阅主题的消息时:
+MQTTSUBRECV:0,"rcv_topic",195,{
"device_addr":"868704043803038",
"device_version":"20210106_v_1.0.12",
"device_commond":"05",
"device_packageno":3,
"data":{
"pos_speed":"?",
"num_3_col":"?"
}
}
包含主题、字节长度、具体数据
4.发布数据
发送第一步:
AT+MQTTPUBRAW=0,"pc_topic",10,2,0
返回
正确
OK
>
错误
ERROR
发送第二步(发送具体的数据):
0123456789
返回
成功
+MQTTPUB:OK
失败
+MQTTPUB:FAIL
4. 主动断开连接
AT+MQTTCLEAN=0
返回
OK
断开连接后发送发布订阅指令返回的都是ERROR
5.意外断开
如果mqtt被服务器主动提出,那么会收到
+MQTTDISCONNECTED:0
6.通信时间说明
- 一般来说,AT MQTT 命令都会在 10 秒内响应,但
AT+MQTTCONN 命令除外。例如,如果路由器不能上网,命令 AT+MQTTPUB 会在 10 秒内响应,但 AT+MQTTCONN 命令在网络环境不好的情况下,可能需要更多的时间用来重传数据包。 - 如果
AT+MQTTCONN 是基于 TLS 连接,每个数据包的超时时间为 10 秒,则总超时时间会根据握手数据包的数量而变得更长。 - 当 MQTT 连接断开时,会提示
+MQTTDISCONNECTED:<LinkID> 消息。 - 当 MQTT 连接建立时,会提示
+MQTTCONNECTED:<LinkID>,<scheme>,<"host">,port,<"path">,<reconnect> 消息。
HTTP 通信
主要用于OTA下载固件
1.获取url资源大小
发送:
AT+HTTPGETSIZE="http://www.fengfengiot.cn/box-wifi/output-crc_new.bin"
返回:
+HTTPGETSIZE:4755
OK
2.GET数据
发送
AT+HTTPCLIENT=2,1,"http://www.fengfengiot.cn/box-wifi/output-crc_new.bin",,,1
返回
+HTTPCLIENT:262,数据
+HTTPCLIENT:512,数据
...
OK
- 如果返回的资源数据总数大于512,那么会分多次返回,第一次先返回总数对512取余数的个数,然后再返回剩下的n个512个字节。
待续。。。
|