GSM-модуль A9G не отображает текст сообщения после получения SMS

gsm

Я пытаюсь получить SMS - сообщение на своем arduino и распечатать его на последовательном мониторе. Для этого я использую модуль A9G gsm/gps. Вот код для этого

#include <SoftwareSerial.h>

//Create software serial object to communicate with A6
SoftwareSerial mySerial(10, 11); //A6 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 A6
  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+CNMI=2,2,0,0,0"); // Decides how newly arrived SMS messages should be handled
  updateSerial();
}

void loop()
{
  updateSerial();
}

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
  }
}

Код работает, и я получаю ответ, но ответ не включает текст сообщения. Это ответ, который я получил после отправки ему "привет";

CIEV: "MESSAGE",1
+CMT: "+233201729573",,"2021/06/18,12:20:03

Как вы можете видеть, он правильно отправляет мне уведомление, но в нем нет "привет", которое является фактическим сообщением, которое я хочу получить. Кто-нибудь может мне помочь?

, 👍0


2 ответа


Лучший ответ:

1

Я уже какое-то время с этим разбираюсь. Оказывается, по какой-то причине программное обеспечение SerialSoftware урезало мои сообщения, потому что размер последовательного буфера был слишком мал. Все, что мне нужно было сделать, это увеличить размер буфера до большего числа в файле SoftwareSerial.h, и это сработало.

,

0

Ваш последовательный код приема слишком примитивен, чтобы быть полезным.

Вы ждете 0,5 секунды для поступления данных, которые хранятся в 64-байтовом буфере. Затем вы считываете содержимое этого 64-байтового буфера.

Все, что превышает 64 байта, отбрасывается.

Вам нужно активно считывать данные по мере их поступления (БЕЗ задержки ()!), Ища в данных определенные элементы (ОК, ОШИБКА, ответ на ваше текстовое сообщение и т.д.), Пока не будет получен полный ответ от модема.

,

Недавно я обнаружил, что могу перейти с 64-байтового буфера на гораздо более высокий буфер. Что я и сделал, и теперь это работает. Однако я могу сделать это только на ПК с Windows, а не в системе Linux, которую я использую., @Atia

Просто для того, чтобы добавить, после поиска файла SoftwareSerial.h и выяснения его местоположения и изменения размера последовательного буфера, я могу заставить его работать в системе Linux(ubuntu) сейчас. Спасибо., @Atia