Невозможно получить и распечатать 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
.
@Ryhot, 👍0
Обсуждение3 ответа
Лучший ответ:
Как уже заявляли другие, вы не можете использовать аппаратный последовательный порт для связи с устройством и связи через 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 соответственно.
Используемый вами 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
Выводы RX/TX находятся на Uno, подключенном к USB-чипу. Если вы подключаете устройство к RX/TX, вам не следует использовать Serial Monitor. Иногда это работает, но устройство также получает данные, отправленные в Serial Monitor, и не может их обработать.
Используйте библиотеку SoftwareSerial для подключения последовательного устройства, если вы хотите иметь бесплатный Serial для печати на Serial Monitor через USB.
- Библиотека DHT.h не импортируется
- Проблема с получением SMS - GSM-модуль Arduino Uno и SIM900A
- Мини-модем SIM900a, IMEI 0, помощь с контактами TX RX
- Как получить данные из базы данных моего сервера в переменную в моем Arduino?
- Как отправить команду AT на sim800l с помощью SoftwareSerial
- SIM800L не регистрируется в сети
- Как отправлять сообщения на несколько номеров с помощью модуля Arduino uno и SIM800?
- Клиент MQTT на Arduino + SIM900
Я поместил ваш код в блок кода точно так, как он был. Пожалуйста, очистите его, потому что там есть лишние фигурные скобки., @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