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、密码等。 如果您有任何其他错误消息,请编辑您的问题,我会尽力提供帮助