我有一个SIM900模块连接到Arduino MEGA上,一切都很好,除了当我试图发出一个帖子请求时,在执行AT+HTTPACTION=1命令后,它一直显示ERROR,根据SIM900手册,ERROR信息与 "移动设备功能 "有关。原本工作得很完美,但现在却一直显示那个恼人的ERROR。
这是我的代码。(我放了一个假的服务器地址,但我的服务器可以正常工作,我已经用邮递员测试过了)
void gprsSetup()
{
Serial.println(F("Initializing GPRS module"));
delay(1000);
Serial1.flush();
Serial.flush();
Serial1.println("AT+CGATT?");
delay(1000);
toSerial();
delay(1000);
Serial1.println("AT+CBAND?");
delay(1000);
toSerial();
delay(1000);
Serial1.println("AT+CBAND=\"ALL_BAND\"\r\n");
delay(1000);
toSerial();
delay(1000);
Serial1.print("AT+CGDCONT=1,\"IP\",\"internet.movistar.ve\",\"\",0,0\r\n");
delay(1000);
toSerial();
delay(1000);
Serial1.println("AT+CGDCONT?");
delay(1000);
toSerial();
delay(1000);
Serial1.println("AT+IPR?\r\n");
delay(1000);
toSerial();
delay(1000);
Serial1.println("AT+SAPBR=3,1,\"CONTYPE\",\"GPRS\"\r\n");
delay(1000);
toSerial();
delay(1000);
Serial1.println("AT+SAPBR=3,1,\"APN\",\"internet.movistar.ve\"\r\n");
delay(1000);
toSerial();
Serial1.println("AT+SAPBR=1,1\r\n");
delay(1000);
toSerial();
Serial1.println("AT+SAPBR=2,1\r\n");
delay(1000);
toSerial();
Serial1.println("AT+CSQ\r\n");
delay(1000);
toSerial();
delay(1000);
Serial1.println("AT+SAPBR=2,1\r\n");
delay(1000);
toSerial();
Serial1.println("AT+HTTPINIT");
delay(1000);
toSerial();
Serial1.println("AT+HTTPPARA=\"CID\",1");
delay(1000);
toSerial();
jsonWriting();
delay(3000);
Serial1.println("AT+HTTPPARA=\"URL\",\"http://myserverthatworks\""); // not my real server address
delay(1000);
toSerial();
Serial1.println("AT+HTTPPARA=\"CONTENT\",\"application/json\"");
delay(1000);
toSerial();
Serial1.println("AT+HTTPDATA=" + String(sendtoserver.length()) + ",10000"); // Server
Serial.println(sendtoserver);
delay(3000);
toSerial();
Serial1.println(sendtoserver);
delay(1000);
toSerial();
Serial1.println("AT+HTTPACTION=1");
delay(3000);
toSerial();
Serial1.println("AT+HTTPREAD");
delay(2000);
toSerial();
delay(2000);
Serial1.println("AT+HTTPTERM");
delay(3000);
toSerial();
}
这里是输出
使用这个命令
Serial1.println("AT+CMEE=2\r"); // Enable +CME ERROR: <err> result code
delay(1000);
toSerial();
并使用verbose值,这样你的模块就不会用一个简单的 "ERROR "字符串来回应,而是会告诉你到底是什么问题。这个do。
Serial1.println("AT&W\r"); // save to be persistent after a reset
delay(1000);
toSerial();
然后当调用
Serial1.println("AT+HTTPACTION=1");
delay(3000);
toSerial();
你会得到错误--最可能的是sim900,这将是
CME ERROR: 4 Operation not supported
这意味着你必须通过TCPIP发送字符串,并使用
Serial1.println("AT+HTTPACTION=0");
如果你得到
CME ERROR: 3 Operation not allowed
您的网络运营商不允许这样做,就像不支持一样,如果
CME ERROR: 30 No network service
40以下为网络问题,你无法影响,41-50之间为丢失引脚、密码等错误,如果你有任何其他错误信息,请编辑你的问题,我会尽力帮助你。