Не работает GSM модуль SIM800L на AT не отвечает

thevlados
Offline
Зарегистрирован: 28.12.2017

 Здравствуйте! У меня не работает GSM модуль SIM800L. Пробовал переподключать разными способами, мигает нормально, но на AT не отвечает. всякая чушь выходит в виде квадратиков. Что делать?

Ссылка на скрин-https://yadi.sk/i/otgmQcJA3R4Jfg

b707
Offline
Зарегистрирован: 26.05.2017

thevlados пишет:

  на AT не отвечает. всякая чушь выходит в виде квадратиков. Что делать?

квадратики - неправильная скорость последовательного порта

thevlados
Offline
Зарегистрирован: 28.12.2017

9600 все правильно -  вот скрин https://yadi.sk/i/1UsGf4oN3R4KeK

b707
Offline
Зарегистрирован: 26.05.2017

thevlados пишет:

9600 все правильно -  вот скрин https://yadi.sk/i/1UsGf4oN3R4KeK

чудесно :)

В программе вы выставили скорость 9600 - а модем об этом знает? с чего вы взяли, что внутренняя скорость модема тоже 9600? - скорее всего, там другая скорость, например 115200.

И, кстати, библиотека SoftwareSerial на 115200 не работает

thevlados
Offline
Зарегистрирован: 28.12.2017

И что же писать тогда надо? как модем известить? 

thevlados
Offline
Зарегистрирован: 28.12.2017

И как тогда работать с ними через сериал? как тогда вообще с ними работать?

d13lider
d13lider аватар
Offline
Зарегистрирован: 19.10.2015

thevlados пишет:

9600 все правильно -  вот скрин https://yadi.sk/i/1UsGf4oN3R4KeK

вы не поняли, у gsm модема своя скорость настроена, и вам что бы найти какая скорость надо выставлять каждую и смотреть на какую скорость ответит правильно. т.е. Serial.begin(9600); SIM800.begin(9600), выставили в порту 9600, крокозябы, все 9600 меняеете на следующую типа  Serial.begin(19200); SIM800.begin(19200), выставили в порту 19200, и снова смотрите, и так меняеете в коде скоростя и в порту до тех пор пока не придет адекватный ответ

 

 

thevlados
Offline
Зарегистрирован: 28.12.2017

в обоих сериалах писать одинаковую скорость?

thevlados
Offline
Зарегистрирован: 28.12.2017

и в сим800 и в обычном?

d13lider
d13lider аватар
Offline
Зарегистрирован: 19.10.2015

да

 

thevlados
Offline
Зарегистрирован: 28.12.2017

Мне вот ребята пишут что Software Serial не работают если более чем 9600 бод. говорят что то про UART. Это имеет какой-то смысл?

 И да - на скоростях выше 9600 надо использовать только аппаратный UART для связи с модемом, SoftwareSerial не прокатит.

d13lider
d13lider аватар
Offline
Зарегистрирован: 19.10.2015

хватит обычных скоростей, у меня и на 115200 работает а вообще в Setup перед Serial.begin(9600); вставьте: 

Serial.begin(115200);
  SIM800.begin(115200);
  SIM800.println("AT+IPR=9600");
  delay(200);
  Serial.begin(57600);
  SIM800.begin(57600);
  SIM800.println("AT+IPR=9600");
  delay(200);
  Serial.begin(38400);
  SIM800.begin(38400);
  SIM800.println("AT+IPR=9600");
  delay(200);
  Serial.begin(19200);
  SIM800.begin(19200);
  SIM800.println("AT+IPR=9600");
  delay(200);
  Serial.begin(4800);
  SIM800.begin(4800);
  SIM800.println("AT+IPR=9600");
  delay(200);
  Serial.begin(2400);
  SIM800.begin(2400);
  SIM800.println("AT+IPR=9600");
  delay(200);

 

d13lider
d13lider аватар
Offline
Зарегистрирован: 19.10.2015

