0

我的目的是使用GSM SIM800L 核心板和 Arduino UNO 发送短信。这是代码


    #include <SoftwareSerial.h>

//Create a software serial object to communicate with SIM800L
SoftwareSerial mySerial(3, 2); //SIM800L Tx & Rx is connected to Arduino #3 & #2

void setup()
{
  //Begin serial communication with Arduino and Arduino IDE (Serial Monitor)
  Serial.begin(115200);

  //Begin serial communication with Arduino and SIM800L
  mySerial.begin(115200);

  Serial.println("Initializing..."); 
  delay(1000);

  mySerial.println("AT"); //Once the handshake test is successful, it will back to OK
  updateSerial();

  mySerial.println("AT+CMGF=1"); // Configuring TEXT mode
  updateSerial();
  mySerial.println("AT+CMGS=\"+ZZxxxxxxxxx\"");//change ZZ with country code and xxxxxxxxxxx with phone number to sms
  updateSerial();
  mySerial.print("TEST"); //text content
  updateSerial();
  mySerial.write(26);
}

void loop()
{
}

void updateSerial()
{
  delay(500);
  while (Serial.available()) 
  {
    mySerial.write(Serial.read());//Forward what Serial received to Software Serial Port
  }
  while(mySerial.available()) 
  {
    Serial.write(mySerial.read());//Forward what Software Serial received to Serial Port
  }
}

这是串行监视器输出

 22:31:19.430 -> Initializing...

但是,当我运行代码时,我的手机收到了短信,但在串口监视器中看不到任何 AT 命令。它只输出 "Initializing..."。所有的连接和波特率都可以,检查了一千次。已将 2A、4.4v 电源连接到 GSM 核心板并缩短电线,并确保没有坏焊点。GSM 模块红色 LED 每 3 秒闪烁一次。再一次,我收到短信到我的手机。所以这意味着问题出在 Arduino 串行监视器或代码上,而不是硬件上。我需要查看 AT 命令,因为我需要通过串行监视器输入更多命令,我尝试输入并单击发送,但它没有显示任何内容。您能提供的任何帮助将不胜感激。

4

1 回答 1

1

您的逻辑在函数中是相反的updateSerial()

实际上,您是在函数中发送AT命令,然后您需要等待该对象中的答案。mySerialsetupmySerial

因此,您应该这样做while (!mySerial.available()) ;才能从中读取一些内容。此循环结束后,您可以从mySerial.

但是,您要将其转发到串行监视器,因此您还需要检查 是否Serial可以写入,这就是为什么您还要等待它,从而导致while (!mySerial.available() || !Serial.available()) ;.

一旦您确定两个序列都可用,您可以从其中一个序列中读取并将刚刚读到的内容写入另一个序列:Serial.Write(mySerial.read()).

此外,我认为不需要mySerial.write(Serial.read())调用,因为Serial它只是用于转发您从 SIM800L 接收到的内容,因此,您可以简单地删除该部分。

因此,您的函数的更正将导致:

void updateSerial()
{
    delay(500);
    while (!mySerial.available() || !Serial.available())
        ;

    Serial.write(mySerial.read());
}

因此,您从 SIM800L 收到的所有内容都会转发到串行监视器。

于 2020-05-14T22:05:59.847 回答