Контроль входов

007_1
Offline
Зарегистрирован: 26.11.2018

Здравствуйте, подскажите пожалуйста как добавить в код:

001 #include <dht11.h>
002 #include <SPI.h>
003 #include <Ethernet.h>
004 #include <SD.h>
005 #define DHT11_PIN 7
006 #define REQ_BUF_SZ 40
007  
008 dht11 DHT;
009 File webFile;
010 char HTTP_req[REQ_BUF_SZ] = {0}; // buffered HTTP request stored as null terminated string
011 char req_index = 0; // index into HTTP_req buffer
012 byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
013 IPAddress ip(192, 168, 1, 181);
014  
015 EthernetServer server(80);
016 bool pin1;
017 bool pin2;
018 bool pin3;
019 bool pin4;
020 int pin5;
021 void setup() {
022   pinMode(2, OUTPUT);
023   pinMode(3, OUTPUT);
024   pinMode(5, OUTPUT);
025   pinMode(6, OUTPUT);
026   pinMode(9, OUTPUT);
027  
028   SD.begin(4);
029   Ethernet.begin(mac, ip);
030   server.begin();
031   pin1 = pin2 = pin3 = pin4 = 0;
032 }
033  
034 void loop() {
035   // listen for incoming clients
036   EthernetClient client = server.available();
037   if (client) {
038  
039     // an http request ends with a blank line
040     boolean currentLineIsBlank = true;
041     while (client.connected()) {
042       if (client.available()) {
043         char c = client.read();
044         if (req_index < (REQ_BUF_SZ - 1)) {
045           HTTP_req[req_index] = c; // save HTTP request character
046           req_index++;
047         }
048         if (c == '\n' && currentLineIsBlank) {
049           if (StrContains(HTTP_req, "GET /")) {
050             if (StrContains(HTTP_req, "/ ")
051                 || StrContains(HTTP_req, "/index.htm")) {
052               sendHtmlFile(client, "index.htm");
053             } else if (StrContains(HTTP_req, "/favicon.ico")) {
054               sendFile(client, "favicon.ico");
055             } else if (StrContains(HTTP_req, "/temp.png")) {
056               sendFile(client, "temp.png");
057             } else if (StrContains(HTTP_req, "/humid.png")) {
058               sendFile(client, "humid.png");
059             } else if (StrContains(HTTP_req, "/flame.png")) {
060               sendFile(client, "flame.png");
061             } else if (StrContains(HTTP_req, "/my.css")) {
062               sendFile(client, "my.css");
063             } else if (StrContains(HTTP_req, "ajax_flame")) {
064               sendBaseAnswer(client);
065               int smoke_gas = 0; //пин на котором подключен MQ-2
066               int sensorReading = analogRead(smoke_gas);
067               int chk;
068               chk = DHT.read(DHT11_PIN);
069  
070               char buff[32];
071               sprintf(buff, "%d:%d:%d:%d:%d:%d:%d:%d:",
072                       sensorReading, DHT.temperature, DHT.humidity,
073                       digitalRead(2), digitalRead(3), digitalRead(5), digitalRead(6),
074                       pin5);
075               client.println(buff);
076             } else if (StrContains(HTTP_req, "setpin?")) {
077               if (StrContains(HTTP_req, "pin=1")) {
078                 pin1 = !pin1;
079                 digitalWrite(2, pin1);
080               } else if (StrContains(HTTP_req, "pin=2")) {
081                 pin2 = !pin2;
082                 digitalWrite(3, pin2);
083               } else if (StrContains(HTTP_req, "pin=3")) {
084                 pin3 = !pin3;
085                 digitalWrite(5, pin3);
086               } else if (StrContains(HTTP_req, "pin=4")) {
087                 pin4 = !pin4;
088                 digitalWrite(6, pin4);
089               } else if (StrContains(HTTP_req, "pin=5")) {
090                 String input = HTTP_req;
091                 int posStart = input.indexOf("value=");
092                 int posEnd = input.indexOf(' ', posStart);
093                 String param = input.substring(posStart + 6, posEnd + 1);
094                 pin5 = param.toInt();
095                 analogWrite(9, pin5);
096               }
097               sendBaseAnswer(client);
098             }
099           }
100           req_index = 0;
101           StrClear(HTTP_req, REQ_BUF_SZ);
102           break;
103         }
104         if (c == '\n') {
105           // you're starting a new line
106           currentLineIsBlank = true;
107         } else if (c != '\r') {
108           // you've gotten a character on the current line
109           currentLineIsBlank = false;
110         }
111       }
112     }
113     // give the web browser time to receive the data
114     delay(1);
115     // close the connection:
116     client.stop();
117   }
118 }
119 bool sendHtmlFile(EthernetClient client, char *fileName) {
120   webFile = SD.open(fileName);
121   sendBaseAnswer(client);
122   return sendFile(client, webFile);
123 }
124 bool sendFile(EthernetClient client, char *fileName) {
125   webFile = SD.open(fileName);
126   sendHttpOkAnswer(client);
127   client.println();
128   return sendFile(client, webFile);
129 }
130 bool sendFile(EthernetClient client, File &webFile) {
131   if (webFile) {
132     while (webFile.available())
133       client.write(webFile.read()); // send web page to client
134     webFile.close();
135     return 1;
136   }
137   return 0;
138 }
139 void sendBaseAnswer(EthernetClient client) {
140   sendHttpOkAnswer(client);
141   client.println(F("Content-Type: text/html"));
142   client.println(F("Connection: close"));
143   client.println();
144 }
145 void sendHttpOkAnswer(EthernetClient client) {
146   client.println(F("HTTP/1.1 200 OK"));
147 }
148  
149 void StrClear(char *str, char length) {
150   for (int i = 0; i < length; i++) {
151     str[i] = 0;
152   }
153 }
154  
155 char StrContains(char *str, char *sfind) {
156   char found = 0;
157   char index = 0;
158   char len;
159   len = strlen(str);
160   if (strlen(sfind) > len) {
161     return 0;
162   }
163   while (index < len) {
164     if (str[index] == sfind[found]) {
165       found++;
166       if (strlen(sfind) == found) {
167         return 1;
168       }
169     }
170     else {
171       found = 0;
172     }
173     index++;
174   }
175   return 0;
176 }

