Ethernet shield W5100

Нет ответов
chzhvdns
Offline
Зарегистрирован: 18.03.2016

Всем доброго времени суток!

Закупил стартовый набор arduino еще в летом в прошлом году, после докупал некоторые дополнительные модули.

Но время ей заняться получилось только на январских праздниках и далее по несколько часов в день.

Собрал на меге используя шилд w5100, кусок умной дачи/метеостанцию. В эти выходные отвезу на дачу в реальные условия, фото если интересно тоже будут.

Код собирал из разных примеров.

Мерит температуру: дом, котел, печь, улице, напряжение до стабилизатора и после, потребляемый ток  и т.д.

Все данные выводятся на LCD экран с задержкой 2 сек.

Раз в 5 мин данные со всех датчиков сохраняются в SD в текстовый файл. Наименование файла по дате.

Данные раз в час забираю с SD  сервером (винда) используя wget — консольная утилита для скачивания файлов/сайтов

Далее данные отравляются на FTP на бесплатном хостинге пример сегодня http://j91664m0.bget.ru/photos/arduino/170217.TXT

На нем позже буду строить графики и т.д.

Код собирал из разных примеров.

Вопрос:

Когда использую такой кусок, то данные с SD копируются нормально и их можно посмотреть в браузере

 

 

//Ethernet

  char clientline[BUFSIZ];

  char *filename;

  int index = 0;

  EthernetClient client = server.available();

    if (client) {

    // an http request ends with a blank line

    boolean current_line_is_blank = true;

    // reset the input buffer

    index = 0;

      while (client.connected()) {

        if (client.available()) {

          char c = client.read();

        // Сбросить соединение, если пришел непонятный символ от клиента.

        //Например, наблюдались зависания от браузера

        // Safary (IPad 2), который посылал "непонятные" символы

        if ( c==0x0A || c==0x0D ) goto aa;

        if ( c<0x20 || c>0x7E ) break;

   aa:

      // Если символ от клиента правильный, записываем его в буфер

       // Если идет чтение не новой строки, то продолжаем ее символы записывать в буфер.

        if (c != '\n' && c != '\r') {

          clientline[index] = c;

          index++;

          // Идем на продолжение считывать новый символ.

          continue;

        }

   // Заканчиваем строку символом 0, если следующая строка новая (получили  \n или \r )

        clientline[index] = 0;

        filename = 0;

        // Распечатываем прочитанную строку.

        Serial.println(clientline);

        // Look for substring such as a request to get the root file

        if (strstr(clientline, "GET / ") != 0) {

          filename = rootFileName;

        }

        if (strstr(clientline, "GET /") != 0) {

          // this time no space after the /, so a sub-file

          if (!filename) filename = clientline + 5; // look after the "GET /" (5 chars)

          // a little trick, look for the " HTTP/1.1" string and

          // turn the first character of the substring into a 0 to clear it out.

          (strstr(clientline, " HTTP"))[0] = 0;

          // print the file we want

          Serial.println(filename);

         myFile = SD.open(filename);

          if (!myFile ) {

            client.println("HTTP/1.1 404 Not Found");

            client.println("Content-Type: text/html");

            client.println();

            client.println("<h2>File Not Found!</h2>");

            break;

          }

       Serial.println("Opened!");

           client.println("HTTP/1.1 200 OK");

           if (strstr(filename, ".htm") != 0)

             client.println("Content-Type: text/html");

         else if (strstr(filename, ".css") != 0)

             client.println("Content-Type: text/css");

         else if (strstr(filename, ".png") != 0)

             client.println("Content-Type: image/png");

          else if (strstr(filename, ".jpg") != 0)

             client.println("Content-Type: image/jpeg");

         else if (strstr(filename, ".gif") != 0)

             client.println("Content-Type: image/gif");

         else if (strstr(filename, ".3gp") != 0)

             client.println("Content-Type: video/mpeg");

         else if (strstr(filename, ".pdf") != 0)

             client.println("Content-Type: application/pdf");

         else if (strstr(filename, ".js") != 0)

             client.println("Content-Type: application/x-javascript");

         else if (strstr(filename, ".xml") != 0)

             client.println("Content-Type: application/xml");

         else

             client.println("Content-Type: text");

          client.println();

      

  byte cB[64];

  int cC=0;

    while (myFile.available())

       {

         cB[cC]=myFile.read();

         cC++;

       if(cC > 63)

        {

         client.write(cB,64);

        cC=0;

        }

       }

      if(cC > 0) client.write(cB,cC);

       myFile.close();

        } else {

          // everything else is a 404

          client.println("HTTP/1.1 404 Not Found");

          client.println("Content-Type: text/html");

          client.println();

          client.println("<h2>File Not Found!</h2>");

           }

        break;

      }

    }

    // give the web browser time to receive the data

    delay(100);

    client.stop();

  }

 

 

Когда такой то есть возможность смотреть данные на веб страничке в реальном режиме, но нет возможности обратиться к SD на которой лежит архив

//Ethernet

/*

 EthernetClient client = server.available();

 if (client) {

    boolean currentLineIsBlank = true;

    while (client.connected()) {

      if (client.available()) {

        char c = client.read();

       if (c == '\n' && currentLineIsBlank) {

          // send a standard http response header

          client.println("HTTP/1.1 200 OK");

          client.println("Connection: close");

         

          client.println();

          client.println("<!DOCTYPE HTML>");

          client.println("<html>");

          client.println("<meta http-equiv='refresh' content='5'/>");

          client.println("<meta http-equiv='content-type' content='text/html; charset=UTF-8'>");

          client.println("<title>ARDUINO</title>");





          client.print("Время = ");

          client.print(time.gettime("d-m-y, H:i:s"));

          client.println("<br />");



          client.print("Температура = ");

          client.print(t1);

          client.print(" °C<br/>");

         

          client.print("Влажность = ");

          client.print(h1);

          client.print(" %");

          client.print("</br>");

          client.print("</br>");

          client.print("<form action=' http://j91664m0.bget.ru'_blank'><button type='submit' >ЧЖВ.РФ</button></form>");

          

          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();
  }

*/

как подружить 2 кода.