подключение 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.
Так и должно быть ?