Контроль входов
- Войдите на сайт для отправки комментариев
Втр, 31/12/2019 - 07:28
Здравствуйте, подскажите пожалуйста как добавить в код:
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 нет напряжения, то другая картинка.
Заранее благодарю за ответы.
Первым делом, обращаются к автору кода, абычна.
Умиляет самописная StrContains в век, когда у библиотечной strstr уже седые волосы на мудях.
Вы даже не написали, что эта хрень делает. Нам самим разбираться, догадываться, а потом думать как чего добавить? Не жирно?
Вы даже не написали, что эта хрень делает. Нам самим разбираться, догадываться, а потом думать как чего добавить? Не жирно?
там в тексте есть слово вайт видимо противостояние со шварцем, он жеж просил выпилить его )))
А зачем?
А зачем?
Тебе-то какая разница? Ты же, вроде, уже перевернул эту страницу.
А зачем?
Тебе-то какая разница? Ты же, вроде, уже перевернул эту страницу.
Я хочу помочь и остальным. Мне же помогли, я чувствую в душе благодарность к тем кто помог мне и хочу разделить с ними эту ношу.
Этот код считывает датчики температуры/влажности и дыма/газа и показывает результаты как веб-страницу через интернет-шилд, ещё добавлены 4 кнопки для управления нагрузками через релейный модуль, хотелось бы добавить на веб-страницу информацию типа включено/выключено в зависимости от того есть напряжение на остальных входах или нет.
Помогите.
Помогите.
Помогаем. Надо:
1. Добавить в HTML необходимое кол-во блоков для отображения информации, каждому блоку дать свой уникальный ID;
2. В тексте скрипта в HTML - добавить вывод в эти блоки информации, полученной от ESP;
3. В прошивке для ESP дописать вывод дополнительной информации в ответ на запрос;
4. Протестировать, поправить ошибки, если есть;
5. PROFIT!
DIYMan спасибо, но можно более развёрнутый ответ соответствующий именно этому коду?
DIYMan спасибо, но можно более развёрнутый ответ соответствующий именно этому коду?
В строках прошивки для ESP номер 70 и 71 - расширить буфер, дописать в строку формата новые форматтеры, дописать в параметры вызова sprintf новые данные. Сделайте пока это.
Не, там суть была «напиши мне код как я хочу»...