эти команды переведут модем на скорость 9600

thevlados
Offline
Зарегистрирован: 28.12.2017

И все равно он не делает нужного.  https://yadi.sk/i/UNCeCx-Z3R4P2V со скоростями я играл, дошло там уже от 9600 до 230400. кажись уже правильно начинает что то происходить, но на мои команды не отвечает

thevlados
Offline
Зарегистрирован: 28.12.2017

а теперь опять обратно эволюционирует. та же история. вот фото подключения. правильно ли? https://yadi.sk/i/H3D8MHot3R4KN9

d13lider
d13lider аватар
Offline
Зарегистрирован: 19.10.2015

в мониторе порта выставите не NL (новая строка), а Возврат каретки (CR)

thevlados
Offline
Зарегистрирован: 28.12.2017

Все равно. теперь просто квадраты. я правилно скорость выставил?https://yadi.sk/i/eEISfl2m3R4Q2f

d13lider
d13lider аватар
Offline
Зарегистрирован: 19.10.2015

пришлите полный скетч а не скриншотом

thevlados
Offline
Зарегистрирован: 28.12.2017
#include <SoftwareSerial.h>
SoftwareSerial SIM800(8, 9);        // 8 - RX Arduino (TX SIM800L), 9 - TX Arduino (RX SIM800L)
void setup() {
  Serial.begin(115200);
  SIM800.begin(115200);
  SIM800.println("AT+IPR=9600");
  delay(200);
  Serial.begin(57600);
  SIM800.begin(57600);
  SIM800.println("AT+IPR=9600");
  delay(200);
  Serial.begin(38400);
  SIM800.begin(38400);
  SIM800.println("AT+IPR=9600");
  delay(200);
  Serial.begin(19200);
  SIM800.begin(19200);
  SIM800.println("AT+IPR=9600");
  delay(200);
  Serial.begin(4800);
  SIM800.begin(4800);
  SIM800.println("AT+IPR=9600");
  delay(200);
  Serial.begin(2400);
  SIM800.begin(2400);
  SIM800.println("AT+IPR=9600");
  delay(200);
  Serial.begin(9600);               // Скорость обмена данными с компьютером
  Serial.println("Start!");
  SIM800.begin(9600);               // Скорость обмена данными с модемом
  SIM800.println("AT");
}

void loop() {
  if (SIM800.available());      // Ожидаем прихода данных (ответа) от модема...
  Serial.write(SIM800.read());    // ...и выводим их в Serial
  if (Serial.available());           // Ожидаем команды по Serial...
  SIM800.write(Serial.read());    // ...и отправляем полученную команду модему
}

 

b707
Offline
Зарегистрирован: 26.05.2017

Скорость порта компа менять не надо, оставьте какую-нибудь промежуточную, типа 38400 или 57600. Скорость Serial и SIM800 не обязательно должны быть одинаковы.

В коде выше слишком много переключений, они не нужны. Попробуйте так:

Serial.begin(38400);
 SIM800.begin(115200);
 SIM800.println("AT+IPR=9600");
 delay(200);
 SIM800.begin(9600);
 SIM800.println("AT");
 delay(200);

 

d13lider
d13lider аватар
Offline
Зарегистрирован: 19.10.2015

b707 пишет:

Скорость порта компа менять не надо, оставьте какую-нибудь промежуточную, типа 38400 или 57600. Скорость Serial и SIM800 не обязательно должны быть одинаковы.

В коде выше слишком много переключений, они не нужны. Попробуйте так:

Serial.begin(38400);
 SIM800.begin(115200);
 SIM800.println("AT+IPR=9600");
 delay(200);
 SIM800.begin(9600);
 SIM800.println("AT");
 delay(200);

 

так я написал все возможные варианты из даташит, а с 38400 вы его вообще запутаете))

 

thevlados
Offline
Зарегистрирован: 28.12.2017

Это вместо всего сэтапа? или только вначале?

b707
Offline
Зарегистрирован: 26.05.2017

