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]) {142found++;143if(strlen(sfind) == found) {144return1;То можно продолжить разговор ;)
З.Ы. А вообще, интересно - где вы берёте такие шедевры? У меня от двух функций StrClear и StrContains уже мурашки по коже, так и до инфаркта недалеко :) особенно умиляет - в цикле while каждый раз делать strlen, зашибись :) Этот код можно сделать как минимум раз в десять быстрее работающим. Но это не суть, раз вас всё устраивает.
Хотя всё равно было бы интересно услышать ответы на поставленные вопросы ;)
Нет, конечно же не устраивает ) Я вообще с программированием почти не дружу )) Я даже затрудняюсь ответить на ваши вопросы... ) С радостью бы был рад помощи по оптимизации )
Если ответите, что означает строка:
<link rel='shortcut icon' href='favicon.ico' type='image/x-icon'>А также, что делает кусок кода:
if(str[index] == sfind[found]) {142found++;143if(strlen(sfind) == found) {144return1;То можно продолжить разговор ;)
З.Ы. А вообще, интересно - где вы берёте такие шедевры? У меня от двух функций StrClear и StrContains уже мурашки по коже, так и до инфаркта недалеко :) особенно умиляет - в цикле while каждый раз делать strlen, зашибись :) Этот код можно сделать как минимум раз в десять быстрее работающим. Но это не суть, раз вас всё устраивает.
Хотя всё равно было бы интересно услышать ответы на поставленные вопросы ;)
Можно ещё с вами как-то связаться помимо этого форума ?
Можно ещё с вами как-то связаться помимо этого форума ?
https://www.forumhouse.ru/threads/341712 - в этой теме сижу практически каждый день.
Можно ещё с вами как-то связаться помимо этого форума ?
https://www.forumhouse.ru/threads/341712 - в этой теме сижу практически каждый день.
Ну мне бы что-то вроде вк, месенджеров )
Ну мне бы что-то вроде вк, месенджеров )
В вк не сижу, сорри. Так что единственный критичный по времени вариант - указанная выше ссылка, там бываю практически каждый день, там же сообщаю об обновлениях, принимаю пожелания и пр.
Мне нужна помощь, указанная в начале этого поста. ЧТоб прикрутить датчик. И к тому же, может поможете оптимизировать код.
Есть у меня код, который опрашивает датчик DS18B20, но: я использую один датчик на одном пине, чтобы не парится с адресами, поэтому этот код - специфичен для моего проекта. Если вам он чем-то поможет, ниже - класс опроса датчика.
файл DS18B20Query.h:
#ifndef _DS18B20_QUERY_H #define _DS18B20_QUERY_H #include <Arduino.h> #define NO_TEMPERATURE_DATA -128 // спецзначение - нет датчика на линии typedef struct { bool Negative; int Whole; int Fract; } DS18B20Temperature; class DS18B20Support { private: uint8_t pin; public: DS18B20Support() : pin(0) {}; void begin(uint8_t _pin) {pin = _pin;} bool readTemperature(DS18B20Temperature* result); }; #endifФайл DS18B20Query.cpp:
#include "DS18B20Query.h" #include <OneWire.h> bool DS18B20Support::readTemperature(DS18B20Temperature* result) { result->Whole = NO_TEMPERATURE_DATA; // нет данных с датчика result->Fract = 0; if(!pin) return false; OneWire ow(pin); if(!ow.reset()) // нет датчика return false; byte data[9]; ow.write(0xCC); // пофиг на адреса ow.write(0x44); // запускаем преобразование ow.reset(); ow.write(0xCC); // пофиг на адреса ow.write(0xBE); // читаем scratchpad датчика на пине for(uint8_t i=0;i<9;i++) data[i] = ow.read(); if ( OneWire::crc8( data, 8) != data[8]) // проверяем контрольную сумму return false; int loByte = data[0]; int hiByte = data[1]; int temp = (hiByte << 8) + loByte; result->Negative = (temp & 0x8000); if(result->Negative) temp = (temp ^ 0xFFFF) + 1; int tc_100 = (6 * temp) + temp/4; result->Whole = tc_100/100; result->Fract = tc_100 % 100; return true; }Использование:
DS18B20Support sensor; sensor.begin(10); // на пине 10 повешен датчик DS18B20 DS18B20Temperature temp; if(sensor.readTemperature(&temp)) { Serial.print("Current temp is: "); if(temp.Negative) Serial.print("-"); Serial.print(temp.Whole); Serial.print(","); Serial.println(temp.Fract); }Но, повторюсь - это код, специфичный для моего проекта.
Мне нужна помощь, указанная в начале этого поста. ЧТоб прикрутить датчик. И к тому же, может поможете оптимизировать код.
Что касается оптимизации кода - это работа вдумчивая, и у меня на неё сейчас просто нет времени, да и желания, так что - извините.
Спасибо за код. Мне как раз нужен всего один датчик уличный.