GSM-модуль A9G не отображает текст сообщения после получения SMS
Я пытаюсь получить 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
Как вы можете видеть, он правильно отправляет мне уведомление, но в нем нет "привет", которое является фактическим сообщением, которое я хочу получить. Кто-нибудь может мне помочь?
@Atia, 👍0
2 ответа
Лучший ответ:
Я уже какое-то время с этим разбираюсь. Оказывается, по какой-то причине программное обеспечение SerialSoftware урезало мои сообщения, потому что размер последовательного буфера был слишком мал. Все, что мне нужно было сделать, это увеличить размер буфера до большего числа в файле SoftwareSerial.h, и это сработало.
Ваш последовательный код приема слишком примитивен, чтобы быть полезным.
Вы ждете 0,5 секунды для поступления данных, которые хранятся в 64-байтовом буфере. Затем вы считываете содержимое этого 64-байтового буфера.
Все, что превышает 64 байта, отбрасывается.
Вам нужно активно считывать данные по мере их поступления (БЕЗ задержки ()
!), Ища в данных определенные элементы (ОК, ОШИБКА, ответ на ваше текстовое сообщение и т.д.), Пока не будет получен полный ответ от модема.
- Проблема с получением SMS - GSM-модуль Arduino Uno и SIM900A
- SIM900 3G? Или SIM900A умеет подключаться к 3G?
- Мини-модем SIM900a, IMEI 0, помощь с контактами TX RX
- Как получить данные из базы данных моего сервера в переменную в моем Arduino?
- Как отправить команду AT на sim800l с помощью SoftwareSerial
- SIM800L не регистрируется в сети
- Как проверить, работает ли GSM-модуль?
- Как отправлять сообщения на несколько номеров с помощью модуля Arduino uno и SIM800?
Недавно я обнаружил, что могу перейти с 64-байтового буфера на гораздо более высокий буфер. Что я и сделал, и теперь это работает. Однако я могу сделать это только на ПК с Windows, а не в системе Linux, которую я использую., @Atia
Просто для того, чтобы добавить, после поиска файла SoftwareSerial.h и выяснения его местоположения и изменения размера последовательного буфера, я могу заставить его работать в системе Linux(ubuntu) сейчас. Спасибо., @Atia