آموزش آردوینو برد ESP8266 برد Nodemcu

پروژه ارسال ایمیل با ماژول ESP از طریق SMTP

esp8266-email-smtp-setting-digispark
نوشته شده توسط Just Another Geek(JAG)

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

 


تنظیمات ماژول ESP8266


آخرین هسته مربوط به ESP8266 که در محیط آردوینو نصب میشود؛ در هنگام تالیف این آموزش نسخه ۲٫۵٫۲ می‌باشد. در صفحه توضیحات نویسنده کتابخانه بدون ذکر دلیل نوشته شده که این کتابخانه با این نسخه از هسته کار نمی‌کند و باید از هسته های نسخه ۲٫۳ و ماقبل استفاده کنید. قدم بعدی اضافه کردن کتابخانه است. فایل فشرده زیر را دانلود کنید و پس از ذخیره از منوی Sketch گزینه Include Library و سپس Add .ZIP library را انتخاب کنید. در اینجا به محل دانلود کتبخانه رجوع کنید و فایل فشرده آن را انتخاب کنید. پس از چند ثانیه کتابخانه به لیست کتابخانه های شما اضافه می‌شود.

تنظیمات برد Nodemcu با هسته وای فای در پروژه ارسال ایمیل با ESP - دیجی اسپارک

 


اتصالت برد Nodemcu


در این پروژه از یک سنسور تشخیص حرکت PIR استفاده کرده‌ایم. اتصالات مورد نیاز به سه بخش تقسیم می‌شوند. پایه GND ماژول به برد Nodemcu و پایه VCC به پایه ۳٫۳V برد Nodemcu متصل کنید. سپس پایه سیگنال ماژول PIR را به پایه D2 برد Nodemcu متصل کنید. مانند تصویر زیر

اتصالات برد Nodemcu به سنسور تشخیص حرکت pir در پروژه ارسال ایمیل با ESP - دیجی اسپارک

 


ایجاد حساب کاربری در Gmail


در ابتدا لازم است یک اکانت یا حساب کاربری جیمیل بسازید. اگر در حال حاضر یک اکانت دارید تنها نیاز است در قسمت تنظیمات اکانت تغییراتی ایجاد کنید. توجه: تغییراتی که قرار است روی اکانت جیمیل ایجاد کنید ممکن است سطح امنیتی اکانت را پایین بیاورد پس توصیه می‌شود که یک اکانت جداگانه برای این پروژه بسازید. برای ارسال و دریافت ایمیل با ماژول ESP از SMTP استفاده می‌کنیم.


آشنایی با SMTP در ایمیل


کلمه SMTP مخفف Simple Mail Transfer Protocol می‌باشد. به معنی پروتکل انتقال ساده، در این پروتکل شما برای ارسال یک ایمیل تنها به آدرس ایمیل و گذرواژه نیاز دارید. گوگل در حالت پیش فرض جهت شناسایی از پروتکل‌های پیچیده‌تری برای افزایش امنیت استفاده می‌کند. باید در ابتدا این تنظیمات را تغییر دهیم. برای این کار به Google Account Settings رفته و گزینه Allow less secure apps را انتخاب کنید. اکنون اکانت شما آماده است. برنامه: تصور این است که هسته مربوط به ESP8266 را به محیط کدنویسی آردوینو اضافه کرده‌اید.

تنظیمات SMTP در پروژه ارسال ایمیل با ESP - دیجی اسپارک

 


کتابخانه ارسال ایمیل ماژول ESP


با اضافه کردن کتابخانه‌های لازم شروع می‌کنیم. در این پروژه از کتابخانه ESP8266WiFi.h و ESP8266SMTP.h استفاده کرده‌ام. بایستی هر دو کتابخانه در مخازن کامپیوتر شما موجود باشند. اگر روش نصب کتابخانه را نمی‌دانید به آموزش نصب کتابخانه در آردوینو مراجعه کنید. پس از اقدام به نصب این کتابخانه‌ها بایستی کدهای نرم افزار را آپلود کنید. سپس نام و پسوورد مودم را برای اتصال به اینترنت تعریف میکنیم. به دو خط زیر دقت کنید.

