post - 尝试使用“AT+HTTPACTION=1”发布时出现 MEGA 和 SIM900 错误
问题描述
我有一个连接到 Arduino MEGA 的 SIM900 模块,一切正常,除了当我尝试发出 post 请求时,它在执行 AT+HTTPACTION=1 命令后一直显示 ERROR,根据 SIM900 手册,错误消息与“有关”移动设备功能”。它工作得很好,但现在它一直显示那个烦人的错误。
这是我的代码:(我放了一个假的服务器地址,但我的工作正常,我已经用邮递员测试过)
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();
并使用详细的值,这样您的模块就不会以简单的“错误”字符串响应,而是会告诉您确切的问题是什么。该做的:
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、密码等。如果您有任何其他错误消息,请编辑您的问题,我会尽力提供帮助
推荐阅读
- php - Laravel web.php 没有正确重定向。
- c# - 循环动态 JSON 以获取所有节点 C#
- java - SPOJ 下一个回文(Java)
- react-native - 返回到 React-Native 中的上一个组件时调用函数
- sql - 从存储过程运行时,Ntile 函数没有均匀地划分组
- postgresql - 物化视图和简单视图如何与 postgresql 中的外部数据表 (fdt) 相关联?
- excel - 在单元格中设置字符串值并避免将其误解为美国日期
- database - 无法从 IDE 连接到 postgresql 数据库,而可能从 API
- android - NTFS 分区上的 Android Studio 构建错误
- wordpress - CPT 不使用存档-{post_type}.php