در چند سال اخیر با معرفی سنسور های سری MQ که هر کدام قابلیت تشخیص گاز های مختلفی را دارند، برای مثال سری MQ5 که قابلیت تشخیص گاز های LPG را دارد توانسته ایم پروژ های مختلفی را اجرا کنیم، اما در این پروژه قصد داریم این سنسور کارآمد را به روش متفاوتی راهاندازی کنیم. یعنی با استفاده از ارسال و دریافت ایمیل حاوی مقادیر بدست آمده، پروژه هشدار نشتی گاز شهری با سنسور MQ5 و برد ESP32 راه اندازی کنیم. در ادامه این آموزش با مرجع تخصصی آردوینو به زبان فارسی، دیجی اسپارک همراه باشید.
سنسور های MQ
سنسور گاز های سری MQ وسیله ای هستند که وجود یا غلظت گازها را در جو تشخیص می دهد. براساس غلظت گاز سنسور با تغییر مقاومت ماده داخل سنسور، که می تواند به عنوان ولتاژ خروجی اندازه گیری شود، اختلاف پتانسیل متناظر را ایجاد می کند و بر اساس این مقدار ولتاژ می توان نوع و غلظت گاز را تخمین زد. می توان آنها را کم و بیش کالیبره یا تنظیم کرد (با استفاده مقاومت متغیر موجود در برد). خروجی این سنسور ها سیگنال آنالوگ است و با ورودی آنالوگ آردوینو قابل خواندن است. این سنسورها به طور معمول به صورت ماژول در دسترس هستند، این ماژول ها از سنسور گاز و یک IC مقایسه کننده تشکیل شده اند.
در جدول زیر انواع مختلف این سنسور ها همراه با قابلیت تشخیص گاز مربوط را مشاهده میکنید.
نام سنسور | گاز قابل تشخیص |
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 نسل پیشرفته 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 سپس پیام را بارگیری کرده و در صندوق ورودی گیرنده قرار می دهد.
وسایل مورد نیاز
نصب کتابخانه MailClient
با استفاده از این کتابخانه کاربر قادر خواهد بود فایل هایی برای نمونه با پسوند .txt با .jpg را برای سرویس ایمیل ارسال کند. خب حالا نوبت نصب این کتابخانه در بستر آردوینو IDE می باشد که چند مرحله بسیار ساده دارد؛ در اولین مرحله مسیر Sketch/Include library/Manage libraries را دنبال کنید.
در پنجره باز شده با وارد کردن نام کنابخانه مربوط که در اینجا “ESP32 MailClient” می باشد، اقدام دانلود و نصب کتابخانه بکنید.
در ادامه مانند تصویر زیر نرم افزار اقدام به دانلود فایل های مربوط میکند.
راهاندازی ایمیل ارسال کننده
خب در اینجا ما نیاز به یک ایمیل داریم داریم تا اطلاعات مورد نیاز ما از مقصد این ایمیل به inbox ایمیل اصلی ما ارسال شود که پیشنهاد میکنم از ایمیل های اصلی خود برای این منظور استفاده نکنید و اقدام به ساخت یک ایمیل جدید کنید به این دلیل که باید دسترسی هایی خاصی به این ایمیل داده شود. بعد از ساخت ایمیل جدید به این لینک مراجعه کنید و اقدام فعال کردن دسترسی مورد نیاز بکنید.
شماتیک و اتصالات
در اولین مرحله برای شروع راهاندازی پروژه اقدام به برقراری اتصالات بین سنسور MQ5 برد ESP32 خواهیم کرد. ابتدا سنسور مورد نظر را با برد ESP تغذیه میکنیم و از خروجی AO سنسور برای دریافت مقادیر مورد نظر استفاده میکنیم. اتصالات را مطابق با شماتیک و جدول زیر برقرار کنید.
- شماتیک اتصالات پروژه ارسال هشدار نشتی گاز شهری توسط ایمیل و 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("============="); } }
جمع بندی
در این آموزش با استفاده از سرویس ارسال ایمیل SMTP، سنسور MQ5 برای تشخیص مقادیر محیطی و در نهایت برد ESP32 برای تحلیل و پردازش پروژه یک سرویس ارسال هشدار وابسته به نشتی گاز ساختهایم که در موارد مختلفی قابلیت استفاده دارد. همچنین با تغییر مقادیر می توانیم در این پروژه از سنسور های دیگر نیز استفاده کنیم.
چنانچه در مراحل راه اندازی و انجام این پروژه با مشکل مواجه شدید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریعترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در کدها و یا مراحل اجرایی وجود دارند میتوانید از همین طریق اطلاع رسانی کنید.
در پایان نظرات و پیشنهادات خود را با ما درمیان بگذارید و با اشتراک گذاری این آموزش در شبکه های اجتماعی , از وبسایت دیجی اسپارک حمایت کنید.
سلام مهندس باهمین برد وهمین کد راهنمایی میکنید با سنسور mq135 چجور میتونم اطلاعات نمایشی از سنسور روی یک ای پی مشاهده کنم؟ دانش برنامه نویسیم در این زمینه خیلی کمه
با سلام
با همین کد میتوانید پیگیری کنید.