подключение GSM-shield-а к Меге через Serial
- Войдите на сайт для отправки комментариев
дравствуйте!
Пытаюсь скрестить Мегу с gsm-shield-ом:
Подключаю через аппаратный Serial (вроде Serial1).
Библиотеку использую вот эту:
https://github.com/MarcoMartines/GSM-GPRS-GPS-Shield
потому как там можно без проблем использовать аппаратные порты Меги.
И вроде все работает, но:
все примеры из либы имеют вот такой код в setup():
if (gsm.begin(2400)) { Serial.println("\nstatus=READY"); started=true; } else Serial.println("\nstatus=IDLE"); if(started) { //Enable this two lines if you want to send an SMS. //if (sms.SendSMS("3471234567", "Arduino SMS")) //Serial.println("\nSMS sent OK"); }
который подразумевает, что функция gsm.begin включит и настроит модуль на "нужную волну".
Однако беда заключается в том, что этот begin ничего не включает! Можно конечно перед ним вставить код который будет дергать ногой GSM_ON, но это не правильно (при перезагрузке Меги этот код будет выключать gsm-модуль).
Покопавшись в коде библиотеки выяснил, что в самом начале функции gsm.begin, в порт, к которому подключен gsm-модуль, посылается команда "AT". Если ответа не приходит, то функция дергает GSM_ON и включает gsm-модуль. Вот этот код:
for (cont=0; cont<3; cont++) { if ((AT_RESP_ERR_NO_RESP == SendATCmdWaitResp(str_at, 500, 100, str_ok, 5)) && !turnedON) { //check power // there is no response => turn on the module #ifdef DEBUG_ON Serial.println(F("DB:NO RESP")); #endif // generate turn on pulse digitalWrite(GSM_ON, HIGH); delay(1200); digitalWrite(GSM_ON, LOW); delay(10000); WaitResp(1000, 1000); } else { #ifdef DEBUG_ON Serial.println(F("DB:ELSE")); #endif WaitResp(1000, 1000); } }
Однако во внутрь if {} Мега никогда не попадает, потому как на отправленное в порт "AT", мы получаем его (AT) обратно в любом случае (даже если gsm-shield выключен). Видимо к нам возвращается эхо.
Собственно вопросы к знатокам:
1. Кто возвращает эхо, UART Меги ? Его (эхо) можно как-то отключить ?
2. Если использовать SoftwareSerial, эха видимо не будет ?
3. Как лучше (красиво) обойти этот момент ?
p.s.: каюсь заранее, что не умею пользовться гуглом.
Решил поэкспериментировать...
Если отключить gsm-модуль от меги и просто отправить набор символов в Serial1, то в ответ ничего не приходит. Т.о. проблема не в Меговском UART-е.
Если к Serial1 подключить gsm-модуль, но сам модeль не включать, то любой отправленный в Serial1 символ возвращается обратно как эхо. Такое ощущение, что в gsm-модуле порисходит замыкание rx на tx.
Так и должно быть ?