MEGA和SIM900使用 "AT+HTTPACTION=1 "发帖时出现错误。

问题描述 投票:0回答:1

我有一个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();

}

这里是输出

代码输出

post arduino at-command sim900
1个回答
0
投票

使用这个命令

 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之间为丢失引脚、密码等错误,如果你有任何其他错误信息,请编辑你的问题,我会尽力帮助你。

© www.soinside.com 2019 - 2024. All rights reserved.