Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "MQ135.h"
- #include <SoftwareSerial.h>
- #include <LiquidCrystal.h>
- #define DEBUG true
- SoftwareSerial esp8266(9, 10); // это делает вывод 9 Arduino выводом RX, а вывод 10 Arduino выводом TX
- const int sensorPin = 0;
- int air_quality;
- LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
- void setup()
- {
- pinMode(8, OUTPUT);
- lcd.begin(16, 2);
- lcd.setCursor(0, 0);
- lcd.print("ФСУ 430-3 ");
- lcd.setCursor(0, 1);
- lcd.print("Нагрев датчика ");
- delay(1000);
- Serial.begin(115200);
- esp8266.begin(115200);
- sendData("AT+RST\r\n", 2000, DEBUG); // модуль сброса
- sendData("AT+CWMODE=2\r\n", 1000, DEBUG); // настройка в качестве точки доступа
- sendData("AT+CIFSR\r\n", 1000, DEBUG); // получить ip-адрес
- sendData("AT+CIPMUair_quality=1\r\n", 1000, DEBUG); // настройка для нескольких подключений
- sendData("AT+CIPSERVER=1,80\r\n", 1000, DEBUG); // включить сервер через порт 80
- pinMode(sensorPin, INPUT); // датчик газа будет входом для arduino
- lcd.clear();
- }
- void loop()
- {
- MQ135 gasSensor = MQ135(A0);
- float air_quality = gasSensor.getPPM();
- if (esp8266.available()) // проверить, отправляет ли esp сообщение
- {
- if (esp8266.find("+IPD"))
- {
- delay(1000);
- int connectionId = esp8266.read() - 48; // вычитаем 48 из выходных данных, потому что функция read() возвращает десятичное значение ASCII,
- // а первое десятичное число, равное 0, начинается с 48
- String webpage = "<h1>Система Мониторинга Качества Воздуха</h1>";
- webpage += "<p><h2>";
- webpage += "Качество воздуха: ";
- webpage += air_quality;
- webpage += " PPM";
- webpage += "<p>";
- if (air_quality <= 1000)
- {
- webpage += "Воздух чистый";
- }
- else if (air_quality <= 2000 && air_quality >= 1000)
- {
- webpage += "Воздух загрязнён";
- }
- else if (air_quality >= 2000)
- {
- webpage += "Опасность! Выйдите на свежый воздух";
- }
- webpage += "</h2></p></body>";
- String cipSend = "AT+CIPSEND=";
- cipSend += connectionId;
- cipSend += ",";
- cipSend += webpage.length();
- cipSend += "\r\n";
- sendData(cipSend, 1000, DEBUG);
- sendData(webpage, 1000, DEBUG);
- cipSend = "AT+CIPSEND=";
- cipSend += connectionId;
- cipSend += ",";
- cipSend += webpage.length();
- cipSend += "\r\n";
- String closeCommand = "AT+CIPCLOSE=";
- closeCommand += connectionId; // добавить идентификатор подключения
- closeCommand += "\r\n";
- sendData(closeCommand, 3000, DEBUG);
- }
- }
- lcd.setCursor(0, 0);
- lcd.print("Качество воздуха: ");
- lcd.print(air_quality);
- lcd.print(" PPM ");
- lcd.setCursor(0, 1);
- if (air_quality <= 1000)
- {
- lcd.print("Воздух чистый");
- digitalWrite(8, LOW);
- }
- else if (air_quality >= 1000 && air_quality <= 2000)
- {
- lcd.print("Воздух загрязнён, Откройте окна");
- digitalWrite(8, HIGH);
- }
- else if (air_quality >= 2000)
- {
- lcd.print("Опасность! Выйдите на свежый воздух");
- digitalWrite(8, HIGH);
- }
- lcd.scrollDisplayLeft();
- delay(1000);
- }
- String sendData(String command, const int timeout, boolean debug)
- {
- String response = "";
- esp8266.print(command); // отправить прочитанный символ на esp8266
- long int time = millis();
- while ((time + timeout) > millis())
- {
- while (esp8266.available())
- {
- // у esp8266 есть данные, поэтому отобразить их вывод в последовательном окне
- char c = esp8266.read(); // прочитать следующий символ
- response += c;
- }
- }
- if (debug)
- {
- Serial.print(response);
- }
- return response;
- }
Advertisement
Add Comment
Please, Sign In to add comment