thevlados пишет:

Это вместо всего сэтапа? или только вначале?

вместо сетапа

thevlados
Offline
Зарегистрирован: 28.12.2017

https://yadi.sk/i/61DTZRZR3R4Qjj выдает уже ближе к делу, но если я напишу AT то он не говорит OK а продолжает листать влево

thevlados
Offline
Зарегистрирован: 28.12.2017

Мне главное чтобы команды можно было с ним использовать, писать му в сериал, а он отвечал

b707
Offline
Зарегистрирован: 26.05.2017

d13lider пишет:

так я написал все возможные варианты из даташит, а с 38400 вы его вообще запутаете))

если смысл был просканировать все скорости из даташита - то надо немного не так.

Во-первых, как я уже сказал. скорость Serial менять не нужно, только скорость SIM800.

Во-вторых. чтобы не пропустить "удачную скорость", столит после каждой новой скорости выводить в Сериал ее значение, иначе будет трудно понять, какая из скоростей дала отклик.

d13lider
d13lider аватар
Offline
Зарегистрирован: 19.10.2015

хз че это может быть, мусор в СЕРИАЛ!? такое бывает?!
 

d13lider
d13lider аватар
Offline
Зарегистрирован: 19.10.2015

b707 пишет:

если смысл был просканировать все скорости из даташита - то надо немного не так.

Во-первых, как я уже сказал. скорость Serial менять не нужно, только скорость SIM800.

Во-вторых. чтобы не пропустить "удачную скорость", столит после каждой новой скорости выводить в Сериал ее значение, иначе будет трудно понять, какая из скоростей дала отклик.

ну так то да, ыериал не надо... затупил. а вот все скоростя прогнать не помешает ничему, даже если команда пройдет на 115200 и переведет в 9600 то модем так и останется в 9600, и в конце будет команда SIM800.begin(9600); и будет все работать

 

thevlados
Offline
Зарегистрирован: 28.12.2017

Я ничего не понимаю, о чем вы. мне менять только сим с этим кодом и и гадать? или что?

#include <SoftwareSerial.h>
SoftwareSerial SIM800(8, 9);        // 8 - RX Arduino (TX SIM800L), 9 - TX Arduino (RX SIM800L)
void setup() {
Serial.begin(38400);
 SIM800.begin(115200);
 SIM800.println("AT+IPR=9600");
 delay(200);
 SIM800.begin(9600);
 SIM800.println("AT");
 delay(200);
}

void loop() {
  if (SIM800.available());      // Ожидаем прихода данных (ответа) от модема...
  Serial.write(SIM800.read());    // ...и выводим их в Serial
  if (Serial.available());           // Ожидаем команды по Serial...
  SIM800.write(Serial.read());    // ...и отправляем полученную команду модему
}

 

b707
Offline
Зарегистрирован: 26.05.2017

в строчках 14 и 16 у вас точки-с-запятой в конце лишние

__Alexander
Offline
Зарегистрирован: 24.10.2012

Елки палки. У вас уже был ответ OK на команду AT+IPR=9600. На этом и стопэ .

 

thevlados
Offline
Зарегистрирован: 28.12.2017

Изменил. все работает. спасибо всем помогающим!

d13lider
d13lider аватар
Offline
Зарегистрирован: 19.10.2015

Ахахахах вот это косяяяяк

b707
Offline
Зарегистрирован: 26.05.2017

__Alexander пишет:

Елки палки. У вас уже был ответ OK на команду AT+IPR=9600. На этом и стопэ .

да модем не хочет "стопэ" :)

Думаю, причина в ошибках в строках 14 и 16. В сериал летит посторонний мусор, не имеющий ничего общего с сообщениями модема.

b707
Offline
Зарегистрирован: 26.05.2017

thevlados пишет:

Изменил. все работает. спасибо всем помогающим!

это к вопросу, почему не надо выкладывать в форум скриншоты, а надо - просто код.

