Ethernet shield W5100
- Войдите на сайт для отправки комментариев
Всем доброго времени суток!
Закупил стартовый набор 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 кода.