آموزش آردوینو اینترنت اشیا IOT برد Esp32 خانه هوشمند

پروژه ارسال هشدار نشتی گاز شهری توسط ایمیل با برد ESP32

نوشته شده توسط CiferTech

در چند سال اخیر با معرفی سنسور های سری MQ که هر کدام قابلیت تشخیص گاز های مختلفی را دارند، برای مثال سری MQ5 که قابلیت تشخیص گاز های LPG را دارد توانسته ایم پروژ های مختلفی را اجرا کنیم، اما در این پروژه قصد داریم این سنسور کارآمد را به روش متفاوتی راه‌اندازی کنیم. یعنی با استفاده از ارسال و دریافت ایمیل حاوی مقادیر بدست آمده، پروژه هشدار نشتی گاز شهری با سنسور MQ5 و برد ESP32 راه اندازی کنیم. در ادامه این آموزش با مرجع تخصصی آردوینو به زبان فارسی، دیجی اسپارک همراه باشید.

 

پروژه تشخیص گاز شهری با سنسور MQ5 - دیجی اسپارک

 


سنسور های MQ


سنسور گاز های سری MQ وسیله ای هستند که وجود یا غلظت گازها را در جو تشخیص می دهد. براساس غلظت گاز سنسور با تغییر مقاومت ماده داخل سنسور، که می تواند به عنوان ولتاژ خروجی اندازه گیری شود، اختلاف پتانسیل متناظر را ایجاد می کند و بر اساس این مقدار ولتاژ می توان نوع و غلظت گاز را تخمین زد. می توان آنها را کم و بیش کالیبره یا تنظیم کرد (با استفاده مقاومت متغیر موجود در برد). خروجی این سنسور ها سیگنال آنالوگ است و با ورودی آنالوگ آردوینو قابل خواندن است. این سنسورها به طور معمول به صورت ماژول در دسترس هستند، این ماژول ها از سنسور گاز و یک IC مقایسه کننده تشکیل شده اند.

تشخیص گاز شهری با سنسور MQ5 و برد ESP32 - دیجی اسپارک

در جدول زیر انواع مختلف این سنسور ها همراه با قابلیت تشخیص گاز مربوط را مشاهده می‌کنید.

نام سنسور گاز قابل تشخیص
MQ-2 Methane, Butane, LPG, Smoke
MQ-3 Alcohol, Ethanol, Smoke
MQ-4 Methane, CNG Gas
MQ-5 Natural gas, LPG
MQ-6 LPG, butane
MQ-7 Carbon Monoxide
MQ-8 Hydrogen Gas
MQ-9 Carbon Monoxide, flammable gasses
MQ131 Ozone
MQ135 Air Quality
MQ136 Hydrogen Sulphide gas
MQ137 Ammonia
MQ138 Benzene, Toluene, Alcohol, Propane, Formaldehyde gas, Hydrogen
MQ214 Methane, Natural Gas
MQ216 Natural gas, Coal Gas
MQ303A Alcohol, Ethanol, smoke
MQ306A LPG, butane
MQ307A Carbon Monoxide
MQ309A Carbon Monoxide, flammable gas

پروژه اطلاع رسانی نشت گاز شهری با ESP32 - دیجی اسپارک

 


تراشه ESP32


ESP32 نسل پیشرفته ESP8266 است. یکی از تفاوت‌های آن بلوتوث داخلی‌اش می‌باشد. همچنین دارای هسته وایفای ۲,۴ گیگا هرتزی و بلوتوث داخلی تولید شده با تکنولوژی ۴۰ نانومتری شرکت TSMC می‌باشد. این ماژول دارای بهترین پرفورمنس در مصرف انرژی می‌باشد یعنی با کمترین مصرف انرژی بهترین نتیجه را برای ما به همراه دارد. اگر بخواهیم دقیق‌تر به این برد نگاه کنیم باید بگوییم که این یک chip است که پلتفرم NodeMCU در اون پیاده سازی شده که به این نوع چیپ ها System on a chip microcontrollers هم گفته می‌شود.

 


SMTP Server


STMP یا “Simple Mail Transfer Protocol” یک استاندارد برای ارسال اطلاعات به ایمیل می باشد پس در نتیجه برای ارسال اطلاعات از ESP32 باید از این سرویس استفاده کنیم، که در این آموزش برد ESP32 مبدا و ایمیل ما مقصد می باشد و همچنین محتوای ارسالی نیز مقادیر سنسور MQ5 می باشند. یک سرور SMTP دارای یک آدرس است که می تواند توسط سرویس گیرنده نامه یا برنامه ای که شما از آن استفاده می کنید تنظیم شود و به طور کلی به صورت smtp.serveraddress.com قالب بندی می شود. هنگام ارسال ایمیل، سرور SMTP ایمیل شما را پردازش می کند، تصمیم می گیرد که به کدام سرور پیام ارسال کند و پیام را به آن سرور انتقال می دهد. ارائه دهنده خدمات صندوق ورودی گیرنده، مانند Gmail یا AOL سپس پیام را بارگیری کرده و در صندوق ورودی گیرنده قرار می دهد.

 


