Weather WebServer
- Войдите на сайт для отправки комментариев
Пнд, 22/02/2016 - 14:43
Здравстввуйте. Помогите пожалуйста. Никак не врубаюсь, как к этому году прикрутить ещё и DS18B20. Хочу чтоб в кваритире данные с DHT11 снимались и на улице DS18B20. И указать ему чтоб тоже с флешки брал картинку для веб страници, как и с дадтчика DHT11. Ах да, в коде был ещё датчик огня, но я вроде код подчистил от него, если что осталось, тоже подскажите пожалуйста.
#include <dht11.h> #include <SPI.h> #include <Ethernet.h> #include <SD.h> #define REQ_BUF_SZ 20 #define DHT11_PIN 7 dht11 DHT; File webFile; char HTTP_req[REQ_BUF_SZ] = {0}; // buffered HTTP request stored as null terminated string char req_index = 0; // index into HTTP_req buffer byte mac[] = { 0x00, 0xAA, 0xBB, 0xCC, 0xDA, 0x02 }; IPAddress ip(192, 168, 1, 135); EthernetServer server(80); void setup() { Ethernet.begin(mac, ip); server.begin(); SD.begin(4); } void loop() { // listen for incoming clients EthernetClient client = server.available(); if (client) { // an http request ends with a blank line boolean currentLineIsBlank = true; while (client.connected()) { if (client.available()) { char c = client.read(); if (req_index < (REQ_BUF_SZ - 1)) { HTTP_req[req_index] = c; // save HTTP request character req_index++; } if (c == '\n' && currentLineIsBlank) { if (StrContains(HTTP_req, "GET / ")) { // 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("<link rel='shortcut icon' href='favicon.ico' type='image/x-icon'>"); client.println("<meta http-equiv='refresh' content='10'/>"); client.println("<meta http-equiv='content-type' content='text/html; charset=UTF-8'>"); client.println("<title>Данные с датчиков</title>"); int chk; chk = DHT.read(DHT11_PIN); client.print("<img src='temp.png' />Температура = "); client.print(DHT.temperature); client.print(" °C<br/>"); client.print("<img src='humid.png /'>Влажность = "); client.print(DHT.humidity); client.print(" %"); client.print("</br>"); client.print("</br>"); client.print("<form action='http://tehnopage.ru 'target='_blank'><button type='submit' >Tehnopage.ru</button></form>"); client.println("</html>"); } else if (StrContains(HTTP_req, "GET /temp.png")) { webFile = SD.open("temp.png"); if (webFile) { client.println("HTTP/1.1 200 OK"); client.println(); } } else if (StrContains(HTTP_req, "GET /humid.png")) { webFile = SD.open("humid.png"); if (webFile) { client.println("HTTP/1.1 200 OK"); client.println(); } } else if (StrContains(HTTP_req, "GET /flame.png")) { webFile = SD.open("flame.png"); if (webFile) { client.println("HTTP/1.1 200 OK"); client.println(); } } else if (StrContains(HTTP_req, "GET /favicon.ico")) { webFile = SD.open("favicon.ico"); if (webFile) { client.println("HTTP/1.1 200 OK"); client.println(); } } if (webFile) { while (webFile.available()) { client.write(webFile.read()); // send web page to client } webFile.close(); } req_index = 0; StrClear(HTTP_req, REQ_BUF_SZ); 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(); } } void StrClear(char *str, char length) { for (int i = 0; i < length; i++) { str[i] = 0; } } char StrContains(char *str, char *sfind) { char found = 0; char index = 0; char len; len = strlen(str); if (strlen(sfind) > len) { return 0; } while (index < len) { if (str[index] == sfind[found]) { found++; if (strlen(sfind) == found) { return 1; } } else { found = 0; } index++; } return 0; }
Если ответите, что означает строка:
<link rel='shortcut icon' href='favicon.ico' type='image/x-icon'>
А также, что делает кусок кода:
if
(str[index] == sfind[found]) {
142
found++;
143
if
(strlen(sfind) == found) {
144
return
1;
То можно продолжить разговор ;)
З.Ы. А вообще, интересно - где вы берёте такие шедевры? У меня от двух функций StrClear и StrContains уже мурашки по коже, так и до инфаркта недалеко :) особенно умиляет - в цикле while каждый раз делать strlen, зашибись :) Этот код можно сделать как минимум раз в десять быстрее работающим. Но это не суть, раз вас всё устраивает.
Хотя всё равно было бы интересно услышать ответы на поставленные вопросы ;)
Нет, конечно же не устраивает ) Я вообще с программированием почти не дружу )) Я даже затрудняюсь ответить на ваши вопросы... ) С радостью бы был рад помощи по оптимизации )
Если ответите, что означает строка:
<link rel='shortcut icon' href='favicon.ico' type='image/x-icon'>
А также, что делает кусок кода:
if
(str[index] == sfind[found]) {
142
found++;
143
if
(strlen(sfind) == found) {
144
return
1;
То можно продолжить разговор ;)
З.Ы. А вообще, интересно - где вы берёте такие шедевры? У меня от двух функций StrClear и StrContains уже мурашки по коже, так и до инфаркта недалеко :) особенно умиляет - в цикле while каждый раз делать strlen, зашибись :) Этот код можно сделать как минимум раз в десять быстрее работающим. Но это не суть, раз вас всё устраивает.
Хотя всё равно было бы интересно услышать ответы на поставленные вопросы ;)
Можно ещё с вами как-то связаться помимо этого форума ?
Можно ещё с вами как-то связаться помимо этого форума ?
https://www.forumhouse.ru/threads/341712 - в этой теме сижу практически каждый день.
Можно ещё с вами как-то связаться помимо этого форума ?
https://www.forumhouse.ru/threads/341712 - в этой теме сижу практически каждый день.
Ну мне бы что-то вроде вк, месенджеров )
Ну мне бы что-то вроде вк, месенджеров )
В вк не сижу, сорри. Так что единственный критичный по времени вариант - указанная выше ссылка, там бываю практически каждый день, там же сообщаю об обновлениях, принимаю пожелания и пр.
Мне нужна помощь, указанная в начале этого поста. ЧТоб прикрутить датчик. И к тому же, может поможете оптимизировать код.
Есть у меня код, который опрашивает датчик DS18B20, но: я использую один датчик на одном пине, чтобы не парится с адресами, поэтому этот код - специфичен для моего проекта. Если вам он чем-то поможет, ниже - класс опроса датчика.
файл DS18B20Query.h:
Файл DS18B20Query.cpp:
Использование:
Но, повторюсь - это код, специфичный для моего проекта.
Мне нужна помощь, указанная в начале этого поста. ЧТоб прикрутить датчик. И к тому же, может поможете оптимизировать код.
Что касается оптимизации кода - это работа вдумчивая, и у меня на неё сейчас просто нет времени, да и желания, так что - извините.
Спасибо за код. Мне как раз нужен всего один датчик уличный.