SIM800L и нечитаемые символы

Тема в разделе "Arduino & Shields", создана пользователем obuhanoe, 9 авг 2016.

  1. obuhanoe

    obuhanoe Гик

    Доброе утро!
    Работал, работал мой автополив и что-то случилось. Сначала перестал нормально работать SIM800L, после сгорел блок питания 12В 2А (был конденсат).
    Модуль SIM800L сначала перестал принимать СМС, когда подключил к компьютеру и терминалу - при запуске модуля в перемешку с ОК, ERROR - стал получать символы которые не читаются.
    Поясню как у меня подключен модуль, я подпаялся к питанию ардуины(снизу платы) и вывел + и - на DC/Dc понижающий конвертор (выставлено на 4,1В) - считал что меньше проводов в розетку - это лучше :) Питание 12 В 2А.
    Проверил второй модуль, проблема та же самая. Попытался запитать мимо Ардуины, только подсоединены TX и RX к 11 и 10 пины (Ардуина Мега) - не отвечает модуль на любой скорости.
    Сижу и не могу понять что я делаю не так, чтобы проверить работоспособность модуля и самой Ардуины. А тем временем томаты горят без полива :(

    P.S. Ардуина находится в коробе на DIN рейке под навесом, а вот ее питание было выведено наружу и похоже отсырело.

    Буду рад любому совету.

    Спасибо.
     
  2. DIYMan

    DIYMan Guest

    Земли объедините.
     
    obuhanoe нравится это.
  3. obuhanoe

    obuhanoe Гик

    Сделал.
    На старой ардуине и старом модуле sim800l - проблема осталась, а на новой ардуине и старом модуле(и на новом), частично иногда проскакивают вида
    Код (C++):
    ATT: +CMGR
    RIC:
    +CMGR: "REC UNREAD","+79&ў’’ВЉЉ’bbЉІz‚Вz‚КbЉВТ’єТЉєZЉ’j
    [conf1]
    w=0
    sh=5
    sm=20
    eh=5
    em=50
    [coЛЙ]
    Питание? Блок питание не внушает доверия, хотя и 12В 2А.

    P.S. - взял блок питания на 3А (типа токого - http://ru.aliexpress.com/item/Small..._8&btsid=4dc38c9b-3344-4494-ac13-cf033682e8f5) - проблема осталось, ума не приложу что не так то?

    Даже симку проверил, ничего не изменилось(ну не в операторе же дело- мегафон кавказ), подскажите что еще можно проверить.
     
    Последнее редактирование: 9 авг 2016
  4. obuhanoe

    obuhanoe Гик

    DIYMan - можете подсказать что еще и как можно проверить данный модуль.
    Кстати проверил вчера АТ команды, с ними проблем нет.

    Спасибо
     
  5. DIYMan

    DIYMan Guest

    Я пока с ним особо не возился - времени на всё не хватает. Если его отдельно подключить и через терминалку побаловаться AT-командами - проблем нет?
     
  6. obuhanoe

    obuhanoe Гик

    Подключен отдельно от 36W блока питания (12В 3А).
    АТ Команды выполнялись в скетче из примеров библиотеки - тоже проблем нет, отображаются данные нормально.
    Как принять СМС с помощью АТ команды не нашел и это не смог проверить, наверное нужно поковыряться в исходниках библиотеки.
     
  7. DIYMan

    DIYMan Guest

    Смотрите AT+CNMI - устанавливаете нужный режим вывода, и при приходе SMS в порт выпадают принятые модемом данные.
     
    obuhanoe нравится это.
  8. obuhanoe

    obuhanoe Гик

    Подскажите, почему когда в Мегу пины 10 и 11 пины вставляю RX и TX (или наоборот) никаких ответов не получаю от модуля. Не правильно использую номера пинов?
    Скорость SIM800L - 9600

    Код (C++):
    #include <SoftwareSerial.h>
    SoftwareSerial gprsSerial(10, 11);
    void setup()
    {
        Serial.begin (9600);
        gprsSerial.begin(9600);
        // Настраиваем приём сообщений с других устройств
        // Между командами даём время на их обработку
        gprsSerial.print("AT+CMGF=1\r");
        delay(300);
        gprsSerial.print("AT+IFC=1, 1\r");
        delay(300);
        gprsSerial.print("AT+CPBS=\"SM\"\r");
        delay(300);
        gprsSerial.print("AT+CNMI=1,2,2,1,0\r");
        delay(500);
    }
    String currStr = "";
    // Переменная принимает значение True, если текущая строка является сообщением
    boolean isStringMessage = false;
    void loop()
    {
        if (!gprsSerial.available())
            return;
        char currSymb = gprsSerial.read();  
        if ('\r' == currSymb) {
            if (isStringMessage) {
                //если текущая строка - SMS-сообщение,
                //отреагируем на него соответствующим образом
                if (!currStr.compareTo("Lera")) {
                    Serial.println ("Hello Lera");
                } else if (!currStr.compareTo("Jula")) {
                    Serial.println ("Hello Jula");
                }
                isStringMessage = false;
            } else {
                if (currStr.startsWith("+CMT")) {
                    //если текущая строка начинается с "+CMT",
                    //то следующая строка является сообщением
                    isStringMessage = true;
                }
            }
            currStr = "";
        } else if ('\n' != currSymb) {
            currStr += String(currSymb);
        }
    }
     
  9. DIYMan

    DIYMan Guest

    Местами номера пробовали менять?
     
  10. obuhanoe

    obuhanoe Гик

    Так точно, менял.
     
  11. DIYMan

    DIYMan Guest

    Что за странные команды:
    Код (C++):
    gprsSerial.print("AT+CMGF=1\r");
    \r - это символ возврата каретки, а никак не перевода строки. Не проще ли было убрать \r и вместо print юзать println?
     
  12. obuhanoe

    obuhanoe Гик

    Код из просторов инета, изменю и отпишусь

    Изменений нет.
     
    Последнее редактирование: 10 авг 2016
  13. obuhanoe

    obuhanoe Гик

    Вот что у меня получилось выяснить -
    АТ команды получились только через скетч библиотеки прогнать, причем, изменив скорость на 9600 - СМС стали приниматься адекватно, а вот отправлять данные по GPRS перестали - connection fail пишет.
    Перебрал скорости до 57600 - СМС до 38400 работают нормально, после появляются нечитаемые символы. GPRS - почему не заработал ни на одной скорости, хотя раньше на 57600 отправлялись данные.

    Cтарому модулю менял скорости с помощью команды - AT+IPR=9600 после чего СМС начали нормально приниматься, а GPRS перестал работать.
    Взял новый модуль, скорость у него 57600, GPRS отправляются, а СМС кривые.
     
    Последнее редактирование: 10 авг 2016
  14. DIYMan

    DIYMan Guest

    Что-то вы мечетесь туда-сюда: начните с того, что выясните - а на какой скорости работает сам SIM800L? Вы в терминальной программе на какой скорости коннектитесь к нему? У меня, например, модем пришёл, прошитый на скорость 57600, перешить скорость по умолчанию можно командой AT+CIOBAUD, емнип.
     
    Последнее редактирование модератором: 10 авг 2016
  15. obuhanoe

    obuhanoe Гик

    Если не ошибаюсь это для ESP8266.
    Пришел и работал пару месяцев на 57600.
    АТ команды посылаю ему через терминал Arduino IDE.

    Код (C++):
    #include "SIM900.h"
    #include <SoftwareSerial.h>

    int numdata;
    char inSerial[40];
    int i=0;


    void setup()
    {
         //Serial connection.
         Serial.begin(9600);
         Serial.println("GSM Shield testing.");
         //Start configuration of shield with baudrate.
         //For http uses is raccomanded to use 4800 or slower.
         if (gsm.begin(9600))
              Serial.println("\nstatus=READY");
         else Serial.println("\nstatus=IDLE");
    };

    void loop()
    {
         //Read for new byte on serial hardware,
         //and write them on NewSoftSerial.
         serialhwread();
         //Read for new byte on NewSoftSerial.
         serialswread();
    };

    void serialhwread()
    {
         i=0;
         if (Serial.available() > 0) {
              while (Serial.available() > 0) {
                   inSerial[i]=(Serial.read());
                   delay(10);
                   i++;
              }

              inSerial[i]='\0';
              if(!strcmp(inSerial,"/END")) {
                   Serial.println("_");
                   inSerial[0]=0x1a;
                   inSerial[1]='\0';
                   gsm.SimpleWriteln(inSerial);
              }
              //Send a saved AT command using serial port.
              if(!strcmp(inSerial,"TEST")) {
                   Serial.println("SIGNAL QUALITY");
                   gsm.SimpleWriteln("AT+CSQ");
              } else {
                   Serial.println(inSerial);
                   gsm.SimpleWriteln(inSerial);
              }
              inSerial[0]='\0';
         }
    }

    void serialswread()
    {
         gsm.SimpleRead();
    }
     
    По другому никак не получается пообщаться с SIM800L, выше я приводил код из интернета с пинами 10 и 11, но он у меня не хочет работать в терминале пустота.
     
  16. DIYMan

    DIYMan Guest

    Точно, попутал, AT+IPR команда.
     
  17. obuhanoe

    obuhanoe Гик

    менял именно ею - AT+IPR=9600 и AT+CNMI=1,2,2,1,0
    После этого СМС стали приниматься корректно.
    Но если попробывать с помощью библиотеки отправить данные, GPRS соединение устанавливает, но данные не отправляются , падает с ошибкой connect failed вроде бы.

    Может попробывать с помощью АТ команд отправить данные?
     
  18. DIYMan

    DIYMan Guest

    Пробуйте. Мне эти библиотеки - вообще без надобности, т.к. там граблей - выше крыши, как правило. Проще самому написать, заодно разобравшись в девайсе.
     
  19. obuhanoe

    obuhanoe Гик

    Код (C++):
    #include <SoftwareSerial.h>
    SoftwareSerial mySerial(2, 3); // RX, TX
    void setup() {
      Serial.begin(9600);  //Скорость порта для связи Arduino с компьютером
      Serial.println("SIM800L Start");
      mySerial.begin(9600);  //Скорость порта для связи Arduino с GSM модулем

      delay(15000);
      Serial.println("SIM800L");
      mySerial.println("AT+GMR");
    }

    void loop() {

      if (mySerial.available())
        Serial.write(mySerial.read());
      if (Serial.available())
        mySerial.write(Serial.read());
    }
    Вот такой код "завелся", но только на Nano на Mega2560 ни на 7,8 ни на 10,11 пинах ни на Serial3 - никак работать нехочет. Подскажите как заставить работать Мегу.
    Спасибо.
     
  20. DIYMan

    DIYMan Guest

    Вы как на меге юзали - надеюсь, вместо SoftwareSerial напрямую указывали Serial3? И не забывали инициализировать его? У меги четыре аппаратных UART, у меня, например, они все при деле, и работают.