- Web - server на Arduino mega с простой аутентификацией

Web - server на Arduino mega с простой аутентификацией, использующей POST запрос
Практика для студентов. Мясищев А.А.

    Здесь используется среда программирования Arduino IDE ver. 1.8.4 и библиотека для контроллера ethernet enc28j60 UIPEthernet
Фото сервера на Arduino mega

Интерфейс управления сервером на Arduino mega

Подключение модуля enc28j60 к Arduino mega


Коды управления светодиодами:

Включить красный  - 11361
Выключить красный - 11360

Включить зеленый  - 11381
Выключить зеленый - 11380

Включить синий  - 11401
Выключить синий - 11400

Программа web-сервера на Arduino mega с контроллеров ethernet enc28j60
#include <UIPEthernet.h>
#include <OneWire.h>
#include <stdio.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 2
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
#define bufferMax 128
// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:
byte mac[] = {
  0xDE, 0xAD, 0xBE, 0xEF, 0x11, 0xED
};
IPAddress ip(192, 168, 1, 18);
char post;
char buf[30];
// Initialize the Ethernet server library
// with the IP address and port you want to use
// (port 80 is default for HTTP):
EthernetServer server(81);

void setup() {
  sensors.begin(); 
  // Open serial communications and wait for port to open:
  Serial.begin(9600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }
pinMode(3, OUTPUT);   // 13-й вывод определен как выход для светодиода
pinMode(5, OUTPUT);   // 5-й вывод определен как выход
pinMode(7, OUTPUT);   // 7-й вывод определен как выход

  // start the Ethernet connection and the server:
  Ethernet.begin(mac, ip);
  server.begin();
  Serial.print("server is at ");
  Serial.println(Ethernet.localIP());
}
void loop() {
  // listen for incoming clients
  EthernetClient client = server.available();
  if (client) {   
    Serial.println("new client");
    // an http request ends with a blank line
    boolean currentLineIsBlank = true;
    String buffer = String("");
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        Serial.write(c);
        // if you've gotten to the end of the line (received a newline
        // character) and the line is blank, the http request has ended,
        // so you can send a reply
        if (c == '\n' && currentLineIsBlank) {
          
 while(client.available()) {      //Обработка запроса POST(находится после пустой строки заголовка)
            post = client.read();  
            if (buffer.length() <= bufferMax) {
          buffer += post;
        } 
     }
if(buffer.indexOf("ron=11361") >= 0) {digitalWrite(3, HIGH);}
if(buffer.indexOf("roff=11360") >= 0) {digitalWrite(3, LOW);}

if(buffer.indexOf("gon=11381") >= 0) {digitalWrite(5, HIGH);}
if(buffer.indexOf("goff=11380") >= 0) {digitalWrite(5, LOW);}

if(buffer.indexOf("bon=11401") >= 0) {digitalWrite(7, HIGH);}
if(buffer.indexOf("boff=11400") >= 0) {digitalWrite(7, LOW);}     
          // send a standard http response header
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.print("Connection: close\r\n\r\n");  // the connection will be closed after completion of the response
          client.println("<!DOCTYPE HTML>");
 client.println("<html lang=\"ru\">");
          client.println("<head>");
client.println("<meta charset='Windows-1251'>");
          client.println("<title>Arduino mega</title>"); 
          client.println("</head>");
          client.println("<body>");
          client.println("<font size=5 color=blue> Web-server на Arduino MEGA 1280 <br>и контроллере enc28j60 <br>с аутентификацией без защиты</font>");
          client.println("<br>");
          client.println("<hr>");     

client.println("<FORM action=\"\" method=\"POST\">");
     client.println("<label for='pro'><b>Включить красный светодиод:</b></label><br>");
     client.println("<input type='password' name='ron'  id='pro'><br>");
     client.println("<label for='prf'><b>Выключить красный светодиод:</b></label><br>");
     client.println("<input type='password' name='roff'  id='prf'><br><br>"); 
       
     client.println("<label for='pgo'><b>Включить зеленый светодиод:</b></label><br>");
     client.println("<input type='password' name='gon'  id='pgo'><br>");
     client.println("<label for='pgf'><b>Выключить зеленый светодиод:</b></label><br>");
     client.println("<input type='password' name='goff'  id='pgf'><br><br>");  

     client.println("<label for='pbo'><b>Включить синий светодиод:</b></label><br>");
     client.println("<input type='password' name='bon'  id='pbo'><br>");
     client.println("<label for='pbf'><b>Выключить синий светодиод:</b></label><br>");
     client.println("<input type='password' name='boff'  id='pbf'><br><br>");  
           
     client.println("<INPUT type=\"submit\" value=\"Ввести\">");
     client.println("</FORM>");

client.println("<br>");
 
       sensors.requestTemperatures(); 
       dtostrf(sensors.getTempCByIndex(0),7,2,buf);
     client.print("<font size=4 color=broun>Температура "); 
     client.print(buf); 
     client.println(" градусов C</font><br><br>");
        if (digitalRead(3)){ client.println("<font size=4 color=red>Красный светодиод ВКЛЮЧЕН</font><br>"); }
             else{ client.println("<font size=4 color=red>Красный светодиод ВЫКЛЮЧЕН</font><br>"); }
        if (digitalRead(5)){ client.println("<font size=4 color=green>Зеленый светодиод ВКЛЮЧЕН</font><br>");}
             else{ client.println("<font size=4 color=green>Зеленый светодиод ВЫКЛЮЧЕН</font><br>"); }
        if (digitalRead(7)){client.println("<font size=4 color=blue>Синий светодиод  ВКЛЮЧЕН</font><br>"); }
             else{ client.println("<font size=4 color=blue>Синий светодиод  ВЫКЛЮЧЕН</font><br>"); }
   client.println("<hr>");
    
      client.print("Свободно памяти: ");
      client.println(freeRam()); 

 Serial.println(buffer);  // Распечатка POST запроса

        client.println("</body>"); 
          client.println("</html>");

          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();
    Serial.println();
    Serial.println("client disconnected");   
  }
}
int freeRam () {
 extern int __heap_start, *__brkval;  int v;  
 return (int) &v - (__brkval == 0 ? (int) &__heap_start : (int) __brkval); }