const char* ssid = "MODEM_NAME";
const char* password = "MODEM_PASSWORD";

 

نصب کتابخانه در آردوینو پروژه ارسال ایمیل با ESP - دیجی اسپارک

 


برنامه نویسی ایمیل با ماژول ESP


ابتدا کدهای زیر را در نرم افزار آردوینو IDE وارد کنید.

#include <ESP8266WiFi.h>
#include <ESP8266SMTP.h>

const char* ssid = "MODEM_NAME";            		// WIFI network name
const char* password = "MODEM_PASSWORD";        		// WIFI network password

#define sensor D2                // the pin that the sensor is atteched to
boolean state;                    //motion detected
int i;


void setup()
{
  Serial.begin(115200);
  delay(1000);ایمیل ماژول ESP
  pinMode(sensor, INPUT);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.print("Connected to ");
  Serial.println(ssid);
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());


}

void loop()
{
  state = digitalRead(sensor);// read sensor value
  if (state == true) {           // check if the sensor is HIGH
    delay(1000);                // delay 1000 milliseconds
    i++;                          //counter for moves
  }
  else {
    delay(2000);             // delay 2000 milliseconds
  }
  if (i == 3) { //send email when 3 moves detected
    String alarm = "Something is moving!!!"; //Message to send
    uint32_t startTime = millis();

    SMTP.setEmail("yourEmail@sender.com") //Sender Email
    .setPassword("********") //Sender Password
    .Subject("Security Motion Detector") //Email subject
    .setFrom("ESP8266SMTP")
    .setForGmail();            // simply sets port to 465 and setServer("smtp.gmail.com");
    
    if (SMTP.Send("yourEmail@receiver.com",  alarm)) { //Email Recepient and its message
      Serial.println(F("Message sent")); //send confirm
    } else {
      Serial.print(F("Error sending message: "));
      Serial.println(SMTP.getError());
    }

    Serial.println(millis() - startTime);//calculating time of emeil sending
    i=0;
  }
}

 


تحلیل کد ایمیل با ماژول ESP


تحلیل کدهای پروژه ایمیل با ماژول ESP ، در حلقه setup توابع مربوط به ارتباط سریال و اتصال وای فای را اجرا می‌کنیم.

Serial.begin(115200);
delay(1000);
pinMode(sensor, INPUT);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.print("Connected to ");
Serial.println(ssid);
Serial.print("IP address: ");
Serial.println(WiFi.localIP());

 

در نهایت به حلقه اصلی برنامه ایمیل با ماژول ESP می‌رسیم. در اینجا ابتدا وضعیت سنسور را می‌خوانیم. متغیر i با هر تشخیص حرکت یا به عبارتی با هر HIGH شدن پایه سنسور یک واحد اضافه می‌شود. سپس وقتی به یک عدد مشخص رسید عملیات ارسال ایمیل آغاز می‌شود. علت این شمارنده این است که اگر نباشد، هر لحظه‌ای که حرکتی دریافت شود یک ایمیل دریافت می‌کنید. در این حالت اگر روی تلفن همراه هر لحظه اعلامی داشته باشید خوشایند نخواهد بود!

 


کد ارسال ایمیل ESP


 

SMTP.setEmail("t********@gmail.com") //Sender Email
.setPassword("********") //Sender Password
.Subject("Security Motion Detector") //Email subject
.setFrom("ESP8266SMTP")
.setForGmail(); // simply sets port to 465 and setServer("smtp.gmail.com");

نکته مهم اینکه این قسمت از برنامه در حقیقت تنها یک خط است. قسمت اول آدرس ایمیل ارسال کنند و پسوورد آن، سپس عنوان ایمیل و بعد از آن نام ارسال کننده و در نهایت تنظیم سرور جیمیل برای ارسال است. در قسمت بعدی عملیات ارسال ایمیل انجام می‌شود.

 

