цифровая электроника
вычислительная техника
встраиваемые системы

 
» » » Детектор утечки газа на ESP8266 с отправкой уведомлений на email

Детектор утечки газа на ESP8266 с отправкой уведомлений на email

Автор: Mike(admin) от 10-03-2020, 08:05

Датчик газа LPG своими руками


Сжиженный нефтяной газ или сжиженный попутный газ или LPG представляет собой горючую смесь углеводородных газов, используемых в качестве топлива в отопительных приборах, кухонном оборудовании и транспортных средствах. LPG – это газ без запаха, но для придания ему запаха добавляются добавки.


Детектор утечки газа на ESP8266 с отправкой уведомлений на email

Этот газ при его превышении доли в атмосфере небезопасен и может привести к возгораниям, поэтому важно иметь детектор утечки такого газа, который мы соберем в рамках данного проекта.


Наш газовый детектор на основе ESP8266 контролирует выходной сигнал датчика MQ-2, производит считывание 500 раз и берет среднее значение выборки, чтобы уменьшить шум при чтении, а если значение превышает пороговое значение, он отправляет электронное письмо получателю. Схема подключения ESP8266 и датчика газа представлена далее.


Детектор утечки газа на ESP8266 с отправкой уведомлений на email

Код программы детектора газа следующий.



/*
  Детектор газа контролирует выходной сигнал датчика сжиженного нефтяного газа 500 раз и берет среднее значение выборки, чтобы уменьшить шум чтения,
  и если значение превышает пороговое значение, он отправляет электронное письмо получателю.

  Перед загрузкой кода обязательно внесите изменения в заголовочный файл Gsender:
    const int SMTP_PORT = 465;// Порт SMTP измените его, если вы используете другой SMTP
    const char* SMTP_SERVER = "smtp.gmail.com";// Изменение SMTP-сервера Gmail, если вы используете другой SMTP
    const char* EMAILBASE64_LOGIN = "YOUR EMAIL ID ENCODED WITH BASE64";// Ваш адрес электронной почты должен быть закодирован в base64
    const char* EMAILBASE64_PASSWORD = "YOUR PASSWORD ENCODED WITH BASE64";// ваш пароль должен быть закодирован в base64
    const char* FROM = "youremail@gmail.com";// ваш адрес электронной почты с кодировкой 
  
  Измените эти строки в соответствии с вашими потребностями:
    const int sensorPin = A0; // подключите выход датчика A0 к этому контакту
    const char *ssid = "**********";    // Название сети WIFI
    const char *password = "*********"; // сетевой пароль WIFI
    uint8_t connection_state = 0;       // Подключен к Wi-Fi или нет
    uint8_t nSampling = 500;            // изменить согласно вашей потребности
    uint16_t threshold = 200;           // изменить согласно вашей потребности

*/

#include <ESP8266WiFi.h>
#include "Gsender.h"

const int sensorPin = A0;           // подключите выход датчика A0 к этому контакту
const char *ssid = "**********";    // Название сети WIFI
const char *password = "*********"; // сетевой пароль WIFI
uint8_t connection_state = 0;       // Подключен к Wi-Fi или нет
uint8_t nSampling = 500;            // изменить согласно вашей потребности
uint16_t threshold = 200;           // изменить согласно вашей потребности

void setup()
{
  Serial.begin(115200);
  pinMode(sensorPin, INPUT);
  pinMode(16, OUTPUT);
  pinMode(2, OUTPUT);
  digitalWrite(2, HIGH);
  digitalWrite(16, HIGH);
  Serial.begin(115200); // изменить согласно вашей потребности

  WiFi.begin(ssid, password);
  Serial.print("\nConnecting to WiFi network");

  while (WiFi.status() != WL_CONNECTED)
  {

    Serial.print(".");
    digitalWrite(2, HIGH);
    delay(500);
    digitalWrite(2, LOW);
    delay(500);
  }

  Serial.println("\nConnected to the WiFi network: " + WiFi.SSID() + " and strength is: " + WiFi.RSSI());
}

void loop()
{
  if ((WiFi.status() == WL_CONNECTED))
  {
    float total = 0;
    for (int i = 1; i <= nSampling; i++)
    {

      int x = analogRead(A0);

      total += x;
      delay(10);
    }
    total /= nSampling;
    Serial.println(total);
    if (total >= threshold)
    {
      Gsender *gsender = Gsender::Instance(); // Получение указателя на экземпляр класса
      String subject = "Gas Leakage";
      if (gsender->Subject(subject)->Send("recipient@gmail.com", "Gas Leakage found!"))
      { // изменить получателя на своего получателя
        Serial.println("Message send.");
      }
      else
      {
        Serial.print("Error sending message: ");
        Serial.println(gsender->getError());
      }
      delay(300000);
    }
  }
  else if (WiFi.status() != WL_CONNECTED)
  {
    Serial.print(".");
    digitalWrite(2, HIGH);
    delay(500);
    digitalWrite(2, LOW);
    delay(500);
  }
}

Файл Gsender.h



#ifndef G_SENDER
#define G_SENDER
#define GS_SERIAL_LOG_1
//#define GS_SERIAL_LOG_2
#include <WiFiClientSecure.h>

class Gsender
{
    protected:
        Gsender();
    private:
        const int SMTP_PORT = 465;
        const char* SMTP_SERVER = "smtp.gmail.com";
        const char* EMAILBASE64_LOGIN = "YOUR EMAIL ID ENCODED WITH BASE64";
        const char* EMAILBASE64_PASSWORD = "YOUR PASSWORD ENCODED WITH BASE64";
        const char* FROM = "youremail@gmail.com";
        const char* _error = nullptr;
        char* _subject = nullptr;
        String _serverResponce;
        static Gsender* _instance;
        bool AwaitSMTPResponse(WiFiClientSecure &client, const String &resp = "", uint16_t timeOut = 10000);

    public:
        static Gsender* Instance();
        Gsender* Subject(const char* subject);
        Gsender* Subject(const String &subject);
        bool Send(const String &to, const String &message);
        String getLastResponce();
        const char* getError();
};
#endif // G_SENDER

Файл Gsender.cpp



#include "Gsender.h"
Gsender* Gsender::_instance = 0;
Gsender::Gsender(){}
Gsender* Gsender::Instance()
{
    if (_instance == 0) 
        _instance = new Gsender;
    return _instance;
}

Gsender* Gsender::Subject(const char* subject)
{
  delete [] _subject;
  _subject = new char[strlen(subject)+1];
  strcpy(_subject, subject);
  return _instance;
}
Gsender* Gsender::Subject(const String &subject)
{
  return Subject(subject.c_str());
}



© digitrode.ru


Теги: ESP8266, датчик газа




Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Комментарии:

Оставить комментарий