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 кода.