if (SMTP.Send("thisisjag2018@yahoo.com", alarm)) { //Email Recepient and its message
Serial.println(F("Message sent")); //send confirm
} else {
Serial.print(F("Error sending message: "));
Serial.println(SMTP.getError());
}

در اینجا در خط اول ایمیل به آدرسی که مشخص کرده ایم ارسال می‌شود. متن داخل آن رشته‌ای با نام دلخواه alarm می‌باشد که داخلش هرمتنی بدون محدودیت تعداد کاراکتر می‌تواند باشد. به عبارتی کاراکتر بیشتر حجم کد بیشتر! در صورت موفقیت در ارسال ایمیل پیغام Message Sent روی سریال مانیتور نمایش داده می‌شود. در صورت عدم ارسال پیغام خطا را در سریال مانیتور خواهید دید. در خط زیر زمان مورد استفاده برای ارسال ایمیل نمایش داده می‌شود.

Serial.println(millis() - startTime);//calculating time of emeil sending

و در نهایت حتما متغیر i را صفر کنید تا ایمیل های بعدی بازهم در صورت رخ دادن تعدادی حرکت خاص ارسال شوند. مهمترین ویژگی این سیستم عدم نیاز به ماژول ساعت می باشد. هر ایمیل در یک ساعت مشخص ارسال می شود که در inboxقابل مشاهده می باشد و با استفاده از زمان سنج بالا می توان زمان دقیق حرکات را فهمید.

نمونه ایمیل ارسال شده از برد Nodemcu در پروژه ارسال ایمیل با ESP - دیجی اسپارک


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


برد Nodemcu

سنسور تشخیص حرکت PIR

جعبه PIR با ۳D Print

 

 

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

 


پروژه و دریافت بن ارسال رایگان


برای دریافت بن خرید از دانشجو کیت، کاربران بایستی با استفاده از وسایل این آموزش، پروژه را اجرا کرده و یا حتی مدار جدیدی تعریف کنید. سپس از اجرای کار فیلم گرفته و در شبکه‌های اجتماعی از جمله آپارات و اینستگرام، با هشتگ‌های دیجی_اسپارک   دانشجوکیت    digispark    daneshjookit منتشر کنند. سپس از طریق بخش نظرات در ادامه همین آموزش، جهت دریافت بن خرید ارسال رایگان به ارزش ۱۲۰۰۰ تومان از دانشجو کیت، لینک را زیر همین پست ارسال کنید.

 

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

 

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

Just Another Geek(JAG)

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

