copko

Arduino simple webserver3

Jan 17th, 2018
143
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.48 KB | None | 0 0
  1. #include <SPI.h>
  2. #include <Ethernet.h>
  3. #define LED1 3
  4. #define LED2 5
  5.  
  6. byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED}; //MAC adresa
  7. IPAddress ip(192, 168, 1, 177); //nahradna IP
  8.  
  9. EthernetServer server(80); //vytvorenie objektu pre HTTP(80) server
  10.  
  11. void setup() {
  12.   Serial.begin(9600); //seriova linka pre debugovacie ucely
  13.   pinMode(LED1, OUTPUT);
  14.   pinMode(LED2, OUTPUT);
  15.  
  16.   if(!Ethernet.begin(mac)) //ak sa nepodari nacitat IP cez DHCP
  17.     Ethernet.begin(mac, ip); //nastavime ju na pevno
  18.   server.begin(); //spustime pocuvanie servera na poziadavky klientov
  19.   Serial.print("Server ma IP adresu ");
  20.   Serial.println(Ethernet.localIP());
  21. }
  22.  
  23. void loop(){
  24.   String buffer=""; //buffer pre prijimanie znakov
  25.   char c; //premenna pre nacitanie znaku
  26.   EthernetClient client = server.available(); //ak server detegoval nejake prichadzajuce spojenie, vytvori klienta pre odosielanie dat
  27.  
  28.   while (client.connected()) { //pokial je klient pripojeny
  29.     if(client.available()){ //ak este existuju data poslane od klienta
  30.        c=client.read(); //nacitaj jeden znak z tychto dat
  31.        if(c!='\n') buffer+=c; //ak to nie je znak konca riadku, pridaj ho do buffra
  32.        else { //ak to je znak konca riadku
  33.          if(buffer.indexOf('\r')==0) { //zisti, ci pred tym prijaty znak \r v buffri je na prvom mieste (index 0)
  34.           client.println("HTTP/1.1 200 OK"); //posli HTTP response
  35.           client.println("Content-Type: text/html");
  36.           client.println("Connection: close");
  37.           client.println();
  38.          
  39.           client.println("<!DOCTYPE HTML>");
  40.           client.println("<html>");
  41.           client.println("<head>");
  42.           client.println("<meta charset=\"UTF-8\">");
  43.           client.println("<title>Ovl&aacute;danie LED</title>");
  44.           client.println("</head>");
  45.          
  46.           client.println("<body>");
  47.           client.println(" <form method=\"GET\">");
  48.           client.println("   <label for=\"led1\">LED1:</label>");
  49.           client.println("   <input type=\"number\" name=\"led1\" min=\"0\" max=\"255\" id=\"led1\"><br>");
  50.  
  51.           client.println("   <label for=\"led2\">LED2:</label>");
  52.           client.println("   <input type=\"number\" name=\"led2\" min=\"0\" max=\"255\" id=\"led2\"><br>");
  53.          
  54.           client.println("  <input type=\"Submit\">");
  55.           client.println(" </form>");
  56.  
  57.           client.println("</body>");
  58.           client.println("</html>");
  59.  
  60.           client.stop();
  61.           }
  62.          else {
  63.           if(buffer.startsWith("GET")){
  64.             analogWrite(LED1,getInt(buffer,"led1"));
  65.             analogWrite(LED2,getInt(buffer,"led2"));
  66.             }
  67.          }
  68.          buffer="";
  69.        }
  70.     }
  71.   }
  72. }
  73.  
  74.  
  75. //Vstup    - line: riadok, v ktorom sa nachádza premenná
  76. //Vstuo    - varName: názov premennej (napr. led1)
  77. //Výstup   - celé číslo alebo -1 ak sa nič nenájde
  78.  
  79. int getInt(String line, String varName) {
  80.   int pos = line.indexOf(varName); //zistíme, či sa premenná nachádza v riadku
  81.   if (pos >= 0) { //ak sa tam nachádza, vezmeme to, čo je za názvom premennej (tj. od miesta, kde sa začína názov premenne + dĺžka názvu premennej + ešte znak rovná sa) a uložíme do premennej temp
  82.     String temp= line.substring(pos + varName.length() + 1);
  83.     return temp.toInt(); //vrátime ako celé číslo (funkcia toInt v podstate berie čísla od začiatku daného reťazca a až po prvý nečíselný znak
  84.   }
  85.   else return -1; //ak sa premenná nenájde, vráti sa -1
  86. }
Advertisement
Add Comment
Please, Sign In to add comment