Не получается добавить новые кнопки к реле удаленного доступа с аутентификацией
- Войдите на сайт для отправки комментариев
Собираю умную розетку на 8 реле .
Сразу скажу , ЯП толком не знаю .
Arduino Uno + shild w5100 + 8 Channel Relay Module
аутентификацию взял отсюда https://it4it.club/topic/13-%D... %80%D0%B0/
Использовал код который в комментариях , он без base.64 и легче
Добавил пины , поставил их в условия
получился в итоге вот такой код
/* sign in (authentication) to the Web server Arduino (с) http://it4it.club */ #include <SPI.h> #include <Ethernet.h> // Used for Ethernet int led2 = 2; int led3 = 3; int led4 = 4; int led5 = 5; int led6 = 6; int led7 = 7; int led8 = 8; int led9 = 9; /* Настройки сети */ byte mac[] = { 0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x02 }; EthernetServer server(80); /* Переменные для авторизации через web */ String readString; // Буфер для данных от пользователя Web сервера /* SETUP */ void setup() { pinMode(led2, OUTPUT); pinMode(led3, OUTPUT); pinMode(led4, OUTPUT); pinMode(led5, OUTPUT); pinMode(led6, OUTPUT); pinMode(led7, OUTPUT); pinMode(led8, OUTPUT); pinMode(led9, OUTPUT); Serial.begin(9600); // Поднимаем сеть Ethernet.begin(mac); server.begin(); Serial.println(Ethernet.localIP()); } /* LOOP */ void loop() { EthernetClient client = server.available(); if (client) { boolean currentLineIsBlank = true; while (client.connected()) { if (client.available()) { char c = client.read(); readString += c; if (c == '\n' && currentLineIsBlank) { if (readString.lastIndexOf(F("Authorization: Basic bG9naW46cGFzc3dvcmQ="))>-1) { if (readString.lastIndexOf(F("GET /favicon.ico"))>-1) { client.println(F("HTTP/1.0 404 Not Found")); } else { client.println(F("HTTP/1.0 200 OK")); client.println(F("Content-Type: text/html")); client.println(F("Pragma: no-cache\r\nRefresh: 3\r\n")); // client.println(F("<html><head><meta charset=UTF-8\"><title>Arduino - iT4iT.CLUB</title>")); client.println(F("<style>body,table,tr,td{font-style:normal;font-family:verdana;font-size:11px;}</style></head><body>")); client.print(F("Arduino on <a href=\"https://it4it.club\">iT4iT.CLUB</a>")); client.println(F("</body></html>")); client.println("<br />"); client.println("<br />"); //////////////////////кнопка1 // client.println("<br />"); client.println("<br />"); client.println("<a href=\"/?button1on\"\">Turn On LED1</a>"); client.println("<a href=\"/?button1off\"\">Turn Off LED1</a><br />"); //SPACES //client.println("<br />"); //client.println("<br />"); if (readString.indexOf("?button1on") >0){ digitalWrite(led2, HIGH); } if (readString.indexOf("?button1off") >0){ digitalWrite(led2, LOW); } ////////////////////////////////////////////////////////////////// //кнопка2 //client.println("<br />"); client.println("<br />"); client.println("<a href=\"/?button2on\"\">Turn On LED2</a>"); client.println("<a href=\"/?button2off\"\">Turn Off LED2</a><br />"); //SPACES //client.println("<br />"); client.println("<br />"); if (readString.indexOf("?button2on") >0){ digitalWrite(led3, HIGH); } if (readString.indexOf("?button2off") >0){ digitalWrite(led3, LOW); } /////////////////////////////////////////////////////////////// //кнопка3 //client.println("<br />"); client.println("<br />"); client.println("<a href=\"/?button3on\"\">Turn On LED3</a>"); client.println("<a href=\"/?button3off\"\">Turn Off LED3</a><br />"); //SPACES //client.println("<br />"); //client.println("<br />"); if (readString.indexOf("?button3on") >0){ digitalWrite(led4, HIGH); } if (readString.indexOf("?button3off") >0){ digitalWrite(led4, LOW); } ////////////////////////////////////////////////////////////////////// //кнопка4 //client.println("<br />"); client.println("<br />"); client.println("<a href=\"/?button4on\"\">Turn On LED4</a>"); client.println("<a href=\"/?button4off\"\">Turn Off LED4</a><br />"); //SPACES //client.println("<br />"); //client.println("<br />"); if (readString.indexOf("?button4on") >0){ digitalWrite(led5, HIGH); } if (readString.indexOf("?button4off") >0){ digitalWrite(led5, LOW); } /////////////////////////////////////////////////////////////// //кноака5 //client.println("<br />"); client.println("<br />"); client.println("<a href=\"/?button5on\"\">Turn On LED5</a>"); client.println("<a href=\"/?button5off\"\">Turn Off LED5</a><br />"); //SPACES //client.println("<br />"); //client.println("<br />"); if (readString.indexOf("?button5on") >0){ digitalWrite(led6, HIGH); } if (readString.indexOf("?button5off") >0){ digitalWrite(led6, LOW); } /////////////////////////////////////////////////////// //кнопка6 //client.println("<br />"); client.println("<br />"); client.println("<a href=\"/?button6on\"\">Turn On LED6</a>"); client.println("<a href=\"/?button6off\"\">Turn Off LED6</a><br />"); //SPACES // client.println("<br />"); //client.println("<br />"); if (readString.indexOf("?button6on") >0){ digitalWrite(led7, HIGH); } if (readString.indexOf("?button6off") >0){ digitalWrite(led7, LOW); } /////////////////////////////////////////////////////// //кнопка7 //client.println("<br />"); client.println("<br />"); client.println("<a href=\"/?button7on\"\">Turn On LED7</a>"); client.println("<a href=\"/?button7off\"\">Turn Off LED7</a><br />"); //SPACES // client.println("<br />"); //client.println("<br />"); if (readString.indexOf("?button7on") >0){ digitalWrite(led8, HIGH); } if (readString.indexOf("?button7off") >0){ digitalWrite(led8, LOW); }//кнопка6 //кнопка8 //client.println("<br />"); client.println("<br />"); client.println("<a href=\"/?button8on\"\">Turn On LED8</a>"); client.println("<a href=\"/?button8off\"\">Turn Off LED8</a><br />"); //SPACES // client.println("<br />"); //client.println("<br />"); if (readString.indexOf("?button8on") >0){ digitalWrite(led9, HIGH); } if (readString.indexOf("?button8off") >0){ digitalWrite(led9, LOW); } } } else { client.println(F("HTTP/1.0 401 Unauthorized")); client.println(F("WWW-Authenticate: Basic realm=\"Arduino - iT4iT.CLUB\"")); } break; } if (c == '\n') { currentLineIsBlank = true; } else if (c != '\r') { currentLineIsBlank = false; } } } delay(30); readString = ""; client.stop(); } }
Но , с 6 релюшками он работает , а с 8ми нет !
То есть , если убрать кнопку 7,8 всё будет работать , с 8ю скрипт просто не пускает в веб интерфейс и просит бесконечно пароль .
После загрузки скетча , память на ардуинке остается Скетч использует 18136 байт (56%) памяти устройства. Всего доступно 32256 байт.
Глобальные переменные используют 1107 байт (54%) динамической памяти, оставляя 941 байт для локальных переменных. Максимум: 2048 байт.
Можете помочь в этом проекте ?
Всем добра!
Скетч - это правильно.
Но не хватает еще и схемы (с обязательным указанием разводки питания).
Ну и проблему желательно формулировать по шаблону:
1. Что хочется получить.
2. Что происходит на самом деле.
3. Чем 2 отличается от 1.
Обороты типа "добавил пины" или "убрал кнопку" никак не поясняют проблемы, если неизвестно, ради чего все это делается.
1. Что хочется получить.
Хочется чтоб работало .
Всё работает на 6 реле.
С добавление 7 и 8 реле не хочет работать .
Получилось так , 8 релейного модуля и шилда на сайте не было (
2. Что происходит на самом деле.
Код работает на 6 реле , как я добавляю условия в коду к 7 и 8 реле , начинается бесконечное запрашивание пароля и в веб интерфейс не пускает .
Чем 2 отличается от 1.
В первом варианте используется библиотека base64 , он кодирует/раскодирует пароль .
Я также пробовал использовать этот вариант , такой же глюк.
ради чего все это делается.
Я хочу собрать умную розетку на 8 реле с аутентификацией.
В интернете готового варианта не нашёл .
Я бы не горячился, подавая питание на Vin модуля от ардуины. Сколько "пусковой" ток SRD знаете? Догадываетесь, для чего там 817 оптопары на каждую катушку стоят?
Не догадываюсь ((
Я буду использовать 1 и 2 контакт реле .
То есть , если нет сигнала , оно будет замкнуто ,если есть , то разомкнуто .
Не догадываюсь ((
Я буду использовать 1 и 2 контакт реле .
То есть , если нет сигнала , оно будет замкнуто ,если есть , то разомкнуто .
Пятивольтовое srd реле ОДНО потребляет на катушке 90 мА. Это 0,45W в одни руки. А вы там сколькими управлять собрались? Нужно ставить отдельное питание +5v на Vin не меньше 1А, если не хотите проблем c контроллером
Не догадываюсь ((
Я буду использовать 1 и 2 контакт реле .
То есть , если нет сигнала , оно будет замкнуто ,если есть , то разомкнуто .
Пятивольтовое srd реле ОДНО потребляет на катушке 90 мА. Это 0,45W в одни руки. А вы там сколькими управлять собрались? Нужно ставить отдельное питание +5v на Vin не меньше 1А, если не хотите проблем c контроллером
Хорошо , спасибо за совет, буду знать
Но думаю это не решит проблему моего проекта ((
1. Что хочется получить.
Хочется чтоб работало .
Так оно и работает.
Правда, возможно, работает не так, как Вам бы хотелось, но ведь Вы не пишете, как оно должно работать, поэтому помочь Вам невозможно.
Это по поводу скетча.
Теперь по поводу схемы: Вы сами можете разобрать надписи? Лично я - не могу. Единственное, Вы всерьез пытаетесь запитать реле от Ардуины? Возьмите отдельный источник питания не менее 2А.
1. Что хочется получить.
Хочется чтоб работало .
Так оно и работает.
Правда, возможно, работает не так, как Вам бы хотелось, но ведь Вы не пишете, как оно должно работать, поэтому помочь Вам невозможно.
Я же написал что я хочу получить в итоге .
Я хочу собрать умную розетку на 8 реле , чтобы управлять ей через веб интерфейс.
Важно чтоб была аутентификация.
В интернете готового варианта не нашёл .
Я не могу понять в чём проблема . Почему всё работает с 6 кнопками , но не работает с 8.
Теперь по поводу схемы: Вы сами можете разобрать надписи? Лично я - не могу. Единственное, Вы всерьез пытаетесь запитать реле от Ардуины? Возьмите отдельный источник питания не менее 2А.
Ардуино не сможет запитать одно реле на пару секунд ?
Я не собираюсь всё время держать питание на реле , разумеется подавать сразу же на все реле напряжение ...
Мне это нужно для перезагрузки , как я писал вышел , я буду разрывать подачу электричеством подачей сигнала HIGN
Если на данный момент в коду написано это не правильно , позже я поправлю это , главное сейчас мне разобраться с 7 и 8 кнопкой .
Все строки в client.println() заверни в F(), как тут, например
:
client.println(F(
"HTTP/1.0 200 OK"
));
ТС - уберите реле и замените их переменными. Если не пойдёт - тогда реально - проблема.
В скетче и без подключения реле проблема наблюдается. Решение - выше.
ТС - уберите реле и замените их переменными. Если не пойдёт - тогда реально - проблема.
Можете привести пример , я не понял вас ((
Всем спасибо !
Помог ответ пользователя sadman41
Всем
Код без библиотеки base64 (он использует меньше памяти , пароль и логин нужно конвертировать отдельно )
Код с библиотекой base64
Еще раз всем большое спасибо , всё заработало !
ТС , вам дали правильный совет, но вот интересно, вы поняли что в результате сделали ?
Отвяжите питание релейного модуля от стабилизатора контроллера, а то следующая ваша тема будет в разделе "вопросы по железу"
ТС , вам дали правильный совет, но вот интересно, вы поняли что в результате сделали ?
Я все строки в client.println() завернул в F()
client.println(F(
"HTTP/1.0 200 OK"
));
В результате всё заработало как хотелось ....
Отвяжите питание релейного модуля от стабилизатора контроллера, а то следующая ваша тема будет в разделе "вопросы по железу"
Хорошо , сделаю .