// подключяем библиотеку для работы с Wi-Fi server
#include <WiFi.h>
#include <Wire.h>
//#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
// указываем пины, к которым подключены светодиоды
// 1–5, 12–19, 21–23, 25–27, 32 и 33
#define SCREEN_WIDTH 128 // OLED width, in pixels
#define SCREEN_HEIGHT 64 // OLED height, in pixels
// create an OLED display object connected to I2C
Adafruit_SSD1306 oled(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
#define led_street_1 15 // прожектор на парковку
#define led_street_2 2 // прожектор на поляну
int sensor[4] = {13, 23, 19, 18};
String sensor_name[4] = {"Окно 1", "Окно 2", "Окно 3 ", "Окно 4"};
// вводим имя и пароль точки доступа
//const char* ssid = "Xiaomi";
const char* ssid = "Redmi";
const char* password = "aNNa2005g";
// инициализируем сервер на 80 порте
WiFiServer server(80);
// создаем буфер и счетчик для буфера
char lineBuf[80];
int charCount = 0;
bool alert[4] = {false, false, false,false};
byte sen[4] = {0, 0, 0, 0};
unsigned long sensor_Millis = 0, s10_millis = 0;
void IRAM_ATTR f_sen_0()
{ sen[0] ++;}
void IRAM_ATTR f_sen_1()
{ sen[1] ++;}
void IRAM_ATTR f_sen_2()
{ sen[2] ++;}
void IRAM_ATTR f_sen_3()
{ sen[3] ++;}
void setup() {
// запас времени на открытие монитора порта — 5 секунд
delay(5000);
// инициализируем контакты для светодиодов
pinMode(led_street_1, OUTPUT);
pinMode(led_street_2, OUTPUT);
pinMode(sensor[0], INPUT);
pinMode(sensor[1], INPUT);
pinMode(sensor[2], INPUT);
pinMode(sensor[3], INPUT);
attachInterrupt(sensor[0], f_sen_0, RISING);
attachInterrupt(sensor[1], f_sen_1, RISING);
attachInterrupt(sensor[2], f_sen_2, RISING);
attachInterrupt(sensor[3], f_sen_3, RISING);
// инициализируем монитор порта
Serial.begin(115200);
// подключаемся к Wi-Fi сети
Serial.println();
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while(WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("Wi-Fi connected");
Serial.println("IP-address: ");
// пишем IP-адрес в монитор порта
Serial.println(WiFi.localIP());
server.begin();
oled.begin(SSD1306_SWITCHCAPVCC, 0x3C);
oled.clearDisplay();
}
void loop() {
if (millis() - s10_millis >= 10000) {
if (WiFi.status() == WL_CONNECTED) {
oled.setTextSize(1); // set text size
oled.setTextColor(WHITE);
oled.setCursor(0, 0);
oled.println(WiFi.localIP());
} else {
oled.setTextSize(1); // set text size
oled.setTextColor(WHITE);
oled.setCursor(0, 0);
oled.println("No WIFI");
}
oled.display();
s10_millis = millis();
}
// анализируем канал связи на наличие входящих клиентов
WiFiClient client = server.available();
if (client) {
Serial.println("New client");
memset(lineBuf, 0, sizeof(lineBuf));
charCount = 0;
// HTTP-запрос заканчивается пустой строкой
boolean currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
Serial.write(c);
// считываем HTTP-запрос
lineBuf[charCount] = c;
if (charCount < sizeof(lineBuf) - 1) {
charCount++;
}
// на символ конца строки отправляем ответ
if (c == '\n' && currentLineIsBlank) {
// отправляем стандартный заголовок HTTP-ответа
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
// тип контента: text/html
client.println("Connection: close");
// после отправки ответа связь будет отключена
client.println();
// формируем веб-страницу
String webPage = "<!DOCTYPE HTML>";
webPage +="<html>";
webPage +=" <head>";
webPage +=" <meta name=\"viewport\" content=\"width=device-width,";
webPage +=" initial-scale=1\">";
webPage +=" </head>";
webPage +=" <h1>ESP32 - Web Server</h1>";
webPage +=" <p>LED #1";
webPage +=" <a href=\"on1\">";
webPage +=" <button>ON</button>";
webPage +=" </a> ";
webPage +=" <a href=\"off1\">";
webPage +=" <button>OFF</button>";
webPage +=" </a>";
webPage +=" </p>";
webPage +=" <p>LED #2";
webPage +=" <a href=\"on2\">";
webPage +=" <button>ON</button>";
webPage +=" </a> ";
webPage +=" <a href=\"off2\">";
webPage +=" <button>OFF</button>";
webPage +=" </a>";
webPage +=" </p>";
webPage +=" <p>LED #3";
webPage +=" <a href=\"on3\">";
webPage +=" <button>ON</button>";
webPage +=" </a> ";
webPage +=" <a href=\"off3\">";
webPage +=" <button>OFF</button>";
webPage +=" </a>";
webPage +=" </p>";
webPage +="</html>";
client.println(webPage);
break;
}
if (c == '\n') {
// анализируем буфер на наличие запросов
// если есть запрос, меняем состояние светодиода
currentLineIsBlank = true;
if (strstr(lineBuf, "GET /on1") > 0) {
} else if (strstr(lineBuf, "GET /off1") > 0) {
} else if (strstr(lineBuf, "GET /on2") > 0) {
} else if (strstr(lineBuf, "GET /off2") > 0) {
} else if (strstr(lineBuf, "GET /on3") > 0) {
} else if (strstr(lineBuf, "GET /off3") > 0) {
}
// начинаем новую строку
currentLineIsBlank = true;
memset(lineBuf, 0, sizeof(lineBuf));
charCount = 0;
} else if (c != '\r') {
// в строке попался новый символ
currentLineIsBlank = false;
}
}
}
// даем веб-браузеру время, чтобы получить данные
delay(1);
// закрываем соединение
client.stop();
Serial.println("client disconnected");
}
if (millis() - sensor_Millis > 2000) {
for (int i = 0; i < 4; i++) {
if (sen[i] > 5) alert[i] = true;
Serial.println(sen[i]);
sen[i] = 0;
}
sensor_Millis = millis();
}
for (int i = 0; i < 4; i++) {
if (alert[i]) {
// bot.sendMessage(sensor_name[i]);
alert[i] = false;
}
}
}