وسایل مورد نیاز


برد ESP32

سنسور MQ5

سیم و کابل 

 


نصب کتابخانه MailClient 


با استفاده از این کتابخانه کاربر قادر خواهد بود فایل هایی برای نمونه با پسوند .txt با .jpg را برای سرویس ایمیل ارسال کند. خب حالا نوبت نصب این کتابخانه در بستر آردوینو IDE می باشد که چند مرحله بسیار ساده دارد؛ در اولین مرحله مسیر Sketch/Include library/Manage libraries را دنبال کنید.

ارسال تصاویر به ایمیل ESP32-cam

در پنجره باز شده با وارد کردن نام کنابخانه مربوط که در اینجا “ESP32 MailClient” می باشد، اقدام دانلود و نصب کتابخانه بکنید.

ارسال تصاویر به ایمیل ESP32-cam

در ادامه مانند تصویر زیر نرم افزار اقدام به دانلود فایل های مربوط میکند.

ارسال تصاویر به ایمیل ESP32-cam

 


 راه‌اندازی ایمیل ارسال کننده


خب در اینجا ما نیاز به یک ایمیل داریم داریم تا اطلاعات مورد نیاز ما از مقصد این ایمیل به inbox ایمیل اصلی ما ارسال شود که پیشنهاد میکنم از ایمیل های اصلی خود برای این منظور استفاده نکنید و اقدام به ساخت یک ایمیل جدید کنید به این دلیل که باید دسترسی هایی خاصی به این ایمیل داده شود. بعد از ساخت ایمیل جدید به این لینک مراجعه کنید و اقدام فعال کردن دسترسی مورد نیاز بکنید.

ارسال تصاویر به ایمیل ESP32-cam

 


شماتیک و اتصالات


در اولین مرحله برای شروع راه‌اندازی پروژه اقدام به برقراری اتصالات بین سنسور MQ5 برد ESP32 خواهیم کرد. ابتدا سنسور مورد نظر را با برد ESP تغذیه می‌کنیم و از خروجی AO سنسور برای دریافت مقادیر مورد نظر استفاده می‌کنیم. اتصالات را مطابق با شماتیک و جدول زیر برقرار کنید.

اتصالات سنسور گاز MQ5 به برد ESP32 - دیجی اسپارک

  • شماتیک اتصالات پروژه ارسال هشدار نشتی گاز شهری توسط ایمیل و ESP32

شماتیک اتصالات پروژه ارسال هشدار نشتی گاز شهری توسط ایمیل با برد ESP32 - دیجی اسپارک

 


کد و راه‌اندازی


در بخش بعدی برای راه‌اندازی این پروژه اقدام به بررسی و آپلود کد در تراشه ESP32 خواهیم کرد، این کد از دو بخش تشکیل شده اول دریافت مقادیر از سنسور MQ5 و تحلیل مقادیر و در ادامه راه‌اندازی سرویس SMTP و ارسال مقادیر به مقصد مورد نظر در صورت بیش از حد شدن مقادیر دریافتی. ابتدا بخش هایی از کد را بررسی خواهیم کرد. در ابتدا با استفاده از این دوخط اقدام به معرفی شبکه وای‌فای برای اتصال ESP32 خواهیم کرد.

const char* ssid = "C1F3R";        //SSID شبکه وای فای
const char* password = "314159265";   // پسوورد شبکه وای فای

 

در این دو خط یک ایمیل همراه با پسوورد را وارد کنید تا SMTP با این ایمیل اقدام به ارسال مقادیر به ایمیل دیگر کند.

#define emailSenderAccount    "123@gmail.com"    // ایمیل برای ارسال کردن مقادیر
#define emailSenderPassword   "123456"            // پسوورد ایمیل ارسال کننده

 

در این قسمت با وارد کردن یک ایمیل به عنوان دریافت کننده مقصد مقادیر ارسال شده را مشخص می‌کنیم.

String inputMessage = "123@gmail.com";   //ایمیل دریافت کننده مقادیر

 

در این دو خط متن ایمیل ارسال را مشخص می‌کنیم.

      String emailMessage = String("Gas Level above threshold. Current Gas Level: ") + 
                            String(gas_value);

 

کد کامل پروژه ارسال هشدار نشتی گاز شهری توسط ایمیل و ESP32

#include "ESP32_MailClient.h"
 
const char* ssid = "C1F3R";        //SSID شبکه وای فای
const char* password = "314159265";   // پسوورد شبکه وای فای
 
#define emailSenderAccount    "123@gmail.com"    // ایمیل برای ارسال کردن مقادیر
#define emailSenderPassword   "123456"            // پسوورد ایمیل ارسال کننده
#define smtpServer            "smtp.gmail.com"
#define smtpServerPort        465
#define emailSubject          "ALERT!"   // موضوع ایمیل ارسالی
 
 
String inputMessage = "123@gmail.com";   //ایمیل دریافت کننده مقادیر
String enableEmailChecked = "checked";
String inputMessage2 = "true";
 
