MEGA 和 SIM900 尝试 post 使用 "AT+HTTPACTION=1" 时出错
MEGA and SIM900 ERROR when trying to post using "AT+HTTPACTION=1"
我有一个 SIM900 模块连接到 Arduino MEGA,一切正常,除了当我尝试发出 post 请求时,它在执行 AT+HTTPACTION=1 命令后一直显示错误,由SIM900手册,ERROR信息与"Mobile Equipment functionality"有关。它工作得很好,但现在它一直显示令人讨厌的错误。
这是我的代码:(我输入了一个假的服务器地址,但我的工作正常,我用 postman 测试过)
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();
}
这是输出
code output
使用这个命令
Serial1.println("AT+CMEE=2\r"); // Enable +CME ERROR: <err> result code
delay(1000);
toSerial();
并使用详细的值,这样您的模块就不会用简单的 "ERROR" 字符串响应,而是会告诉您确切的问题是什么。做:
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
意味着您必须通过 TCP/IP 发送字符串并使用
Serial1.println("AT+HTTPACTION=0");
如果你得到
CME ERROR: 3 Operation not allowed
您的网络运营商不允许与不支持相同
CME ERROR: 30 No network service
最多 40 个是您无法影响的网络问题,41 到 50 个之间的错误是缺少 pin、puks、密码等。
如果您有任何其他错误消息,请编辑您的问题,我会尽力提供帮助
我有一个 SIM900 模块连接到 Arduino MEGA,一切正常,除了当我尝试发出 post 请求时,它在执行 AT+HTTPACTION=1 命令后一直显示错误,由SIM900手册,ERROR信息与"Mobile Equipment functionality"有关。它工作得很好,但现在它一直显示令人讨厌的错误。
这是我的代码:(我输入了一个假的服务器地址,但我的工作正常,我用 postman 测试过)
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();
}
这是输出
code output
使用这个命令
Serial1.println("AT+CMEE=2\r"); // Enable +CME ERROR: <err> result code
delay(1000);
toSerial();
并使用详细的值,这样您的模块就不会用简单的 "ERROR" 字符串响应,而是会告诉您确切的问题是什么。做:
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
意味着您必须通过 TCP/IP 发送字符串并使用
Serial1.println("AT+HTTPACTION=0");
如果你得到
CME ERROR: 3 Operation not allowed
您的网络运营商不允许与不支持相同
CME ERROR: 30 No network service
最多 40 个是您无法影响的网络问题,41 到 50 个之间的错误是缺少 pin、puks、密码等。 如果您有任何其他错误消息,请编辑您的问题,我会尽力提供帮助