Невозможно получить и распечатать SMS на последовательном мониторе с помощью Arduino Uno и SIM900A.

Я пытаюсь получить SMS и показать его на последовательном мониторе.

Мой код следующий:

void setup() 
{

  Serial.begin(2400);
  Serial.write("AT+CMGF=1\r");           //переводим GSM в текстовый режим
  delay(1500);

  Serial.write("AT+CPMS=\"SM\"\r");         //Предпочитаемое хранилище SMS-сообщений
  delay(1000);

  Serial.write("AT+CMGL=\"ALL\"\r");       //Список SMS-сообщений из предпочтительного хранилища
  while(1)
  {
    if(Serial.available())
    {
      Serial.write(Serial.read());  
    }   
  }
}

void loop() 
{
}

Принципиальная схема показана ниже.

Я получаю следующий результат:

AT+CMGR=1
AT+CMGF=1

OK
AT+CPMS="SM"

ERROR
AT+CMGR=1
AT+CMGF=1

OK
AT+CPMS="SM"

ERROR

ERROR
AT+CMGR=1
AT+CMGF=1

Я не могу использовать команды AT+CPMS или AT+CMGL.

, 👍0

Обсуждение

Я поместил ваш код в блок кода точно так, как он был. Пожалуйста, очистите его, потому что там есть лишние фигурные скобки., @Wesley Lee

Ваш вывод не соответствует вашему коду. В выводе говорится, что вы отправляете CMGR и CMGF в одной строке, но ваш код отправляет только CMGF., @JRE

Почистил код., @Ryhot

@JRE: пожалуйста, проверьте обновленный вывод., @Ryhot

ОШИБКА РЕШЕНА: Для приема SMS питания 5 В от Arduino недостаточно, поэтому источник питания 12 В, 1 А требуется отдельно. У меня был неисправный адаптер, я поменял его, и ОШИБКА исчезла. Хотя по-прежнему не могу читать сообщения. Поскольку команда CPMS дает 0,20, это означает, что присутствует 0 SMS, а максимальная память составляет 20 SMS.PS: У меня есть SMS, хранящиеся на SIM-карте., @Ryhot


3 ответа


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

0

Как уже заявляли другие, вы не можете использовать аппаратный последовательный порт для связи с устройством и связи через USB-кабель.

ВАРИАНТ 1
Переключитесь на другой микроконтроллер, например на Arduino Mega с несколькими последовательными портами на плате.

ВАРИАНТ 2
Внедрите библиотеку программного последовательного интерфейса для связи с устройством SIM-карты и используйте серийный номер оборудования для связи с вашим компьютером.

Примечание. Реализации программного последовательного интерфейса требуют больше вычислительных ресурсов, чем использование аппаратного последовательного интерфейса. Не ожидайте такой же производительности от последовательной программной реализации и не ожидайте, что сможете плавно запускать несколько ее экземпляров на одном 8-битном микроконтроллере.

Пример кода (непроверенный):

  #include <SoftwareSerial.h>

  void setup() 
  {
  Serial.begin(9600);
  SoftwareSerial mySerial(10,11); //Выводы RX,TX
  mySerial.begin(2400);
  mySerial.write("AT+CMGF=1\r");           //переводим GSM в текстовый режим
  delay(1500);

  mySerial.write("AT+CPMS=\"SM\"\r");         //Предпочитаемое хранилище SMS-сообщений
  delay(1000);

  mySerial.write("AT+CMGL=\"ALL\"\r");       //Список SMS-сообщений из предпочтительного хранилища
  while(1)
  {
    if(mySerial.available())
    {
      Serial.write(mySerial.read());  
    }   
  }
}


void loop(){}

Отключите контакты 0 и 1 и подключите к контактам 10 и 11 соответственно.

,

1

Используемый вами Arduino UNO поддерживает только одно последовательное соединение (через контакты TX и RX). Поскольку вы используете эти контакты для связи с устройством, вы также не можете отправлять данные через последовательный порт.

Прочитайте эту статью, чтобы узнать больше о Serial и о том, как он работает на различных устройствах. доски.

,

Так что же делать в качестве альтернативы?, @Ryhot

@Ryhot Я не уверен, ты мало что *можешь* сделать. Вы могли бы приобрести ЖК-дисплей, а затем писать на него SMS-сообщения. Или, в качестве альтернативы, вы можете просто использовать MEGA, который имеет более одного последовательного порта. Пожалуйста, проголосуйте за ответ, если он вам помог!, @Joe Iddon

Здесь вроде работает. http://www.learnerswings.com/2014/03/read-sms-message-by-at-commands-using.html?m=1, @Ryhot


0

Выводы RX/TX находятся на Uno, подключенном к USB-чипу. Если вы подключаете устройство к RX/TX, вам не следует использовать Serial Monitor. Иногда это работает, но устройство также получает данные, отправленные в Serial Monitor, и не может их обработать.

Используйте библиотеку SoftwareSerial для подключения последовательного устройства, если вы хотите иметь бесплатный Serial для печати на Serial Monitor через USB.

,