//Основной цикл, Веселье начинается
void loop() {
esp_serial.readBytesUntil('\n', buffer, BUFFER_SIZE); //Считываем в буфер все что говорит нам модуль
if(strncmp(buffer, "+IPD,", 5)==0) {
monitor.print("\nBuffer");
// Запрос: +IPD,ch,len:data
sscanf(buffer+5, "%d,%d", &ch_id, &packet_len);
if (packet_len > 0) {
monitor.print("\nlen> 0");
pb = buffer+5;
while(*pb!=':') pb++;
pb++;
//Получили все что получили и парсим на наличие в данных необходимых параметров
//Отслеживаем реле 1 включение
if (strncmp(pb, "GET /?relay1on", 14) == 0) {
//monitor.print(millis()); //Отладочная информация в консоль компьютера
//monitor.print(" : ");
//monitor.println(buffer);
//monitor.print( "get led from ch :" );
//monitor.println(ch_id);
delay(100);
clearSerialBuffer();
digitalWrite(relay1, HIGH);
homepage(ch_id);
}
////Отслеживаем реле 1 выключение
if (strncmp(pb, "GET /?relay1off", 14) == 0) {
//monitor.print(millis());
//monitor.print(" : ");
//monitor.println(buffer);
//monitor.print( "get led from ch :" );
//monitor.println(ch_id);
delay(100);
clearSerialBuffer();
digitalWrite(relay1, LOW);
homepage(ch_id);
}
if (strncmp(pb, "GET /?relay2on", 14) == 0) {
//monitor.print(millis());
//monitor.print(" : ");
//monitor.println(buffer);
//monitor.print( "get led from ch :" );
//monitor.println(ch_id);
delay(100);
clearSerialBuffer();
digitalWrite(relay2, HIGH);
homepage(ch_id);
}
if (strncmp(pb, "GET /?relay2off", 14) == 0) {
//monitor.print(millis());
// monitor.print(" : ");
// monitor.println(buffer);
// monitor.print( "get led from ch :" );
// monitor.println(ch_id);
delay(100);
clearSerialBuffer();
digitalWrite(relay2, LOW);
homepage(ch_id);
}
//Если нет никаких параметров в GET запросе
if (strncmp(pb, "GET / ", 6) == 0) {
// monitor.print(millis());
// monitor.print(" : ");
// monitor.println(buffer);
// monitor.print( "get Status from ch:" );
// monitor.println(ch_id);
delay(100);
clearSerialBuffer();
homepage(ch_id);
}
}
}
clearBuffer();
monitor.print( "\nLoop ");
}
//Основная функция и при вызове выдается страница
void homepage(int ch_id) {
String Header;
//Спрашиваем у датчика температуру как и в остальных примерах
int chk;
chk = DHT.read(DHT11_PIN);
String Hum = String(DHT.humidity,DEC);
String Temp = String(DHT.temperature,DEC);
//Ниже идут знания HTML.
Header = "HTTP/1.1 200 OK\r\n";
Header += "Content-Type: text/html\r\n";
Header += "Connection: close\r\n";
Header += "Refresh: 20\r\n";
String Content;
Content = "<html><header><meta charset=\"utf-8\"><title>Строим сервер</title></header>";
Content += "<center> <p> <h3 style=\"color: #FFFFFF; background: #6699FF\">Мой сервер 1injener.ru</h3></p>";
Content += "<center> <h4 style=\"color: #FFFFFF; background: #6699FF\"><p> Цифровой: Влажность: "+Hum+" | Температура: "+Temp+" </p>";
Content += "<a href=\"/?relay1on\"> <button > Освещение ON </button> </a>";
Content += "<a href=\"/?relay1off\"> <button > Освещение OFF </button> </a> <br/><br/>";
Content += "<a href=\"/?relay2on\"> <button > Что то 2 ON </button> </a>";
Content += "<a href=\"/?relay2off\"> <button> Что то 2 OFF </button> </a> <br/><br/>";
Content += "<hr> <p>Мой дом. для 1injener.ru</p></a>";
Content += "</body></html>";
Header += "Content-Length: ";
Header += (int)(Content.length());
Header += "\r\n\r\n";
//Отправка данных
START_SENT:
esp_serial.print("AT+CIPSEND=");
esp_serial.print(ch_id);
esp_serial.print(",");
esp_serial.println(Header.length()+Content.length());
// monitor.print("AT+CIPSEND=");
// monitor.print(ch_id);
// monitor.print(",");
// monitor.println(Header.length()+Content.length());
delay(10);
if (esp_serial.find(">")) {
esp_serial.print(Header);
esp_serial.print(Content);
delay(10);
}
}
void clearSerialBuffer(void) {
while ( esp_serial.available() > 0 ) {
esp_serial.read();
}
}
void clearBuffer(void) {
for (int i = 0;i<BUFFER_SIZE;i++ ) {
buffer[i]=0;
}
}
//Чтение данных
int readSerial(){
int i = 0;
while(1){
while (esp_serial.available() > 0){
char inChar = esp_serial.read();
if(i > 0){
if (inChar == '\n'){
inputChar[i] = '\0';
esp_serial.flush();
return 0;
//break;
}
}
if(inChar!='\r'){
inputChar[i] = inChar;
i++;
}
}
}
}
//Заветная функция определения ответа модуля ОК
int CheckResponse(){
for(m=0;m<500;m++){
if(esp_serial.read()=='K'){ // Check "OK"
return OK;
}
delay(10);
}
return TIMEOUT;
}