2016-02-19 4 views
0

Я только что получил новый Sim900 и подключился к Arduino Uno. Я использовал код ниже, чтобы отправить текст мне. Я получил текст в своей камере, но я не получил никакого эха на моем последовательном мониторе (т.е. «ОК»). Я попытался сменить контакты RX/TX и разные скорости передачи без каких-либо успехов.Arduino Sim900 без эха, но SMS было отправлено


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() 
{ 
} 
+0

Можете ли вы показать свою одежду и настройки? – dmSherazi

ответ

0

Вы не должны никогда, никогда, никогда не использовать delay в качестве замены для чтения и разбора ответ отправляется обратно от модема. Теперь я понимаю, что это немного иронический совет, так как проблема в том, что вы не получаете никакого ответа, но тем не менее вы должны выбросить этот код с помощью задержки в тот самый момент, когда вы получите ответ, а не через секунду.

Чтобы подчеркнуть этот момент, после отправки командной строки AT на модем вы ничего не должны отправлять, прежде чем модем отвечает окончательным кодом результата. Стандарт V.250 говорит:

Окончательный код результата указывает на завершение полного действия ДХЭ и готовность принять новые команды от DTE.

Если вы отправите что-либо до получения окончательного кода результата, вы прервете исполняемую команду!


Я не знаю, что это SIM900 модем, но обратите внимание, что модемы вообще могут быть настроены не эхо символов и подавлять результирующие коды (ATE и ATQ команд), так что если вы знаете абсолютно точно, что модем настроенный на эхо-символы и коды результатов печати, это должно быть ваше первое, что нужно проверить.

Все это описано в стандарте V.250, который является really important document. Прочтите все главы 5, а также обратите внимание на главу 6.2. Команды интерфейса DTE-DCE.


Мобильный телефон Команды, связанные, как правило, указаны в 27.007 standard, хотя команды, относящиеся Сообщение SMS указаны в 27.005 standard. Уделите пристальное внимание тому факту, что для AT+CMGS вам нужно подождать, чтобы получить `` \ n \ r> "перед отправкой служебной информации sms (см. Также первую часть this answer).

0

Как говорит @hlovdal, использование задержки между сообщениями - плохая идея. Вы должны ждать ответа каждой команды и принимать действия в зависимости от ответа (или из-за таймаута).


Предполагая, что все это ваш код, вы пропускаете часть считывания последовательного порта. Так же, как вы делаете serial.write, вы должны использовать serial.read для получения входящих символов. Возможно, это причина, потому что вы ничего не получаете.


Наконец, Arduino UNO получил один UART порт, так что если вы хотите иметь серийный монитор для отладки, вы должны будете использовать SoftwareSerial общаться с SIM900.

Смежные вопросы