所以我尝试制作arduino + sim900 gprs服务器,但过了一段时间服务器停止响应http请求,状态仍然是"侦听",但它只是没有"发现"任何新的请求。重新启动连接可以修复问题,
下面是来自服务器的at命令和回复:
AT+CREG?
+CREG: 0,1
AT+CSCLK=0
OK
AT+CIPMUX=1
OK
AT+CIPMODE=0
+CME ERROR: 3
AT+IFC=2,2
OK
AT+CGATT=1
OK
AT+CIPRXGET=1
OK
AT+CIPCSGP=1,"publicip.net.il","",""
OK
AT+CSTT
OK
AT+CIICR
OK
AT+CIFSR
2.
AT+CSQ
+CSQ: 22,0
OK
AT+CIPSERVER=1,80
OK
SERVER OK
0, REMOTE IP
AT+CIPRXGET=2,0,1024
: 192.163.218.62
+CIPRXGET:1,0
+CIPRXGET:2,0,53,0
GET /get HTTP/1.1
Host: 2.55.73.164
Accept: */*
SEND DATA
SEND_DATA FUNCTION::
AT+CIPSEND=0,221
>
1;1000;2000;0;0;1;2;0;0;0;1;1000;2000;0;0;1;2;0;0;0;1;0;10;0;0;1;2;0;0;0;1;0;10;0;0;1;2;0;0;0;1;0;10;1;0;1;2;0;0;0;1;0;10;1;0;1;2;0;0;0;1;0;10;1;0;1;2;0;0;0;1;0;10;0;0;1;2;0;0;0;0;1;941;0;1003166680;0;0;51;52;20;31;5;2013
0, SEND OK
AT+CIPCLOSE=0,0
0, CLOSE OK
如何解决这个问题?让我疯狂的是,sim900带有seed studio GPRS屏蔽:www.seeedstudio.com/wiki/GPRS_Shield_V2.0
经过一些尝试后,我意识到发送多个请求经常会导致这个问题,但是这个CIPMUX是1,所以假设有多达10个多个连接。
我找到了一个解决方案,但我不确定它是否适用于每个人。我发现我需要在运行AT+CIPCLOSE后发送一个换行符以从缓冲区中获取文本。例如:
SIM900.println((char)26);
SIM900.println("");
SIM900.println("AT+CIPCLOSE");
SIM900.println("");
另一件要注意的事情是,你需要尽快读取缓冲区,否则它会溢出,你会错过一些响应