psychotrip

arduino

Dec 20th, 2021
191
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.71 KB | None | 0 0
  1. #include "MQ135.h"
  2. #include <SoftwareSerial.h>
  3. #include <LiquidCrystal.h>
  4.  
  5. #define DEBUG true
  6.  
  7. SoftwareSerial esp8266(9, 10); // это делает вывод 9 Arduino выводом RX, а вывод 10 Arduino выводом TX
  8.  
  9. const int sensorPin = 0;
  10. int air_quality;
  11.  
  12. LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
  13.  
  14. void setup()
  15. {
  16.     pinMode(8, OUTPUT);
  17.  
  18.     lcd.begin(16, 2);
  19.     lcd.setCursor(0, 0);
  20.     lcd.print("ФСУ 430-3 ");
  21.     lcd.setCursor(0, 1);
  22.     lcd.print("Нагрев датчика ");
  23.  
  24.     delay(1000);
  25.  
  26.     Serial.begin(115200);
  27.     esp8266.begin(115200);
  28.  
  29.     sendData("AT+RST\r\n", 2000, DEBUG); // модуль сброса
  30.     sendData("AT+CWMODE=2\r\n", 1000, DEBUG); // настройка в качестве точки доступа
  31.     sendData("AT+CIFSR\r\n", 1000, DEBUG); // получить ip-адрес
  32.     sendData("AT+CIPMUair_quality=1\r\n", 1000, DEBUG); // настройка для нескольких подключений
  33.     sendData("AT+CIPSERVER=1,80\r\n", 1000, DEBUG); // включить сервер через порт 80
  34.  
  35.     pinMode(sensorPin, INPUT); // датчик газа будет входом для arduino
  36.  
  37.     lcd.clear();
  38. }
  39.  
  40. void loop()
  41. {
  42.     MQ135 gasSensor = MQ135(A0);
  43.     float air_quality = gasSensor.getPPM();
  44.     if (esp8266.available()) // проверить, отправляет ли esp сообщение
  45.     {
  46.         if (esp8266.find("+IPD"))
  47.         {
  48.             delay(1000);
  49.             int connectionId = esp8266.read() - 48; // вычитаем 48 из выходных данных, потому что функция read() возвращает десятичное значение ASCII,
  50.                                                     // а первое десятичное число, равное 0, начинается с 48
  51.             String webpage = "<h1>Система Мониторинга Качества Воздуха</h1>";
  52.             webpage += "<p><h2>";
  53.             webpage += "Качество воздуха: ";
  54.             webpage += air_quality;
  55.             webpage += " PPM";
  56.             webpage += "<p>";
  57.  
  58.             if (air_quality <= 1000)
  59.             {
  60.                 webpage += "Воздух чистый";
  61.             }
  62.             else if (air_quality <= 2000 && air_quality >= 1000)
  63.             {
  64.                 webpage += "Воздух загрязнён";
  65.             }
  66.             else if (air_quality >= 2000)
  67.             {
  68.                 webpage += "Опасность! Выйдите на свежый воздух";
  69.             }
  70.  
  71.             webpage += "</h2></p></body>";
  72.  
  73.             String cipSend = "AT+CIPSEND=";
  74.             cipSend += connectionId;
  75.             cipSend += ",";
  76.             cipSend += webpage.length();
  77.             cipSend += "\r\n";
  78.  
  79.             sendData(cipSend, 1000, DEBUG);
  80.             sendData(webpage, 1000, DEBUG);
  81.  
  82.             cipSend = "AT+CIPSEND=";
  83.             cipSend += connectionId;
  84.             cipSend += ",";
  85.             cipSend += webpage.length();
  86.             cipSend += "\r\n";
  87.  
  88.             String closeCommand = "AT+CIPCLOSE=";
  89.             closeCommand += connectionId; // добавить идентификатор подключения
  90.             closeCommand += "\r\n";
  91.  
  92.             sendData(closeCommand, 3000, DEBUG);
  93.         }
  94.     }
  95.     lcd.setCursor(0, 0);
  96.     lcd.print("Качество воздуха: ");
  97.     lcd.print(air_quality);
  98.     lcd.print(" PPM ");
  99.     lcd.setCursor(0, 1);
  100.  
  101.     if (air_quality <= 1000)
  102.     {
  103.         lcd.print("Воздух чистый");
  104.         digitalWrite(8, LOW);
  105.     }
  106.     else if (air_quality >= 1000 && air_quality <= 2000)
  107.     {
  108.         lcd.print("Воздух загрязнён, Откройте окна");
  109.         digitalWrite(8, HIGH);
  110.     }
  111.     else if (air_quality >= 2000)
  112.     {
  113.         lcd.print("Опасность! Выйдите на свежый воздух");
  114.         digitalWrite(8, HIGH);
  115.     }
  116.  
  117.     lcd.scrollDisplayLeft();
  118.     delay(1000);
  119. }
  120.  
  121. String sendData(String command, const int timeout, boolean debug)
  122. {
  123.     String response = "";
  124.     esp8266.print(command); // отправить прочитанный символ на esp8266
  125.     long int time = millis();
  126.  
  127.     while ((time + timeout) > millis())
  128.     {
  129.         while (esp8266.available())
  130.         {
  131.             // у esp8266 есть данные, поэтому отобразить их вывод в последовательном окне
  132.             char c = esp8266.read(); // прочитать следующий символ
  133.             response += c;
  134.         }
  135.     }
  136.     if (debug)
  137.     {
  138.         Serial.print(response);
  139.     }
  140.     return response;
  141. }
Advertisement
Add Comment
Please, Sign In to add comment