Добрый день. Помогите любителю ардуино. Итак, подключил SIM 800l к ардуино нано, в принципе всё работает. Все соединения спаяны. Схему подключения: Задача чтобы это всё работало без кабеля усб (тот что к компьютеру). Не по силам мне. Дополнения: -код ниже в посте #5 Подключил НАНО через разъем мини-усб и вставил кабель в зарядник от телефона (ЗУ). Заметил следующее. Если одновременно подключить БП тот что питает стабилизатор (фактически sim800l) и ЗУ то что питает НАНО, то всё запускается, ардуино нано тоже (вижу по реле, так как в коде одно реле при запуск вкл, другое выкл). Но в таком случае управление через смс не работает, хотя Sim800l смски принимает, слышу по соответсвующему звуку от сим модуля. И если в этой ситуации (БП и ЗУ включены в розетку) отключить ЗУ из розетки и вставить обратно, то всё прекрасно работает!!!! Пробую по другому. Вставляю БП в розетку, через 3 сек вставляю ЗУ в розетку. Опять всё замечательно работает! Как буд-то ардуино нужно запускать чуть позже, чем sim800l. Что не так????
То есть вы через SIM800 Ардуиной получаете команды управлять релюхами. Это понятно. А без компа как вы смс-ки видите ? А чем отправляете команды на SIM800 ? Что это за команды ? СМС-ки с телефона ?
GSM блоку не хватает питания. Попробуйте питать Нану через USB разьем и шнурок от повербанка. Если будет работать то можно питать через этот же разьем от Блока питания. На схеме у Вас УНО его можно питать через разьем питания и GSM модуль уже от УНО. У меня сделанно именно так.
Всё верно, смсками с телефона управляю релюшками по средствам ардуино. Команды самые обычные, в следующем сообщение прикреплю код, там видно будет.
Схема (действительно уно, на заготовке был именно уно, а не нано): Код из интернета, добавил только одну команду для перезапуска реле (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. Что не так????
Ну и в чем проблема - введите в начале сетапа Ардуины делАй на 3 секунды. Возможно mySerial не инициализируется, тк сим в это время еще не запустился. ПС. А не пробовали просто нажать кнопку ресет на ардуине через три секунды после включения питания вашей сборки и посмотреть заработает ли система ?
Спасибо за совет. Не помогло. делай - не помогает. нажатие кнопки ресет решают проблему. Установил в схему реле задержки времени, тем самым на ардуино подаю питание на 10 сек позже, чем на сим800. Тестирую, пока работает.
Такие "решения" работоспособны, но являются не РЕШЕНИЕМ, а "костылем".Тк не выяснена причина. Релюха-механическое устройство, ненадежный элемент.