Странное поведение GSM модуля Goouuu Tech IOT-GA6
- Войдите на сайт для отправки комментариев
Всем привет!
Приобрёл GSM модуль Goouuu Tech IOT-GA6 (вроде как тоде самое что и AI-Thinker A6 GSM). В качестве контроллера использую arduino nano.
Подключил всё по инструкции:
питание +5V -> VCC;
GND -> GND модуля + GND контроллера;
URX - > TX; контроллера
UTX -> RX; контроллера
Код примера работы стандартный:
#include <SoftwareSerial.h>
SoftwareSerial mySerial(8, 9); // RX, TX
void setup() {
// Open serial communications and wait for port to open:
Serial.begin(9600);
Serial.println("Start!");
delay(2000);
mySerial.begin(9600);
mySerial.println("AT+IPR=9600"); // Скорость порта GSM модуля (на всякий случай);
delay(1000);
mySerial.println("AT");
delay(1500);
mySerial.println("AT+COPS?");
delay(1500);
mySerial.println("AT+CPAS");
delay(1500);
mySerial.println("AT+CREG?");
delay(1500);
}
void loop() { // run over and over
if (mySerial.available()) {
Serial.write(mySerial.read());
}
if (Serial.available()) {
mySerial.write(Serial.read());
}
}
Сам модуль в сети регистрируется и даже звонит, если в коде прописать команду ATD, но в мониторе порта отображается только конечный результат от AT команд, т.е. в коде прописано AT, но в мониторе видно только "ОК", самой команды не видно :)
Все команды которые прописываются в коде, работают, но те, которые я пытаюсь отправить через монитор порта, не проходят.
Вопрос: что нетак? может код не верный?
использую arduino nano.
Подключил всё по инструкции:
питание +5V -> VCC;
GND -> GND модуля + GND контроллера;
URX - > TX; контроллера
UTX -> RX; контроллера
Правильно ли я понял. что Нано у вас подключена к компу по USB. а модем - к ее пинам 0 и 1?
Не совсем, Нано подключена к компьютеру по mini usb а модем подключен к нано через пины 8 и 9 (SoftwareSerial mySerial(8, 9); // RX, TX)
подемы А6 насколько я помню инициализируют сокрость несколькими командами AT, 12 строка лишняя, а 14х строк несколько подряд поставьте
у меня вот так тестовый код выглядит:
#include <SoftwareSerial.h> SoftwareSerial SIM800(8, 9); // 8 - RX Arduino (TX SIM800L), 9 - TX Arduino (RX SIM800L) void setup() { /*pinMode(10, OUTPUT); pinMode(7, OUTPUT); digitalWrite(10, HIGH); digitalWrite(7, HIGH); delay(1000); digitalWrite(7, LOW); delay(20); digitalWrite(7, HIGH); delay(3000);*/ Serial.begin(9600); // Скорость обмена данными с компьютером Serial.println("Start!"); SIM800.begin(9600); // Скорость обмена данными с модемом SIM800.println("AT"); // Автонастройка скорости SIM800.println("AT"); // Автонастройка скорости SIM800.println("AT"); // Автонастройка скорости /*SIM800.println("AT+CLVL?"); // Запрашиваем громкость динамика SIM800.println("AT+CMGF=1"); // Включить TextMode для SMS SIM800.println("AT+DDET=1,0,1"); // Включить DTMF SIM800.println("AT+CLIP=1"); // Включить АОН*/ } void loop() { if (SIM800.available()) // Ожидаем прихода данных (ответа) от модема... while (SIM800.available()) { byte bb = SIM800.read(); Serial.write(bb); // ...и выводим их в Serial /*if ((bb < 0x20) || (bb >= 0x7F)) { Serial.print("0x"); Serial.println(bb, HEX); } else { Serial.write(bb); }*/ } if (Serial.available()) // Ожидаем команды по Serial... while (Serial.available()) SIM800.write(Serial.read()); // ...и отправляем полученную команду модему }Спасибо за ответ, но ввод команды AT не помогает. Забыл об этом написать в основном тексте. Ваш код сейчас испробовал, та же хрень :)
На ввод команды АТ вручную не реагирует.
На ввод команды АТ вручную не реагирует.
ergeyk, попробуйте в вашем коде из начального сообщения поменять в строке 28 if на while
while (Serial.available()) { mySerial.write(Serial.read()); }2930К сожалению, не помогло
И сам итоговый код:
#include <SoftwareSerial.h> SoftwareSerial mySerial(8, 9); // RX, TX void setup() { // Open serial communications and wait for port to open: Serial.begin(9600); Serial.println("Start!"); delay(2000); mySerial.begin(9600); // mySerial.println("AT+IPR=9600"); // Скорость порта GSM модуля (на всякий случай); mySerial.println("AT"); mySerial.println("AT"); mySerial.println("AT"); delay(1500); mySerial.println("AT+COPS?"); delay(1500); mySerial.println("AT+CPAS"); delay(1500); mySerial.println("AT+CREG?"); delay(1500); } void loop() { // run over and over if (mySerial.available()) { Serial.write(mySerial.read()); } while (Serial.available()) { mySerial.write(Serial.read()); } }Толку писать в loop если команды в setup?
Попробуйте вместо Serial.write() Serial.println()
Попробуйте вместо Serial.write() Serial.println()
неверно
в мониторе порта выбрать NL & CR
и отправить попробовать какую нибудь команду с клавиатуры
Удивительно, но Ваш совет сработал ровно на половину :D
Теперь при отправке в сериал команды АТ, в ручную, сериал отвечает ОК, но при этом сама команда не высвечивается.
Что-то мистическое
Ничего мистического, есть команда включения отключения вывода выполняемой команды, скачайте pdf файл к этому модему, там все написано.
andycat, благодарю за оказанную помощь, спасибо большое!