HTML:

<html>

<head>
<meta http-equiv='content-type' content='text/html; charset=UTF-8'>
<link rel="shortcut icon" href="/favicon.ico" type="image/x-icon">
<title>Arduino WEB контроль</title>
<link type="text/css" rel="StyleSheet" href="/my.css" />
<script>
function GetFlameState() {
nocache = "&nocache=" + Math.random() * 1000000;
var request = new XMLHttpRequest();
request.onreadystatechange = function() {
if (this.readyState == 4) {
if (this.status == 200) {
if (this.responseText != null) {
var arrayOfStrings = this.responseText.split(":");

document.getElementById("flame_txt").innerHTML = arrayOfStrings[0];
document.getElementById("temp_txt").innerHTML = arrayOfStrings[1];
document.getElementById("humid_txt").innerHTML = arrayOfStrings[2];
for(var i = 1 ; i < 5 ; i++)
if(arrayOfStrings[2+i] == "1")
document.getElementById("led_"+i).setAttribute("class","button_enabled");
else
document.getElementById("led_"+i).setAttribute("class","button_disabled");
}
}
}
}
request.open("GET", "ajax_flame" + nocache, true);
request.send(null);
setTimeout('GetFlameState()', 1000);
}
function onClick(pin){
var request = new XMLHttpRequest();
request.open("GET", "\setpin?pin=" + pin , false);
request.send(null);
}
function PWM(){
value = document.getElementById("led_PWM").value;
var request = new XMLHttpRequest();
request.open("GET", "\setpin?pin=5?value=" + value, false);
request.send(null);
}
</script>

</head>

<body onload="GetFlameState()">
<div class="form">
<h2>Arduino WEB контроль</h2>
    <hr noshade size="1px" color="white">
    <h3>Метеостанция</h3>
