Авторизация на web-сервере
- Войдите на сайт для отправки комментариев
Вс, 01/11/2020 - 20:43
Здравствуйте, подскажите пожалуйста как добавить авторизацию на web-сервере:
#include <dht11.h> #include <SPI.h> #include <Ethernet.h> #include <SD.h> #define DHT11_PIN 7 #define REQ_BUF_SZ 40 dht11 DHT; File webFile; char HTTP_req[REQ_BUF_SZ] = {0}; // buffered HTTP request stored as null terminated string char req_index = 0; // index into HTTP_req buffer byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED}; IPAddress ip(192, 168, 1, 10); EthernetServer server(80); bool pin1; bool pin2; bool pin3; bool pin4; int pin5; //int button = 8; // объявляем геркон на вход дверь void setup() { digitalWrite(2, HIGH); // Подать нулевое напряжение на пин 2 digitalWrite(3, HIGH); // Подать нулевое напряжение на пин 3 digitalWrite(5, HIGH); // Подать нулевое напряжение на пин 5 digitalWrite(6, HIGH); // Подать нулевое напряжение на пин 6 pinMode(2, OUTPUT); // Реле1 pinMode(3, OUTPUT); // Реле2 pinMode(5, OUTPUT); // Реле3 pinMode(6, OUTPUT); // Реле4 pinMode(9, OUTPUT); // ШИМ pinMode(8, INPUT); // Геркон слушает вход SD.begin(4); Ethernet.begin(mac, ip); server.begin(); pin1 = pin2 = pin3 = pin4 = 0; } void loop() { // listen for incoming clients /слушать входящих клиентов EthernetClient client = server.available(); if (client) { // an http request ends with a blank line /HTTP-запрос заканчивается пустой строкой boolean currentLineIsBlank = true; while (client.connected()) { // if (client.available()) { char c = client.read(); if (req_index < (REQ_BUF_SZ - 1)) { HTTP_req[req_index] = c; // save HTTP request character /сохранить символ HTTP-запроса req_index++; } if (c == '\n' && currentLineIsBlank) { if (StrContains(HTTP_req, "GET /")) { if (StrContains(HTTP_req, "/ ") || StrContains(HTTP_req, "/index.htm")) { sendHtmlFile(client, "index.htm"); } else if (StrContains(HTTP_req, "/favicon.ico")) { sendFile(client, "favicon.ico"); } else if (StrContains(HTTP_req, "/temp.png")) { sendFile(client, "temp.png"); } else if (StrContains(HTTP_req, "/humid.png")) { sendFile(client, "humid.png"); } else if (StrContains(HTTP_req, "/flame.png")) { sendFile(client, "flame.png"); } else if (StrContains(HTTP_req, "/my.css")) { sendFile(client, "my.css"); } else if (StrContains(HTTP_req, "ajax_flame")) { sendBaseAnswer(client); int smoke_gas = 0; //пин на котором подключен MQ-2 int sensorReading = analogRead(smoke_gas); int chk; chk = DHT.read(DHT11_PIN); char buff[32]; sprintf(buff, "%d:%d:%d:%d:%d:%d:%d:%d:", sensorReading, DHT.temperature, DHT.humidity, digitalRead(2), digitalRead(3), digitalRead(5), digitalRead(6), pin5); client.println(buff); } else if (StrContains(HTTP_req, "setpin?")) { if (StrContains(HTTP_req, "pin=1")) { pin1 = !pin1; digitalWrite(2, pin1); // Реле1 } else if (StrContains(HTTP_req, "pin=2")) { pin2 = !pin2; digitalWrite(3, pin2); // Реле2 } else if (StrContains(HTTP_req, "pin=3")) { pin3 = !pin3; digitalWrite(5, pin3); // Реле3 } else if (StrContains(HTTP_req, "pin=4")) { pin4 = !pin4; digitalWrite(6, pin4); // Реле4 } else if (StrContains(HTTP_req, "pin=5")) { String input = HTTP_req; int posStart = input.indexOf("value="); int posEnd = input.indexOf(' ', posStart); String param = input.substring(posStart + 6, posEnd + 1); pin5 = param.toInt(); analogWrite(9, pin5=255-pin5); //для изменения стороны ползунка место pin5 поставил pin5=255-pin5 } sendBaseAnswer(client); } } req_index = 0; StrClear(HTTP_req, REQ_BUF_SZ); break; } if (c == '\n') { // you're starting a new line /вы начинаете новую линию currentLineIsBlank = true; } else if (c != '\r') { // you've gotten a character on the current line /у вас есть символ в текущей строке currentLineIsBlank = false; } } } // give the web browser time to receive the data /дайте браузеру время получить данные delay(1); // close the connection: /закрыть соединение client.stop(); } } bool sendHtmlFile(EthernetClient client, char *fileName) { webFile = SD.open(fileName); sendBaseAnswer(client); return sendFile(client, webFile); } bool sendFile(EthernetClient client, char *fileName) { webFile = SD.open(fileName); sendHttpOkAnswer(client); client.println(); return sendFile(client, webFile); } bool sendFile(EthernetClient client, File &webFile) { if (webFile) { while (webFile.available()) client.write(webFile.read()); // send web page to client /отправить веб-страницу клиенту webFile.close(); return 1; } return 0; } void sendBaseAnswer(EthernetClient client) { sendHttpOkAnswer(client); client.println(F("Content-Type: text/html")); client.println(F("Connection: close")); client.println(); } void sendHttpOkAnswer(EthernetClient client) { client.println(F("HTTP/1.1 200 OK")); } void StrClear(char *str, char length) { for (int i = 0; i < length; i++) { str[i] = 0; } } char StrContains(char *str, char *sfind) { char found = 0; char index = 0; char len; len = strlen(str); if (strlen(sfind) > len) { return 0; } while (index < len) { if (str[index] == sfind[found]) { found++; if (strlen(sfind) == found) { return 1; } } else { found = 0; } index++; } //управление реле 2 с пина 8 //если пин 8 на Graur - реле2 выключено, если на +5v - реле2 включено { if (digitalRead(8) == LOW) { // LOW проверка входа геркона digitalWrite(3, HIGH); // включаем светодиод на пине 9 при открытие двери } else if (digitalRead(8) == HIGH) { // HIGH проверка входа кнопки digitalWrite(3, LOW); // выключаем светодиод на пине 9 при закрытие двери } } //конец управленя реле 2 с пина 8 return 0; }
Создать форму с полями ввода (логин/пароль) и кнопкой, а потом по нажатию кнопки отправить данные на сервер, проверить совпадают ли они с нужными и авторизовать?
Да было бы всё просто, только я новичёк совсем в Arduino, не получается прикрутить даже это: https://it4it.club/topic/13-%D0%B0%D0%B2%D1%82%D0%BE%D1%80%D0%B8%D0%B7%D...
Тогда начинай с мигания диодом, потом тоже самое без делей и дальше. Через год, два и до авторизации дойдёшь.
Спасибо, "помог"...
Ну а что ты хотел? Ты же элементарного не понимаешь. Как объяснить то, чего ты не понимаешь (что такое post-запрос, к примеру)?) Если есть желание научиться - то научишься, подсказками поможем (учиться сам должен). Ну а на нет и ... сам понимаешь.
Если надо вот прям быстро - обратись в платный раздел.