۲۰ دیدگاه

  • سلام
    یک سوال داشتم
    پروژه بالا را پیاده کردم کار نکرد بعد به یه پروژه ای که فقط برای ارتباط وای فای با مودم بوده اماده کردم اما به مودم وصل نمیشه
    تنظیمات مودم را باید تغییر داد؟
    ممنون میشم راهنمایی کنید

    • سلام. نیازی به تغییر در تنظیمات مودم نیست. فقط کافیه در قسمت
      const char* ssid = “MODEM_NAME”;
      const char* password = “MODEM_PASSWORD”;

      به جای MODEM_NAME و MODEM_PASSWORD نام و پسوورد مودم خودتون رو وارد کنید. اگر باز هم کار نکرد، از سلامت ماژول ESP اطمینان حاصل کنید

      پیروز باشید

      • بله مشخصات مودم و وارد میکنم اما کار نکرده
        با ماژول کار کردم سالم اما وای فای و تست نکردم
        چطور میتونم بخش وای فای و تست کنم؟
        امکان داره به تنهایی وای فای ماژول مشکل داشته باشه؟
        ممنون

        • گاهی دیده شده که اگر در کلمه عبور مودم کاراکترهای خاص مثل # $ & و… وجود داشته باشه برنامه در وصل شده به مودم به مشکل میخوره. بعضی وقت ها هم تغذیه ضعیف باعث میشه که در لحظه اتصال که ماژول بیشترین جریان کشی رو داره برق کافی به ماژول نرسه. این موارد رو بررسی کنید و از مثال های ساده خود آردوینو مثل Blink برای اطمینان از سلامت برد استفاده کنید

          پیروز باشید

        • سلام ببخشید کتابخانه های لازم این برنامه نیست؟ من نتونستم پیدا کنم ممنون میشم راهنمایی کنین

    • سلام. نیازی به تغییر در تنظیمات مودم نیست. فقط کافیه در قسمت
      const char* ssid = “MODEM_NAME”;
      const char* password = “MODEM_PASSWORD”;

      به جای MODEM_NAME و MODEM_PASSWORD نام و پسوورد مودم خودتون رو وارد کنید. اگر باز هم کار نکرد، از سلامت ماژول ESP اطمینان حاصل کنید

      پیروز باشید

  • با سلام و احترام
    بنده قصد دارم یک لودسل به آردینو وصل کنم که وزن قطعات را بفرسته به کامپیوتر میشه راهنمایی کنید

    • سلام و درود.در این پروژه مشخص فقط کافیه به جای متغیر alarm مقدار خوانده شده از سنسور لود سل رو قرار دهید.

      پیروز باشید

  • سلام وقت بخیر ممنون از توضیحاتتون.در حال انجام پروژه با ESP هستم و به دنبال یک LCD گرافیکی.میشه لطفا معرفی کنید از چه LCD میتونم استفاده کنم؟

    • سلام وقت شما هم بخیر.
      تقریبا تمامی LCD های گرافیکی موجود در بازار چه رنگی و چه تک رنگ با ESP هماهنگ هستن و شما میتونید بسته به نوع پروژتون از یکی استفاده کنید.

      پیروز باشید

  • سلام
    برنامه این نوشته را در پورت سریال می نویسه منظورش چیه ؟
    و چه کاری برای رفع عیب انجام بدم؟

  • ارورش اینه :
    Error sending message: Could not connect to mail server
    ۱۴۱۵
    Error sending message: Could not connect to mail server
    ۱۶۰۶

    • سلام و وقت بخیر

      از اتصال دستگاه و مودم به اینترنت مطمئن بشید
      نسخه Esp Core رو چک کنید که حتما قبل از ۲٫۳ باشد
      و حتما تنظیمات اکانت ایمیل خود را به حالت Allow less secure apps تنظیم کنید
      پیروز باشید

  • مهندس یه مشکلی پیش اومد پیام میده که نمیتونه به سرور جیمیل وص بشه . smtp.gmail.com رو هم زدم مشکل از کجا میتونه باشه ؟

    • سلام و وقت بخیر

      نسخه Esp Core رو چک کنید که حتما قبل از ۲٫۳ باشد
      و حتما تنظیمات اکانت ایمیل خود را به حالت Allow less secure apps تنظیم کنید

      پیروز باشید

  • یه سوال دیگه اگر ورژن هسته ماژول بالا باشه میشه ورژن قبلی ان را نصب کرد بصورت جدا که هر دو رو داشته باشه که برای یه پروژه ورژن کلیشو پایین نیاریم

    • همزمان امکان نصب دو هسته نیست متاسفانه. ورژن های جدید رو بررسی کنید شاید مشکل حل شده باشه

  • سلام مهندس من کد را روی برد اپلود میکنم
    و داخل سریال مانیتور می‌نویسه
    Error sending message: could not connect to mail server 615
    دلیل این ارور چیه ؟؟
    البته من طبق اموزش پیش رفتم و همه چیز را درست انجام دادم

    • سلام و درود

      حتما از متصل بودن ماژول به اینترنت مطمئن بشید. این خطا فقط در صورت نبودن اینترنت نمایش داده می شود.

      پیروز باشید

  • با سلام ممنونم از اموزش خوبتون ببخشید من کد هارو جاگزاری کردم تبق گفته ویرایش کردم در جیمیل هم گزینه را فعال کردم ولی میگه به سرور کانکت نشدم ارور را میفرستم
    sending message: Could not connect to mail server
    چکاری باید انجام دهم ؟؟؟؟؟