Помогите с sim 800l

Тема в разделе "Arduino & Shields", создана пользователем Егор Сергеевич, 11 ноя 2021.

  1. Добрый день. Помогите любителю ардуино.

    Итак, подключил SIM 800l к ардуино нано, в принципе всё работает. Все соединения спаяны. Схему подключения:
    [​IMG]
    [​IMG]

    Задача чтобы это всё работало без кабеля усб (тот что к компьютеру). Не по силам мне.

    Дополнения:

    -код ниже в посте #5

    Подключил НАНО через разъем мини-усб и вставил кабель в зарядник от телефона (ЗУ). Заметил следующее. Если одновременно подключить БП тот что питает стабилизатор (фактически sim800l) и ЗУ то что питает НАНО, то всё запускается, ардуино нано тоже (вижу по реле, так как в коде одно реле при запуск вкл, другое выкл). Но в таком случае управление через смс не работает, хотя Sim800l смски принимает, слышу по соответсвующему звуку от сим модуля.

    И если в этой ситуации (БП и ЗУ включены в розетку) отключить ЗУ из розетки и вставить обратно, то всё прекрасно работает!!!!

    Пробую по другому. Вставляю БП в розетку, через 3 сек вставляю ЗУ в розетку. Опять всё замечательно работает!

    Как буд-то ардуино нужно запускать чуть позже, чем sim800l. Что не так????
     
    Последнее редактирование: 12 ноя 2021
  2. Ariadna-on-Line

    Ariadna-on-Line Гуру

    То есть вы через SIM800 Ардуиной получаете команды управлять релюхами. Это понятно. А без компа как вы смс-ки видите ?
    А чем отправляете команды на SIM800 ? Что это за команды ? СМС-ки с телефона ?
     
  3. Airbus

    Airbus Радиохулиган Модератор

    GSM блоку не хватает питания. Попробуйте питать Нану через USB разьем и шнурок от повербанка. Если будет работать то можно питать через этот же разьем от Блока питания. На схеме у Вас УНО его можно питать через разьем питания и GSM модуль уже от УНО. У меня сделанно именно так.
     
    Последнее редактирование: 12 ноя 2021
  4. Всё верно, смсками с телефона управляю релюшками по средствам ардуино. Команды самые обычные, в следующем сообщение прикреплю код, там видно будет.
     
  5. Схема (действительно уно, на заготовке был именно уно, а не нано):
    [​IMG]

    Код из интернета, добавил только одну команду для перезапуска реле (10 сек):
    Код (C++):
    #include <SoftwareSerial.h>
    SoftwareSerial mySerial(3, 2);              // Выводы SIM800L Tx & Rx подключены к выводам Arduino 3 и 2
    char incomingByte;
    String inputString;
    int relay_1 = A0;                           // Вывод управления реле 1
    int relay_2 = A1;                           // Вывод управления реле 2
    void setup()
    {
       pinMode(relay_1, OUTPUT);                 // Установим вывод как выход
       digitalWrite(relay_1, HIGH);              // Устанавливаем высокий уровень
       pinMode(relay_2, OUTPUT);                 // Установим вывод как выход
       digitalWrite(relay_2, LOW);              // Устанавливаем высокий уровень
       Serial.begin(9600);                
       mySerial.begin(9600);
    while(!mySerial.available()){             // Зацикливаем и ждем инициализацию SIM800L
        mySerial.println("AT");                  // Отправка команды AT
        delay(1000);                             // Пауза
        Serial.println("Connecting…");         // Печатаем текст
        }
        Serial.println("Connected!");            // Печатаем текст
        mySerial.println("AT+CMGF=1");           // Отправка команды AT+CMGF=1
        delay(1000);                             // Пауза
        mySerial.println("AT+CNMI=1,2,0,0,0");   // Отправка команды AT+CNMI=1,2,0,0,0
        delay(1000);                             // Пауза
        mySerial.println("AT+CMGL=\"REC UNREAD\"");
    }
    void loop()
    {
       if(mySerial.available()){                  // Проверяем, если есть доступные данные
           delay(100);                            // Пауза
          while(mySerial.available()){            // Проверяем, есть ли еще данные.
          incomingByte = mySerial.read();         // Считываем байт и записываем в переменную incomingByte
          inputString += incomingByte;            // Записываем считанный байт в массив inputString
        }
           delay(10);                             // Пауза      
           Serial.println(inputString);           // Отправка в "Мониторинг порта" считанные данные
           inputString.toUpperCase();             // Меняем все буквы на заглавные
       
           if (inputString.indexOf("ON_1") > -1){ // Проверяем полученные данные, если ON_1 включаем реле 1
            digitalWrite(relay_1, HIGH);     }
             
           if (inputString.indexOf("OFF_1") > -1){ // Проверяем полученные данные, если OFF_1 выклюем реле 1
            digitalWrite(relay_1, LOW);     }
         
           if (inputString.indexOf("REST_1") > -1){
            digitalWrite(relay_1, LOW);
            delay (10000);
            digitalWrite(relay_1, HIGH);  }      
       
           if (inputString.indexOf("ON_2") > -1){ // Проверяем полученные данные, если ON_2 включаем реле 2
            digitalWrite(relay_2, HIGH);    
            sms(String("Relay 2 - ON"), String("+7xxxxxxxxxx"));}  // Отправка SMS  
           if (inputString.indexOf("OFF_2") > -1){     // Проверяем  полученные  данные, если OFF_2 выключаем реле 2
            digitalWrite(relay_2, LOW);    
            sms(String("Relay 2 - OFF"), String("+7xxxxxxxxxx"));} // Отправка SMS  
            delay(50);
           if (inputString.indexOf("OK") == -1){  
            mySerial.println("AT+CMGDA=\"DEL ALL\"");    
            delay(1000);}  
            inputString = "";}
    }
    void sms(String text, String phone)  // Процедура Отправка SMS
    {
       Serial.println("SMS send started");
       mySerial.println("AT+CMGS=\"" + phone + "\"");
       delay(500);
       mySerial.print(text);
       delay(500);
       mySerial.print((char)26);
       delay(500);
       Serial.println("SMS send complete");
       delay(2000);
    }

    Подключил НАНО через разъем мини-усб и вставил кабель в зарядник от телефона (ЗУ). Заметил следующее. Если одновременно подключить БП тот что питает стабилизатор (фактически sim800l) и ЗУ то что питает НАНО, то всё запускается, ардуино нано тоже (вижу по реле, так как в коде одно реле при запуск вкл, другое выкл). Но в таком случае управление через смс не работает, хотя Sim800l смски принимает, слышу по соответсвующему звуку от сим модуля.

    И если в этой ситуации (БП и ЗУ включены в розетку) отключить ЗУ из розетки и вставить обратно, то всё прекрасно работает!!!!

    Пробую по другому. Вставляю БП в розетку, через 3 сек вставляю ЗУ в розетку. Опять всё замечательно работает!

    Как буд-то ардуино нужно запускать чуть позже, чем sim800l. Что не так????
     
  6. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Ну и в чем проблема - введите в начале сетапа Ардуины делАй на 3 секунды. Возможно mySerial не инициализируется, тк сим в это время еще не запустился.
    ПС. А не пробовали просто нажать кнопку ресет на ардуине через три секунды после включения питания вашей сборки и посмотреть заработает ли система ?
     
    Последнее редактирование: 13 ноя 2021
  7. Onkel

    Onkel Гуру

    LowESR электролит нужно прямо на sim800 посадить по питанию, и чудеса исчезнут. 3300 или 4700 мкф.
     
  8. Спасибо за совет. Не помогло.

    делай - не помогает. нажатие кнопки ресет решают проблему.

    Установил в схему реле задержки времени, тем самым на ардуино подаю питание на 10 сек позже, чем на сим800. Тестирую, пока работает.
     
  9. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Такие "решения" работоспособны, но являются не РЕШЕНИЕМ, а "костылем".Тк не выяснена причина. Релюха-механическое устройство, ненадежный элемент.
     
    Последнее редактирование: 1 дек 2021
    parovoZZ и Andrey12 нравится это.