【问题标题】:Arduino Sim900 AT+SAPBR=1,1 --> Operation not allowedArduino Sim900 AT+SAPBR=1,1 --> 不允许操作
【发布时间】:2020-11-21 01:11:21
【问题描述】:

我正在使用 Arduino Mega 和 Sim900 GSM/GPRS 扩展板向 API 发出请求。

在我的请求初始化期间,命令AT+SAPBR=1,1 被执行。有时,当我执行屏蔽返回OK,有时屏蔽返回"Operation not allowed",但与工作代码相比,我没有改变任何内容。

#include <SoftwareSerial.h>
SoftwareSerial(18, 19); 

void setup() {
 
  Serial1.begin(19200);
  delay(10000);  
  Serial1.print("AT+CPIN=1111\r");
  Serial1.flush(); 
  Serial1.print("AT+SAPBR=3,1,\"Contype\",\"GPRS\"\r");
  Serial1.flush(); 
  Serial1.print("AT+SAPBR=3,1,\"APN\",\"my.apn.com\"\r");
  Serial1.flush(); 
  Serial1.print("AT+SAPBR=1,1\r");
  Serial1.flush(); 
// Here comes the error sometimes!

  Serial1.print("AT+SAPBR=2,1\r");
  Serial1.flush();
  Serial1.print("AT+HTTPINIT\r");
  Serial1.flush();
  Serial1.print("AT+HTTPPARA=\"CID\",1\r");
  Serial1.flush();
  Serial1.print("AT+HTTPPARA=\"URL\",\"my-api.com/foo\"\r");
  Serial1.flush();
  Serial1.print("AT+HTTPPARA=\"CONTENT\",\"application/json\"\r");
  Serial1.flush();
  Serial1.print("AT+HTTPACTION=0\r");
  Serial1.flush();
  Serial1.print("AT+HTTPREAD\r");
  Serial1.flush();

// READ the Response

}

void loop() { 
  
}

谢谢!

【问题讨论】:

    标签: arduino at-command sim900


    【解决方案1】:

    作为介绍,我们可以说AT+SAPBR 命令,如 SIM900 AT Commands guide 中所述,用于配置和激活 PDP 上下文(数据流量)。

    特别是AT+SAPBR=1,1的含义是

    = 1 - 打开承载
    = 1 - 承载配置文件标识符

    来自你的代码

    delay(10000);  
    Serial1.print("AT+CPIN=1111\r");
    Serial1.flush(); 
    Serial1.print("AT+SAPBR=3,1,\"Contype\",\"GPRS\"\r");
    Serial1.flush(); 
    Serial1.print("AT+SAPBR=3,1,\"APN\",\"my.apn.com\"\r");
    Serial1.flush(); 
    Serial1.print("AT+SAPBR=1,1\r");
    

    我看到你只等待 10 秒(其他命令通常会立即返回。


    出于这个原因,第一个解决方案是增加延迟(15 秒就足够了)。

    第二种解决方案涉及查询注册状态。这可以针对 GSM 网络 (AT+CREG?) 和 2G 数据网络 (AT+CGREG?) 分别完成。

    在这两种情况下,查询命令都会得到类似的答案

    +CGREG: &lt;n&gt;,&lt;stat&gt;(或+CREG: &lt;n&gt;,&lt;stat&gt;),其中

    是通过set命令进行的设置。它用于启用未经请求的结果消息。所以,它的值通常是0

    是当前的注册状态。它可以具有以下值
    0 - 未注册。 GPRS 服务已禁用 [...]
    1 - 已注册,家庭网络 [...]
    2 - 未注册,但 ME 目前在尝试附加或搜索要注册的操作员。 GPRS 服务已启用,但允许 [...]
    3 - 注册被拒绝。 GPRS 服务已禁用 [...]
    4 - 未知
    5 - 已注册,正在漫游

    因此,如果您确定设备有足够的信号覆盖范围,您只需每秒提供一次AT+CGREG? 命令并等待+CGREG=0,1(如果您在漫游中工作,则等待+CGREG=0,5)。

    【讨论】:

    • 谢谢,但这可能不是我正在寻找的解决方案。当我读取我的代码的串行输出时,AT+CPIN=1111 最初返回 +CREG: 2,然后在几秒钟后返回 +CREG: 1。我将其解释为一切正常的信号。之后,执行剩下的代码
    • @NiklasUllmann 我提到的与 GPRS 连接相关的命令是 AT+CGREG。但正如我写的那样,您遇到的问题也可能是由于网络覆盖等其他问题(如果注册率低,注册可能会不断上升和下降)。
    • 一个问题:您的设备只是停止工作,或者有时该命令可能再次成功?在第二种情况下,加倍延迟不会改变什么吗?
    • 好的,谢谢,所以我也将开始检查我的数据连接覆盖范围。是的,程序不会停止,但也不会再次启动网络。
    • 给它更多时间连接到数据网络,工作:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-03
    • 2021-02-10
    • 2021-01-01
    • 2014-11-01
    相关资源
    最近更新 更多