<table align="center">
<tr>
<td><img src='flame.png' /></td>
<td valign="center">Датчик дыма</td>
<td><span id="flame_txt"> 0</span></td>
</tr>

<tr>
<td><img src='temp.png' /></td>
<td valign="center">Температура</td>
<td><span id="temp_txt">0</span> °C</td>
</tr>

<tr>
<td><img src='humid.png' /></td>
<td valign="center">Влажность</td>
<td><span id="humid_txt">0</span> %</td>
</tr>
</table>
<center>
<hr noshade size="1px" color="white">
    <h3>Управление нагрузками</h3>
<button type="button" id="led_1" class="button_disabled" onClick="onClick(1)">Реле №1</button>
<button type="button" id="led_2" class="button_disabled" onClick="onClick(2)">Реле №2</button>
<button type="button" id="led_3" class="button_disabled" onClick="onClick(3)">Реле №3</button>
<button type="button" id="led_4" class="button_disabled" onClick="onClick(4)">Реле №4</button><br>
    <hr noshade size="1px" color="white">
    <h3>Регулировка мощности</h3><input type="range" min="0" max="255" id="led_PWM" step="2.55" oninput="PWM()" value="0" class="rangeP">
<hr noshade size="1px" color="white">
</center>
</div>
</Body>
</html>

так, чтобы контролировать несколько входов и выводить результат на веб-страницу.

Допустим если на входе 10 есть напряжение то на веб-странице одна картинка, если на входе 10 нет напряжения, то другая картинка.

Заранее благодарю за ответы.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Первым делом, обращаются к автору кода, абычна. 

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Умиляет самописная StrContains в век, когда у библиотечной strstr уже седые волосы на мудях.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Вы даже не написали, что эта хрень делает. Нам самим разбираться, догадываться, а потом думать как чего добавить? Не жирно?

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

ЕвгенийП пишет:

Вы даже не написали, что эта хрень делает. Нам самим разбираться, догадываться, а потом думать как чего добавить? Не жирно?

там в тексте есть слово вайт видимо противостояние со шварцем, он жеж просил выпилить его )))

eyescream
Offline
Зарегистрирован: 28.12.2019

А зачем?

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

eyescream пишет:

А зачем?

Тебе-то какая разница? Ты же, вроде, уже перевернул эту страницу.

eyescream
Offline
Зарегистрирован: 28.12.2019

Ворота пишет:

eyescream пишет:

А зачем?

Тебе-то какая разница? Ты же, вроде, уже перевернул эту страницу.

Я хочу помочь и остальным. Мне же помогли, я чувствую в душе благодарность к тем кто помог мне и хочу разделить с ними эту ношу.

007_1
Offline
Зарегистрирован: 26.11.2018

Этот код считывает датчики температуры/влажности и дыма/газа и показывает результаты как веб-страницу через интернет-шилд, ещё добавлены 4 кнопки для управления нагрузками через релейный модуль, хотелось бы добавить на веб-страницу информацию типа включено/выключено в зависимости от того есть напряжение на остальных входах или нет.

Помогите.

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

007_1 пишет:

Помогите.

Помогаем. Надо:

1. Добавить в HTML необходимое кол-во блоков для отображения информации, каждому блоку дать свой уникальный ID;

2. В тексте скрипта в HTML - добавить вывод в эти блоки информации, полученной от ESP;

3. В прошивке для ESP дописать вывод дополнительной информации в ответ на запрос;

4. Протестировать, поправить ошибки, если есть;

5. PROFIT!

007_1
Offline
Зарегистрирован: 26.11.2018

DIYMan спасибо, но можно более развёрнутый ответ соответствующий именно этому коду?

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

007_1 пишет:

DIYMan спасибо, но можно более развёрнутый ответ соответствующий именно этому коду?

В строках прошивки для ESP номер 70 и 71 - расширить буфер, дописать в строку формата новые форматтеры, дописать в параметры вызова sprintf новые данные. Сделайте пока это.

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Не, там суть была «напиши мне код как я хочу»...