Скетч отказывается работать, если при запуске на нажать кнопку ресет.
- Войдите на сайт для отправки комментариев
Добрый день.
Оборудование.
- Ардуино УНО (с Али)
- Модуль SIM800L V2 (в обвязке, с питанием проблем нет)
- Четырех-канальное реле.
Спаяно по схеме:
Сразу признаюсь составил скетч из нескольких разных, а не писал его сам. Потому как по запросу "SIM800L управление реле" выдает много схожих мануалов, но с не работающими скетчем. Пришлось собирать по щепотке с разных источников.
А всего то лишь требуется при помощи смс включать или выключать 4 канальное реле. Скетч работает только, если подать на него питание и один раз нажать кнопку ресет на ардуино. Как от этого избавится? Оборудование установлено удаленно и при разрыве питания, скетч перестанет исполняться без моего вмешательства.
/* * Скетч для управления четырехканальным реле с помощью Ардуино * */ #include <SoftwareSerial.h> SoftwareSerial SIM800(8, 7); // Определяем пин 8 - RX Arduino (TX SIM800L), 7 пин - TX Arduino (RX SIM800L) char incomingByte; String inputString; #define RELAY1 14 // Определяем пин A0, используемый для подключения реле 1 #define RELAY2 15 // Определяем пин A1, используемый для подключения реле 2 #define RELAY3 16 // Определяем пин A2, используемый для подключения реле 3 #define RELAY4 17 // Определяем пин A3, используемый для подключения реле 4 void setup() { Serial.begin(9600); // Скорость обмена данными с компьютером Serial.println("Start!"); SIM800.begin(9600); // Скорость обмена данными с модемом SIM800.println("AT"); delay(100); SIM800.println("AT+CMGF=1"); // Установка SMS в текстовый режим delay(1000); SIM800.println("AT+CNMI=1,2,0,0,0"); // Процедура обработки вновь полученных сообщений delay(1000); SIM800.println("AT+CMGL=\"REC UNREAD\""); // Прочитать непрочитанные сообщения pinMode(RELAY1, OUTPUT); // Объявляем пин реле 1 как выход digitalWrite(RELAY1, LOW); // Включаем реле - посылаем низкий сигнал, на этом реле сидит роутер. pinMode(RELAY2, OUTPUT); // Объявляем пин реле 2 как выход digitalWrite(RELAY2, HIGH); // Выключаем реле - посылаем высокий сигнал pinMode(RELAY3, OUTPUT); // Объявляем пин реле 3 как выход digitalWrite(RELAY3, HIGH); // Выключаем реле - посылаем высокий сигнал pinMode(RELAY4, OUTPUT); // Объявляем пин реле 4 как выход digitalWrite(RELAY4, HIGH); // Выключаем реле - посылаем высокий сигнал } void loop() { if(SIM800.available()) { delay(100); // Последовательный буфер while(SIM800.available()){ incomingByte = SIM800.read(); inputString += incomingByte; } delay(10); Serial.println(inputString); inputString.toUpperCase(); // Включить или выключить реле 1 if (inputString.indexOf("OFF1") > -1){ digitalWrite(RELAY1, HIGH);} if (inputString.indexOf("ON1") > -1){ digitalWrite(RELAY1, LOW); } delay(50); // Включить или выключить реле 2 if (inputString.indexOf("OFF2") > -1){ digitalWrite(RELAY2, HIGH);} if (inputString.indexOf("ON2") > -1){ digitalWrite(RELAY2, LOW); } delay(50); // Включить или выключить реле 3 if (inputString.indexOf("OFF3") > -1){ digitalWrite(RELAY3, HIGH);} if (inputString.indexOf("ON3") > -1){ digitalWrite(RELAY3, LOW); } delay(50); // Включить или выключить реле 4 if (inputString.indexOf("OFF4") > -1){ digitalWrite(RELAY4, HIGH);} if (inputString.indexOf("ON4") > -1){ digitalWrite(RELAY4, LOW); } delay(50); // Удалить сообщения и сохранить память if (inputString.indexOf("OK") == -1){ SIM800.println("AT+CMGDA=\"DEL ALL\""); delay(1000);} inputString = ""; } }
Спасибо.
процедура
setup
()
выполняется только один раз при старте, соотвественно вам необходимо команду модема чтения СМС поместить в loop, поставить задержку на пару минут чтоб с периодичностью читала СМСки.процедура
setup
()
выполняется только один раз при старте, соотвественно вам необходимо команду модема чтения СМС поместить в loop, поставить задержку на пару минут чтоб с периодичностью читала СМСки.Я правильно понял 26 строку запихнуть под loop и добавить например delay (1000*60) так?
22 и 24 я не трогаю, они один раз исполняются..
Спасибо!
задержку в конце loop процедуры поставить
ЗЫ. Надеюсь вы не отопительным газовым котлом собираетесь управлять, т.к. весь сектч это не жизнеспособное решение, и долго / стабильно работать он вряд ли будет.
задержку в конце loop процедуры поставить
ЗЫ. Надеюсь вы не отопительным газовым котлом собираетесь управлять, т.к. весь сектч это не жизнеспособное решение, и долго / стабильно работать он вряд ли будет.
Раз уж вы помогаете мне со скетчем, подсказавыйте так, чтоб я не сдох :) Шутка.
Нет на реле сидит роуттер с модемом, который переодически отваливается от сети. Помогает только перезагрузка по питанию. К сожалению никакие netwatch в роутере не помогают перезагрузить питание USB. Пришлось собрать вот такое чудо!
задержку в конце loop процедуры поставить
ЗЫ. Надеюсь вы не отопительным газовым котлом собираетесь управлять, т.к. весь сектч это не жизнеспособное решение, и долго / стабильно работать он вряд ли будет.
Раз уж вы помогаете мне со скетчем, подсказавыйте так, чтоб я не сдох :) Шутка.
Нет на реле сидит роуттер с модемом, который переодически отваливается от сети. Помогает только перезагрузка по питанию. К сожалению никакие netwatch в роутере не помогают перезагрузить питание USB. Пришлось собрать вот такое чудо!
так он и должен отваливаться раз в сутки и сам себя переподнимать
раз в сутки и сам себя переподнимать
Модем просто теряет сеть. Нетвоч роутера натроен на перезагрузку USB если нет ответа от 8.8.8.8 и судя по логам он это делает и довольно часто!, но сеть на свистке от таких действий иногда не подымается. Пришлось изобрести это колесо в виде реле, что бы по смс его ребутать.
Вот нетвотч и лог
Подскажите тупню со скетчем, это все что я прошу ))
В итоге я имею следующее. Боже как стыдно (
А не проще в setup дождаться пока модем включиться ?
И не понимаю, как можно слать команды и не интересоваться чего отвечают…
Поставить реле с RTC и нехай себе перезагружает все каждые 12 или 6 часов
Я это сделаю. Обязательно, но завтра улетаю в отпуск отсюда и спешка. Подключу тариф на 100 смс и буду развлекаться пока не надоест. Но я узнаю когда отвалится модем, так как переодически захожу на роутер через удаленку. Но это другая история..
Вы мне главное скажите Этот франкенштейн работать будет ?))
Этот франкенштейн работать будет ?))
ну....будет - попробуйте :) вопрос насколько долго, тем более если в отпуск собираетесь.
не.....другая мысль: собрать железку Arduino Nano + Ethernet W5500 воткнуть в роутер (Mikrotik судя по скринам), пинговать внешнюю сеть....и как только связь пропадает - слать что либо на железку (GET запрос например) и Arduino будер рубить питание на пару секунд.
Этот франкенштейн работать будет ?))
ну....будет - попробуйте :) вопрос насколько долго, тем более если в отпуск собираетесь.
не.....другая мысль: собрать железку Arduino Nano + Ethernet W5500 воткнуть в роутер (Mikrotik судя по скринам), пинговать внешнюю сеть....и как только связь пропадает - слать что либо на железку (GET запрос например) и Arduino будер рубить питание на пару секунд.
Я сам в шоке от моих идей )) Но, реле я взял, как видите 4 канальное, дополнительно еще будет и сигнализация и прочие НУЖНЫЕ мне вещи :)
Главное потом добавить в скетч ответ о статусе и желательно на записанные ранее номера, а не всем подряд ))
http://codius.ru/articles/GSM_%D0%BC%D0%BE%D0%B4%D1%83%D0%BB%D1%8C_SIM800L_%D1%87%D0%B0%D1%81%D1%82%D1%8C_1
Да я знакомился с этой статьей. И часть кода взял с нее.
Спасибо вам. Поеду заливать скетч.
Розеткой с смс мордой давно пользуюсь в одной фирме - где все супер далеко и только ей и можно ребутнуть железку. Китай рулит. Рублей 6к где то покупал пару лет назад.
https://m.ru.aliexpress.com/item/32841061942.html?trace=wwwdetail2mobile...
Мимо пробегал - аккурат то что вам нужно и паять не надо - скрипт в роутере написать и послать сигнал esp на включение реле.
Ну хз, с смс модулем готовые розетки есть в китае. Оправдывают свою стоимость если ты за сотни км от устройства.
Скетч не работает. Не реагирует на СМС. В монитор шлет мусор и вопросы ))
Поэтому мой первоначальный скетч загрузил он рабочий, хоть и с небольшим недостатком.