ESP32、GPRS A9测试
测试内容:
1、A9作为客户端,在服务器主动断开连接或异常断开的时候,使用网络连接状态查询接口,能否获得准确的网络连接状态。
结果:
TCP: A9开多连接时,成功连接TCP服务器后,发送查询语句AT+CIPSTATUS? 返回内容:
+CIPSTATUS: 0,CONNECT OK 1,IP INITIAL 2,IP INITIAL 3,IP INITIAL 4,IP INITIAL 5,IP INITIAL 6,IP INITIAL 7,IP INITIAL
服务器网络调试助手点击断开(或右键直接退出应用),返回内容:
+TCPCLOSED:0 OK
发送查询语句AT+CIPSTATUS? 返回内容:
+CIPSTATUS: 0,IP INITIAL 1,IP INITIAL 2,IP INITIAL 3,IP INITIAL 4,IP INITIAL 5,IP INITIAL 6,IP INITIAL 7,IP INITIAL
网络调试助手版本:网络调试助手(CM精装版V3.7)
UDP:
TCP/UDP socket调试工具V2.3
开启UDP server后,然后UDP client 根据IP+port 连接udp,此时UDP server不能向client发送数据,只有client向server发送一条数据后,server之后才能向client发送数据。而果断时间后server又不能向client发送数据(client 没收到数据)
UDP协议,一样会在物理线路上创建一条“虚拟信道”,否则UDP协议无法传输数据!但是,当UDP协议传完数据后,这条“虚拟信道”就被立即注销了!因此,称UDP是不面向连接的协议!
HTTP:连接方式IP+PORT 或 网址+port
长连接: http服务器与client 建立连接后,keep-alive 时间到了,服务器主动断开,A9返回内容:
+CME ERROR:52
发送查询语句AT+CIPSTATUS? 返回内容:(多链接)
+CIPSTATUS: 0,IP CLOSE 1,IP INITIAL 2,IP INITIAL 3,IP INITIAL 4,IP INITIAL 5,IP INITIAL 6,IP INITIAL 7,IP INITIAL
如果服务器应用停止服务,发送查询语句AT+CIPSTATUS? 返回内容:(多链接) 这种情况下网络查询返回状态是错误的
+CIPSTATUS: 0,CONNECT OK 1,IP INITIAL 2,IP INITIAL 3,IP INITIAL 4,IP INITIAL 5,IP INITIAL 6,IP INITIAL 7,IP INITIAL OK
这个时候如果A9发送连接HTTP server 命令,返回:
+CME ERROR:50
因为A9认为已经连接成功了,再发送连接指令则认为连接无效。
原因可能:服务器关闭服务时,没有通知client, 短连接关闭服务时有通知client;
如果服务器应用直接退出EXIT,发送查询语句AT+CIPSTATUS? 返回内容:(多链接) 正确
+CIPSTATUS: 0,IP CLOSE 1 ,IP INITIAL 2,IP INITIAL 3,IP INITIAL 4,IP INITIAL 5,IP INITIAL 6,IP INITIAL 7,IP INITIAL OK
AT+CIPSEND指令:
ESP32S和A9是不一样的,下面是A9的:
"AT+CIPSEND=10" 指令发送成功后返回的内容不是"OK",是" >" 4个十六进制数:0D 0A 3E 20
A9发送 "AT+CIPSEND=100" 随后STM32 通过串口发送不足100个字节的数据,并停止发送, 则目标收到的数据内容为:
STM32数据 + 0D 0A 00 00 00 00 00
00的个数补足到100 为止;
例子:
AT+CIPSEND=10 //发送内容:6个字节 不足10个字节 41 54 2B 43 49 50 //收到内容: 41 54 2B 43 49 50 0D 0A 00 00