Авторизация на web-сервере

007_1
Offline
Зарегистрирован: 26.11.2018

Здравствуйте, подскажите пожалуйста как добавить авторизацию на 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;
}

 

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Создать форму с полями ввода (логин/пароль) и кнопкой, а потом по нажатию кнопки отправить данные на сервер, проверить совпадают ли они с нужными и авторизовать?

007_1
Offline
Зарегистрирован: 26.11.2018

Да было бы всё просто, только я новичёк совсем в Arduino, не получается прикрутить даже это: https://it4it.club/topic/13-%D0%B0%D0%B2%D1%82%D0%BE%D1%80%D0%B8%D0%B7%D...

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Тогда начинай с мигания диодом, потом тоже самое без делей и дальше. Через год, два и до авторизации дойдёшь. 

007_1
Offline
Зарегистрирован: 26.11.2018

Спасибо, "помог"...

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Ну а что ты хотел? Ты же элементарного не понимаешь. Как объяснить то, чего ты не понимаешь (что такое post-запрос, к примеру)?) Если есть желание научиться - то научишься, подсказками поможем  (учиться сам должен). Ну а на нет и ... сам понимаешь. 
Если надо вот прям быстро - обратись в платный раздел.