Arduino Sim900 без эха, но SMS было отправлено
Я только что получил новый Sim900 и подключился к Arduino Uno. Я использовал код ниже, чтобы отправить текст самому себе. Я получил текст в своей ячейке, но не получил никакого эха на моем последовательном мониторе (то есть "ОК"). Я пытался поменять местами выводы RX/TX и разные скорости передачи, но безуспешно.
void setup()
{
Serial.begin(9600); //Baud rate of the GSM/GPRS Module
Serial.println("");
delay(2000);
Serial.println("AT+CMGF=1");
delay(1000);
Serial.println("AT+CMGS=\"+120########\""); //Number to which you want to send the sms
delay(1000);
Serial.print("This is a test."); //The text of the message to be sent
delay(1000);
Serial.write(0x1A); // send CTRL - z to end message
Serial.write(0x0D); // Carriage Return
Serial.write(0x0A); // Line Feed
delay(5000);
}
void loop()
{
}
2 ответа
Вы никогда не должны, никогда, никогда не использовать delay
в качестве замены для чтения и анализа ответа, отправленного обратно с модема. Теперь я признаю, что это немного ироничный совет, поскольку проблема в том, что вы не получаете никакого ответа, но тем не менее вы должны выбросить этот код, используя задержку в тот самый момент, когда вы получите ответ, а не через секунду.
Просто чтобы подчеркнуть этот момент, после отправки командной строки AT модему не следует ничего отправлять, пока модем не ответит окончательным кодом результата. Стандарт V.250 гласит:
Код окончательного результата указывает на завершение полного действия DCE и готовность принимать новые команды от DTE.
Если вы отправите что-либо до получения окончательного кода результата, вы прервете выполняемую в данный момент команду!
Я не знаю этот модем sim900, но заметил, что модемы в целом можно настроить так, чтобы они не отображали символы и подавляли коды результатов (ATE
а также ATQ
команды), поэтому, если вы не знаете точно, что модем настроен на отображение символов и выводит коды результатов, это должно быть вашим первым делом, чтобы проверить.
Все это описано в стандарте V.250, который является действительно важным документом. Прочитайте всю главу 5, а также обратите особое внимание на главу 6.2 Команды интерфейса DTE-DCE.
Связанные с мобильным телефоном команды обычно указываются в стандарте 27.007, хотя команды, относящиеся к SMS-сообщениям, указываются в стандарте 27.005. Обратите особое внимание на то, что для AT+CMGS
в частности, вам нужно дождаться получения `"\n\r> ", прежде чем отправлять полезную нагрузку sms (см. также первую часть этого ответа).
Как говорит @hlovdal, использование задержки между сообщениями - плохая идея. Вы должны ждать ответа каждой команды и предпринимать действия в зависимости от ответа (или из-за тайм-аута).
Предполагая, что это весь ваш код, вы пропускаете часть чтения последовательного порта. Так же, как вы делаете serial.write, вы должны использовать serial.read для получения входящих символов. Может быть, это причина, потому что вы ничего не получаете.
Наконец, Arduino UNO имеет один порт UART, поэтому, если вы хотите иметь последовательный монитор для отладки, вам придется использовать SoftwareSerial для связи с SIM900.