// Default Threshold Value
String inputMessage3 = "40.0";                    // مقدار پیشفرض
String lastgaslevel;
 
 

String processor(const String& var)
{
  if(var == "GASVALUE")
  {
    return lastgaslevel;
  }
  else if(var == "EMAIL_INPUT")
  {
    return inputMessage;
  }
  else if(var == "ENABLE_EMAIL")
  {
    return enableEmailChecked;
  }
  else if(var == "THRESHOLD")
  {
    return inputMessage3;
  }
  return String();
}
 
 
bool emailSent = false;
const char* PARAM_INPUT_1 = "email_input";
const char* PARAM_INPUT_2 = "enable_email_input";
const char* PARAM_INPUT_3 = "threshold_input";

 
unsigned long previousMillis = 0;     
const long interval = 5000;    
 
SMTPData smtpData;
 
 
void setup() 
{
  Serial.begin(115200);
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  if (WiFi.waitForConnectResult() != WL_CONNECTED) 
  {
    Serial.println("WiFi Failed!");
    return;
  }
  Serial.println();
 
    Serial.println(inputMessage);
    Serial.println(inputMessage2);
    Serial.println(inputMessage3);
}
 
void loop() 
{
  unsigned long currentMillis = millis();
  if (currentMillis - previousMillis >= interval) {
    previousMillis = currentMillis;
 
    float gas_analog_value = analogRead(35);
    float gas_value = ((gas_analog_value/1023)*100);
    Serial.print(gas_analog_value);
    Serial.print(", ");
    Serial.println(gas_value);
    
    lastgaslevel = String(gas_value);
    
    if(gas_value > inputMessage3.toFloat() && inputMessage2 == "true" && !emailSent){
      String emailMessage = String("Gas Level above threshold. Current Gas Level: ") + 
                            String(gas_value);
      if(sendEmailNotification(emailMessage)) {
        Serial.println(emailMessage);
        emailSent = true;
      }
      else {
        Serial.println("Email failed to send");
      }    
    }
    // چک کردن مقادیر برای ارسال ایمیل
    else if((gas_value < inputMessage3.toFloat()) && inputMessage2 == "true" && emailSent) 
    {
      String emailMessage = String("Gas Level below threshold. Current gas_value: ") + 
                            String(gas_value) + String(" C");
      if(sendEmailNotification(emailMessage)) 
      {
        Serial.println(emailMessage);
        emailSent = false;
      }
      else {
        Serial.println("Email failed to send");
      }
    }
  }
}
 
 
bool sendEmailNotification(String emailMessage)
{
  // Set the SMTP Server Email host, port, account and password
  smtpData.setLogin(smtpServer, smtpServerPort, emailSenderAccount, emailSenderPassword);
  
  smtpData.setSender("ESP32_Gas_Alert_Mail", emailSenderAccount);
  
  // مشخص کردن اهمیت ارسالی
  smtpData.setPriority("High");
  
  smtpData.setSubject(emailSubject);
  
  // فرمت HTML برای ایمیل ارسالی
  smtpData.setMessage(emailMessage, true);
  
  smtpData.addRecipient(inputMessage);
  smtpData.setSendCallback(sendCallback);
  
  if (!MailClient.sendMail(smtpData)) 
{
    Serial.println("Error sending Email, " + MailClient.smtpErrorReason());
    return false;
  }
 
  smtpData.empty();
  return true;
}
 
 
void sendCallback(SendStatus msg) 
{
  // Print the current status
  Serial.println(msg.info());
  
  // Do something when complete
  if (msg.success()) 
{
    Serial.println("=============");
  }
}

 

سریال مانیتور آردوینو برد ESP32 و سنسور گاز MQ5 - دیجی اسپارک

 


جمع بندی


در این آموزش با استفاده از سرویس ارسال ایمیل SMTP، سنسور MQ5 برای تشخیص مقادیر محیطی و در نهایت برد ESP32 برای تحلیل و پردازش پروژه یک سرویس ارسال هشدار وابسته به نشتی گاز ساخته‌ایم که در موارد مختلفی قابلیت استفاده دارد. همچنین با تغییر مقادیر می توانیم در این پروژه از سنسور های دیگر نیز استفاده کنیم.

پروژه ارسال هشدار نشتی گاز شهری توسط ایمیل با برد ESP32

 

چنانچه در مراحل راه اندازی و انجام این پروژه با مشکل مواجه شدید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریع‌ترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در کدها و یا مراحل اجرایی وجود دارند می‌توانید از همین طریق اطلاع رسانی کنید.

 

در پایان نظرات و پیشنهادات خود را با ما درمیان بگذارید و با اشتراک گذاری این آموزش در شبکه های اجتماعی , از وبسایت دیجی اسپارک حمایت کنید.

 

درباره نویسنده

CiferTech

تبادل نظر و رفع عیب با ثبت دیدگاه

۲ دیدگاه