Kurt86
Offline
Зарегистрирован: 29.12.2017

Всем доброго времени суток. Пришла с али посылка Arduino UNO R3 и SIM800L . Не могу законектить SIM800. Присоединил по классической схеме (фото). Загрузил скетч

#include <SoftwareSerial.h>
SoftwareSerial SIM800(8, 9);        // 8 - RX Arduino (TX SIM800L), 9 - TX Arduino (RX SIM800L)
void setup() {
  Serial.begin(9600);               // Скорость обмена данными с компьютером
  Serial.println("Start!");
  SIM800.begin(9600);               // Скорость обмена данными с модемом
  SIM800.println("AT");
}
 
void loop() {
  if (SIM800.available())           // Ожидаем прихода данных (ответа) от модема...
    Serial.write(SIM800.read());    // ...и выводим их в Serial
  if (Serial.available())           // Ожидаем команды по Serial...
    SIM800.write(Serial.read());    // ...и отправляем полученную команду модему
}
 
В мониторе порта только Start! и тишина. Почитал на форуме, что скорость самого модуля может быть другой, залил
#include <SoftwareSerial.h>
SoftwareSerial SIM800(8, 9);        // 8 - RX Arduino (TX SIM800L), 9 - TX Arduino (RX SIM800L)
void setup() {
  Serial.begin(9600);
  SIM800.begin(115200);
  SIM800.println("AT+IPR=9600");
  delay(200);
  SIM800.begin(57600);
  SIM800.println("AT+IPR=9600");
  delay(200);
  SIM800.begin(38400);
  SIM800.println("AT+IPR=9600");
  delay(200);
  SIM800.begin(19200);
  SIM800.println("AT+IPR=9600");
  delay(200);
  SIM800.begin(9600);
  SIM800.println("AT+IPR=9600");
  delay(200);
  SIM800.begin(4800);
  SIM800.println("AT+IPR=9600");
  delay(200);
  SIM800.begin(2400);
  SIM800.println("AT+IPR=9600");
  delay(200);
  SIM800.begin(1200);
  SIM800.println("AT+IPR=9600");
  delay(200);
 
  Serial.begin(9600);               // Скорость обмена данными с компьютером
  Serial.println("Start!");
  SIM800.begin(9600);               // Скорость обмена данными с модемом
  SIM800.println("AT");
}
void loop() {
  if (SIM800.available())      // Ожидаем прихода данных (ответа) от модема...
  Serial.write(SIM800.read());    // ...и выводим их в Serial
  if (Serial.available())           // Ожидаем команды по Serial...
  SIM800.write(Serial.read());    // ...и отправляем полученную команду модему
}
все то же самое.
Сеть не ловит, короткие вспышки 9шт, задержка, 7шт.
Без симки не прерывные.
Но вроде как без симки AT команды должны выполяться (бракованный модуль или антена внешняя нужна другой вопрос).
Броблема пока в том, что не видно савязи. Кто, что подскажет?

 

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

для начала скорость попробуйте уменьшить до 9600 в SoftwareSerial

первыми командами рекомендуется AT в течении 3 секунд чтоб модуль скорость подхватил

а потом уже работать

и код нормально оформите

типа вот так начало работы с модкмом у меня например:

  // adaptive speed a6 module
  unsigned long curr_millis = millis();
  while ((millis() - curr_millis) <= 3100UL) {
    if (_a6_soft_uart == 1) gsm.println("AT"); else Serial.println("AT");
  }
  curr_millis = millis();
  while ((millis() - curr_millis) <= 5000UL) {
    if (_a6_soft_uart) {
      if (gsm.available())
        while (gsm.available()) gsm.read();
    } else {
      if (Serial.available())
        while (Serial.available()) Serial.read();
    }
  }
  // -

 

Kurt86
Offline
Зарегистрирован: 29.12.2017

andycat пишет:

и код нормально оформите

пардонте, сразу не разобрался как строки нумеровать

andycat пишет:

