Ошибка AT%13% с защитой GSM/GPRS
Я пытался управлять реле с помощью экрана GSM для проекта Arduino. У меня не было никакого успеха ни с программным серийным номером, ни с библиотекой GSM. Я объявил переменную GSM в режиме отладки, и она выдает ошибку AT%13%. Используя Software Serial, он зависает на SIM900.read(). SIM-карта подключается к сети, я это вижу на плате - светодиод мигает каждые 3 секунды и подает мне сигналы о входящих звонках и смс.
Я не могу сказать, связана ли ошибка с SIM-картой, подключением к плате Arduino, источником питания (12 В) или чем-то совершенно другим. Вот два примера кода, которые я использую с разными библиотеками.
Кто-нибудь еще получает эту ошибку? Как лучше всего избавиться от этого?
Заранее спасибо за любую помощь!
SoftwareSerial.h
#include <SoftwareSerial.h>
char inchar; // Будет удерживать входящий символ от шилда GSM
SoftwareSerial SIM900(7, 8);
int Relay1 = A2;
int Relay2 = A3;
void setup()
{
Serial.begin(19200);
//Настраиваем контакты управления реле
pinMode(Relay1, OUTPUT);
digitalWrite(Relay1, HIGH);
// пробуждаем GSM шилд
SIM900.begin(19200);
delay(10000); // дать время для входа в сеть.
SIM900.print("AT+CMGF=1\r"); // установить режим SMS на текст
delay(100);
SIM900.print("AT+CNMI=2,2,0,0,0\r");
// вывод содержимого нового СМС при получении на последовательный выход GSM-шилда
delay(100);
Serial.println("Ready...");
}
void loop()
{
//Если с сотового модуля приходит символ...
if(SIM900.available() >0)
{
inchar=SIM900.read();
Serial.println(inchar);
if (inchar=='#')
{...}
SIM900.println("AT+CMGD=1,20"); // удалить все смс
}
}
GSM.h — в данном случае я даже не прошел мимо команды .begin(). Этот код взят из примера на странице http://arduino.cc/en/Tutorial/GSMExamplesReceiveSMS
.#include <GSM.h>
// PIN-код для SIM-карты
#define PINNUMBER ""
// инициализируем экземпляры библиотеки
GSM gsmAccess(true);
GSM_SMS sms;
GSM3_NetworkStatus_t gsmStatus;
// Массив для хранения номера, с которого получено SMS
char senderNumber[20];
void setup()
{
// инициализируем последовательную связь и ждем открытия порта:
Serial.begin(9600);
while (!Serial) {
; // ждем подключения последовательного порта. Нужен только для Леонардо
}
Serial.println("SMS Messages Receiver");
char code = 'X';
Serial.flush();
gsmStatus = gsmAccess.begin(PINNUMBER,false,false);
int retrycount = 60;
while (gsmStatus != GSM_READY && retrycount-- > 0) {
delay(1000); // меньшее значение задержки может привести к нестабильному состоянию
theGSM3ShieldV1ModemCore.manageReceivedData();
gsmStatus = gsmAccess.getStatus();
}
if (gsmStatus != GSM_READY) {
Serial.println("\n[ERR]: GSM connection failed\n");
Serial.flush();
gsmAccess.shutdown();
delay(250);
digitalWrite(3,LOW);
}
Serial.println(" [DONE]");
// состояние соединения
boolean notConnected = true;
// Запускаем GSM соединение
while (notConnected)
{
if (gsmAccess.begin(PINNUMBER) == GSM_READY)
{
notConnected = false;
}
else
{
Serial.println("\nNot connected");
delay(1000);
}
}
Serial.println("GSM initialized");
Serial.println("Waiting for messages");
}
@Andrew, 👍0
Обсуждение2 ответа
Проверьте скорость передачи данных. Они кажутся разными. Это вызовет проблемы.
Это два разных кода, которые не предназначены для совместной работы. Правда, скорости передачи для верха и низа не совпадают, но это не решает проблемы., @Andrew
Я использовал Mega 2560, подключенный к GSM-шилду следующим образом:
- GSM TX --- контакт 10 на Mega
GSM RX --- контакт 3 на Mega
Заземление – Заземление
- Отправить SMS Arduino Uno + плата SIM900A
- Как использовать I2C от Arduino Uno, когда у меня установлен GSM-shield?
- SD-карта не инициализируется
- Проблема с получением SMS - GSM-модуль Arduino Uno и SIM900A
- SIM900 3G? Или SIM900A умеет подключаться к 3G?
- Мини-модем SIM900a, IMEI 0, помощь с контактами TX RX
- Как получить данные из базы данных моего сервера в переменную в моем Arduino?
- Как отправить команду AT на sim800l с помощью SoftwareSerial
Кажется, вы используете разные скорости передачи данных в каждом примере. Какой правильный?, @Nick Gammon
Вы получаете ошибку AT%10%, если вы меняете
\r
s на\n
s?, @GerbenИзвините за путаницу со скоростью передачи данных. На самом деле они не имеют значения, поскольку оба верны, коды взяты из двух разных примеров. К сожалению, мне не удалось решить эту проблему с помощью GSM.h. Я остановился на SoftwareSerial.h, но нашел надежное воспроизводимое решение проблемы. Во-первых, сейчас я использую SIM900.print("AT+CNMI=1,2,0,0,0\r"); ` чтобы инициализировать мой режим SMS, кажется, что он каждый раз включается правильно. Во-вторых, после read() с SIM-карты я очищаю содержимое с помощью SIM900.flush(), что, кажется, предотвращает появление фантомных сообщений., @Andrew