/*
* Создано для сайта 1injener.ru
* Домашний веб сервер на Аrduino. Температура и Реле [Проверенно]
* Про работу с WI-FI модулем можно прочитать на хорошем сайте еsp8266.ru
*/
#include "dht11.h" // Добавляем библиотеку DHT11
dht11 DHT; // Объявление переменной класса dht11
#define DHT11_PIN 4
HardwareSerial & monitor = Serial;
HardwareSerial & esp_serial = Serial1;
// Установка пинов для реле. Предусмотренно на будущее 2 реле, а использовалось только 1.
const int relay1 = 22;
const int relay2 = 23;
//Буфер для передачи данных с сервера в ардуину
#define BUFFER_SIZE 128
char buffer[BUFFER_SIZE];
//Временные переменные для нужд сервера.
int result = 0;
int OK = 1;
int TIMEOUT = 2 ;
int CANCEL = 3;
int NOT_FOUND = 4;
int i;
int m=0;
int lp = 0;
char inputChar[500];
int len = 0;
//Порт для Веб сервера на Ардуино
String port="80";
String cmd;
String myIP;
int currentID;
int ch_id, packet_len;
char *pb;
void(* resetFunc) (void) = 0;
//Установки при старте Ардуины
//Устанавливаются пины для реле как выходы и в выключенное состояние
void setup() {
pinMode(relay1, OUTPUT);
pinMode(relay2, OUTPUT);
digitalWrite(relay1,LOW);
digitalWrite(relay2,LOW);
//Активируем Serial терминал для отображения данных на компьютере (Для проверки)
monitor.begin(115200);
esp_serial.begin(115200); // Так же активируем Serial для Wi-FI модуля ESP8266
monitor.println(F("\nESP8266 WebServer TEST"));
delay(1000);
/* RESET Module */
esp_serial.println("AT+RST"); // Програмный рестарт WI-FI модуля
monitor.print("\nAT+RST");
result = CheckResponse(); // Специальной функцией ниже мы отлавливаем ответ модуля "ОК"
if(result == OK){
Serial.print(" OK");
delay(300);
}
else{
Serial.print(" ERROR");
delay(2000);
resetFunc();
}
//Ниже идут части программы к которым мы будем обращаться из основного цикла.
SET_MODE:
esp_serial.println("AT+CWMODE=1"); // Установка режима клиента, который будет подключаться к роутеру.
// Так же можно подключаться к самому модулю. Но об этом в другой статье.
monitor.print("\nAT+CWMODE=1");
result = CheckResponse(); // ответ модуля "ОК"
if(result == OK){
Serial.print(" OK");
delay(200);
}
else{
Serial.print(" ERROR");
delay(1000);
goto SET_MODE;
}
DISCONNECT_AP:
esp_serial.println("AT+CWQAP"); // Отключение
monitor.print("\nAT+CWQAP");
result = CheckResponse(); // ответ модуля "ОК"
if(result == OK){
Serial.print(" OK");
delay(300);
}
else{
Serial.print(" ERROR");
delay(1000);
goto DISCONNECT_AP;
}
CONNECT_WIFI:
cmd = "AT+CWJAP=\"SSID\",\"ПАРОЛЬ\"";
esp_serial.println(cmd); // Подключение к роутеру. Выше надо прописать ваш SSID wifi точки роутера и пароль
monitor.print("\n"+cmd);
result = CheckResponse(); // ответ модуля "ОК"
if(result == OK){
Serial.print(" OK");
delay(300);
}
else{
Serial.print(" ERROR");
delay(1000);
goto CONNECT_WIFI;
}
SET_MULTIPLE:
esp_serial.println("AT+CIPMUX=1"); // Выбор режима множественных подключений
monitor.print("\nAT+CIPMUX=1");
result = CheckResponse(); // ответ модуля "ОК"
if(result == OK){
Serial.print(" OK");
delay(300);
}
else{
Serial.print(" ERROR");
delay(1000);
goto SET_MULTIPLE;
}
START_SERVER:
cmd = "AT+CIPSERVER=" + String("1") + String(",") + port;
esp_serial.println(cmd); // СТАРТУЕМ!!! Я СКАЗАЛ СТАРУЕЕЕМ!
monitor.print("\n"+cmd);
result = CheckResponse(); // ответ модуля "ОК"
if(result == OK){
Serial.print(" OK");
delay(200);
}
else{
Serial.print(" ERROR");
delay(1000);
}
CHECK_IP:
esp_serial.println("AT+CIFSR"); // Отображаем и проверяем получили ли мы IP адресс от роутера.
monitor.print("\nAT+CIFSR");
readSerial();
monitor.print(inputChar);
readSerial();
monitor.print(inputChar);
readSerial();
monitor.print(inputChar);
for(unsigned char i=0;i<2;i++){
esp_serial.println("AT+CIPCLOSE"); // Закрываем подключение
monitor.print("\nAT+CIPCLOSE");
result = CheckResponse(); // ответ модуля "ОК"
if(result == OK){
Serial.print(" OK");
delay(200);
}
else{
Serial.print(" ERROR");
delay(200);
}
}
}