для начала скорость попробуйте уменьшить до 9600 в SoftwareSerial

изначально попробовал код, приведенный на этом форуме, как раз со скоростью 9600

#include <SoftwareSerial.h>
SoftwareSerial SIM800(8, 9);        // 8 - RX Arduino (TX SIM800L), 9 - TX Arduino (RX SIM800L)
void setup() {
  Serial.begin(9600);               // Скорость обмена данными с компьютером
  Serial.println("Start!");
  SIM800.begin(9600);               // Скорость обмена данными с модемом
  SIM800.println("AT");
}
 
void loop() {
  if (SIM800.available())           // Ожидаем прихода данных (ответа) от модема...
    Serial.write(SIM800.read());    // ...и выводим их в Serial
  if (Serial.available())           // Ожидаем команды по Serial...
    SIM800.write(Serial.read());    // ...и отправляем полученную команду модему
}

но эффекта повторюсь не было, в мониторе порта тишина.

так же попробовал совет даный выше в ветке о переборе скоростей из даташита, эффектата так же ноль

#include <SoftwareSerial.h>
SoftwareSerial SIM800(8, 9);        // 8 - RX Arduino (TX SIM800L), 9 - TX Arduino (RX SIM800L)
void setup() {
  Serial.begin(9600);
  SIM800.begin(115200);
  SIM800.println("AT+IPR=9600");
  delay(200);
  SIM800.begin(57600);
  SIM800.println("AT+IPR=9600");
  delay(200);
  SIM800.begin(38400);
  SIM800.println("AT+IPR=9600");
  delay(200);
  SIM800.begin(19200);
  SIM800.println("AT+IPR=9600");
  delay(200);
  SIM800.begin(9600);
  SIM800.println("AT+IPR=9600");
  delay(200);
  SIM800.begin(4800);
  SIM800.println("AT+IPR=9600");
  delay(200);
  SIM800.begin(2400);
  SIM800.println("AT+IPR=9600");
  delay(200);
  SIM800.begin(1200);
  SIM800.println("AT+IPR=9600");
  delay(200);
 
  Serial.begin(9600);               // Скорость обмена данными с компьютером
  Serial.println("Start!");
  SIM800.begin(9600);               // Скорость обмена данными с модемом
  SIM800.println("AT");
}

 

Kurt86
Offline
Зарегистрирован: 29.12.2017

Заметил еще один нюанс. При отправке команды в порт, сама команда тоже не появляется в строчке после старт, как будто уходит вникуда. Может дело вовсе не с модемом?

zile
Offline
Зарегистрирован: 05.08.2018

Полностью проделал, все вышесказанное kurt86 и thevlados - не работает от слова совсем(и не работает в точь, как у них). А как решили сей трабл, почему-то не написано:(

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

zile пишет:

Полностью проделал, все вышесказанное kurt86 и thevlados - не работает от слова совсем(и не работает в точь, как у них). А как решили сей трабл, почему-то не написано:(

а можно уточнить не работает что? и кстати литературу бы почитать не помешает, есть команда "эхо" т е можно включить и отключить повтор от модема команды.

я например вот таким набором команд инициализирую модем

  "AT+DDET=1\r\n", "OK", "", "", "1", "2", // DTMF on               1
  "ATE0\r\n", "OK", "", "", "1", "3", // no echo                    2
  "AT+CLIP=1\r\n", "OK", "", "", "1", "4", // no aon                3
  "ATS0=0\r\n", "OK", "", "", "1", "5", // no answer by ring        4
  "ATV1\r\n", "OK", "", "", "1", "6", // get text for error         5
  "AT+CMEE=2\r\n", "OK", "", "", "1", "7", // get full text error   6
  "AT+CMGF=1\r\n", "OK", "", "", "1", "8", // text mode sms         7

 

zile
Offline
Зарегистрирован: 05.08.2018

Спасибо большое за ответ, оказалась чистая физика - не соединил земли. Каюсь - от отчаяния уже здесь спросил