Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SMS通知不适用于带有GSM模块的Arduino Nano_Arduino_Sms_Gsm_At Command - Fatal编程技术网

SMS通知不适用于带有GSM模块的Arduino Nano

SMS通知不适用于带有GSM模块的Arduino Nano,arduino,sms,gsm,at-command,Arduino,Sms,Gsm,At Command,我想使用Arduino Nano来监控GSM模块的短信流量。我能够读取和发送SMS,但通知系统不工作:当我发送SMS(到GSM模块中的SIM卡)时,串行端口中没有新数据可用。知道我为什么或者如何调试以发现问题吗 通信通过GSM模块(Quectel EC25)的Arduino引脚9和10以及RX和TX完成。我正在使用的代码: #include <SoftwareSerial.h> #define DEBUG Serial SoftwareSerial EC25(10,9); // R

我想使用Arduino Nano来监控GSM模块的短信流量。我能够读取和发送SMS,但通知系统不工作:当我发送SMS(到GSM模块中的SIM卡)时,串行端口中没有新数据可用。知道我为什么或者如何调试以发现问题吗

通信通过GSM模块(Quectel EC25)的Arduino引脚9和10以及RX和TX完成。我正在使用的代码:

#include <SoftwareSerial.h>

#define DEBUG Serial
SoftwareSerial EC25(10,9); // RX, TX - 9600 baud rate
// pin 8 of raspi -> pin 9 of arduino nano 
// pin 10 of raspi -> pin 10 of arduino nano

#define AT_RESPONSE_LEN 100
#define TIMEOUT 1000

void setup() {
  // put your setup code here, to run once:
  EC25.begin(9600);
  DEBUG.begin(9600);

  // some AT commands just to see if the coms are ok
  sendATComm("AT","OK\r\n");
  sendATComm("AT+IPR?","OK\r\n");
  sendATComm("AT+CGSN","OK\r\n");

  sendATComm("AT+CNMI=2,1,0,0,0","OK\r\n");

  DEBUG.println("listennig");
}

void loop() {
  // put your main code here, to run repeatedly:

  if (EC25.available()){
    DEBUG.println("Notification received!");
  }

}



// function for sending at command.
const char* sendATComm(const char *command, const char *desired_reponse)
{
  uint32_t timer;
  char response[AT_RESPONSE_LEN]; // module response for AT commands.

  memset(response, 0 , AT_RESPONSE_LEN);
  EC25.flush();

  sendATCommOnce(command);

  timer = millis();
   while(true){
    if(millis()-timer > TIMEOUT){
      sendATCommOnce(command);
      timer = millis();
    }
    char c;
    int i = 0;

    while(EC25.available()){
      c = EC25.read();
      DEBUG.write(c);
      response[i++]=c;
      delay(2);
      }
      if(strstr(response, desired_reponse)){
        return response;
        memset(response, 0 , strlen(response));
        break;
      }
  }
}

// send at comamand to module
void sendATCommOnce(const char *comm)
{
  EC25.print(comm);
  EC25.print("\r");
  delay(100);
}
#包括
#定义调试序列
软件系列EC25(10,9);//接收、发送-9600波特率
//raspi引脚8->arduino nano引脚9
//raspi的引脚10->arduino nano的引脚10
#在第100列中定义
#定义超时1000
无效设置(){
//将安装代码放在此处,以便运行一次:
EC25.begin(9600);
DEBUG.begin(9600);
//一些AT命令只是为了查看通信是否正常
sendATComm(“AT”,“OK\r\n”);
sendATComm(“AT+IPR?”,“OK\r\n”);
sendATComm(“AT+CGSN”,“OK\r\n”);
sendATComm(“AT+CNMI=2,1,0,0,0”,“正常”\r\n);
DEBUG.println(“listennig”);
}
void循环(){
//将主代码放在此处,以便重复运行:
if(EC25.available()){
println(“收到通知!”);
}
}
//用于发送at命令的函数。
const char*sendATComm(const char*命令,const char*所需响应)
{
uint32_t定时器;
char response[AT_response_LEN];//AT命令的模块响应。
memset(响应,0,在响应长度处);
EC25.flush();
sendATCommOnce(命令);
计时器=毫秒();
while(true){
如果(毫秒()-计时器>超时){
sendATCommOnce(命令);
计时器=毫秒();
}
字符c;
int i=0;
while(EC25.available()){
c=EC25.read();
DEBUG.write(c);
响应[i++]=c;
延迟(2);
}
if(strstr(响应、期望响应)){
返回响应;
memset(响应,0,strlen(响应));
打破
}
}
}
//发送至通信模块
void sendATCommOnce(常量字符*comm)
{
EC25.打印(通信);
EC25.打印(“\r”);
延迟(100);
}

因此,我不得不定义URC的输出端口来使用UART通信(而不是默认使用它)

默认配置设置为
usbat
usbmodem
,这意味着我等待的通知信息正在发送到这些串行端口之一。但我当时正在收听UART(通过RX和TX品脱),因此没有收到任何通知

AT命令
QURCCFG
可用于设置应向哪个端口发送URC信号。在这种情况下,我希望将它们发送到UART:

AT+QURCCFG="urcport","uart1"

_“当我发送SNS(到GSM模块中的SIM卡)时,串行端口中没有新数据可用”\ux-这是什么意思?你收到短信(你可以稍后阅读),但你没有收到URC?我可以用AT命令阅读短信。问题是我想在新短信到达时收听通知。当我编写URC时,我谈论的是未经请求的结果代码(=通知)。
+CNMI
设置似乎正确。当你说你“用AT命令阅读短信”时,是不是意味着你用你的例程发送了AT命令?换句话说,您的功能是否正常工作?如果答案是肯定的,我只有一个检查建议:可能阻止正确接收SMS的
+CMTI
URC的唯一原因是SMS内存已满。你能检查一下吗?一个相关的问题(和答案):。好的,谢谢你提供的信息。是的,我可以通过这些功能阅读短信。问题是,当它接收到SMS时,没有数据通知数据发送到串行EC25,因此
available()
方法没有输出任何内容。它不能与SIM卡相关,因为SIM卡正在与备用GSM模块(SIM7600)一起工作。但也许通知保存在模块的某个地方?现在更好了。投票支持研究和改进它的努力。