برد ESP8266 برد Nodemcu برد ویموس Wemos

راه اندازی و کار با ESP8266، بخش سوم: معرفی پایه ها و بررسی سخت افزاری

نوشته شده توسط معین صابری

در سلسله آموزش های ماژول ESP8266، در قسمت سوم به معرفی و بررسی پایه های GPIO می پردازیم. در قسمت اول به معرفی کلی این ماژول و امکانات آن پرداختیم. در قسمت دوم نصب هسته نرم افزاری و پروگرام کردن ماژول با دستورات آردوینو را مشاهده نمودیم. در این قسمت، به معرفی پایه های GPIO ،کاربرد و کارکرد هر یک می پردازیم. .  در ادامه با مرجع تخصصی آردوینو به زبان فارسی ، دیجی اسپارک همراه باشید.

 


 پایه های آزاد به عنوان ورودی/خروجی


همانطور که پیشتر گفته شد، ما در این سلسله آموزش از ماژول ESP8266-12E استفاده می کنیم. تصویر زیر نمایی از پایه های این ماژول که به صورت فیزیکی(به کمک برد مبدل SMD به DIP) قابل دسترسی هستند را نمایش می دهد.

esp8266 Introduction of bases and hardware review

 

مطابق تصویر فوق، در ماژول ESP8266-12E به کمک برد مبدل SMD به DIP پایه های مشخص شده با کادرهای سبز رنگ قابل دسترسی بوده و پایه های مشخص شده با کادر قرمز رنگ، قابل دسترسی نیستند. البته با اتصال سیم می توانید به این پایه های هم دسترسی داشته باشید. در کنار این، از بین پایه های مشخص شده با کادر سبز رنگ، تعدادی از این پایه ها نیز در شرایط خاصی قابلیت دسترسی داشته و باید الزامات خاصی را برای آن در نظر گرفت. این موضوع را در جدول زیر برای کلیه پایه های قابل دسترس از لحاظ فیزیکی، بیان کرده ایم.

شرح وضعیت تعریف به صورت خروجی وضعیت تعریف به صورت ورودی نام پایه
در هنگام راه اندازی ماژول(بوت) به صورت HIGH است. هنگام تعریف به صورت ورودی به این نکته دقت کنید. به عنوان خروجی نمی توان تعریف کرد. با رعایت نکات می توان به صورت ورودی تعریف کرد RX
در زمان بوت به صورت HIGH است. چنانچه این پایه به هر دلیل LOW شود، ماژول بوت نخواهد شد. با رعایت نکات می توان به عنوان خروجی تعریف کرد نمی توان به عنوان ورودی تعریف کرد. TX
این پایه به عنوان پایه SDA در ارتباط I2C استافده می شود. بدون مشکل می توان به عنوان خروجی تعریف کرد. بدون مشکل می توان به عنوان ورودی تعریف کرد. GPIO4
این پایه به عنوان پایه SCL در ارتباط I2C استفاده می شود. بدون مشکل می توان به عنوان خروجی تعریف کرد. بدون مشکل می توان به عنوان ورودی تعریف کرد. GPIO5
در زمان بوت HIGH است. چنانچه حین بوت LOW شود، ماژول بوت نخواهد شد. بدون مشکل می توان به عنوان خروجی تعریف کرد. نمی توان به عنوان ورود تعریف کرد. این پایه پول اپ است. GPIO2
در زمان بوت HIGH است. چنانچه حین بوت LOW شود، ماژول بوت نشده و وارد مد پروگرام می شود. بدون مشکل می توان به عنوان خروجی تعریف کرد. نمی توان به عنوان ورودی تعریف کرد. این پایه پول آپ است. GPIO0
در صورتیکه حین بوت ماژول این پایه HIGH شود، ماژول بوت نخواهد شد. هممچنین این پایه ، پایه CS ارتباط SPI است. با رعایت نکات می توان به عنوان خروجی تعریف کرد نمی توان به عنوان ورودی تعریف کرد. این پایه پول داون است. GPIO15
زمان بوت HIGH است. این پایه جهت خارج سازی ماژول از مد اسلیپ به کار می رود. به عنوان خروجی می توان تعریف کرد. اما روی این پایه نمی توان PWM تعریف کرد. به عنوان ورودی می توان تعریف کرد. وقفه روی این پایه فعال نیست. GPIO16
این پایه، پایه کلاک (SCLK) ارتباط SPI است. بدون مشکل می توان به عنوان خروجی تعریف کرد. بدون مشکل می توان به عنوان ورودی تعریف کرد. GPIO14
این پایه، پایه MISO ارتباط SPI است. بدون مشکل می توان به عنوان خروجی تعریف کرد. بدون مشکل می توان به عنوان ورودی تعریف کرد. GPIO12
این پایه، پایه MOSI ارتباط SPI است. بدون مشکل می توان به عنوان خروجی تعریف کرد. بدون مشکل می توان به عنوان ورودی تعریف کرد. GPIO13
به کمک این پایه می توانید ورودی آنالوگ داشته باشید. این پایه به عنوان ورودی آنالوگ به کار می رود. A0

 

پس از معرفی و بررسی پایه های GPIO، به بررسی مثال هایی از نحوه کار با امکانات ماژول می پردازیم. از آنجاییکه به کمک آردوینو قصد برنامه نویسی داریم، لذا کلیه دستورات آردوینو در ESP با دستورات آردوینو در حالت عادی، به عنوان مثال آردوینو UNO یکسان است. در نظر داشته باشید که ماژول ESP8266-12E دارای حافظه فلش ۴ مگابایتی است. این ماژول می تواند با فرکانس ۸۰ و ۱۶۰ مگاهرتزی، برنامه را اجرا کند.

 


تعریف GPIO ورودی و خروجی


همانطور که در جدول قسمت قبل مشاهده شد، برخی از پایه های جهت تعریف به عنوان ورودی/ خروجی، نیزامند رعایت الزاماتی هستند. این در حالیست که می توانیم به سادگی از پایه های دیگر استفاده کنیم. در این قسمت، پایه شماره ۴ را به عنوان ورودی و پایه شماره ۵ را به عنوان خروجی انتخاب می کنیم. پایه شماره ۴ را با مقاومت داخلی پول آپ می کنیم. همانطور که اطلاع دارید، در این حالت این پایه مقدار HIGH را بر روی خود دارد. چنانچه این پایه با اتصال به GND مقدار LOW به خود بگیرد، پایه شماره ۵ به صورت HIGH تغییر وضعیت می دهد. برای نمایش بهتر، شما می توانید با اتصال یک LED به پایه ۵، روال کار را مشاهده کنید. در زیر کد این برنامه را مشاهده می کنید.

void setup() {
  pinMode(4, INPUT_PULLUP);  //تعریف پایه شماره ۴ به صورت ورودی با نقاومت داخلی پول آپ شده
  pinMode(5, OUTPUT);   //تعریف پایه ۵ به عنوان خروجی
  digitalWrite(5, LOW);  //صفر کردن پایه خروجی


}

void loop() {
  if(digitalRead(4) == LOW){   //در صورتیکه کلید فشرده شود
     digitalWrite(5,HIGH);   //خروجی ۱ شده تا LED روشن شود.
     delay(1000);
  }
  else
  digitalWrite(5,LOW);  //خاموش بودن چراغ
}

 

همانطور که در کد فوق مشاهده می کنید، دستورات تعریف ورودی/خروجی عینا مشابه آردوینو است. بدین ترتیب به سادگی و بدون نیاز با یادگیری زبان جدید، می توانید بردهای ESP را با برنامه های آردوینو پروگرام کنید.  همچنین توجه داشته باشید که بر روی پایه های ماژول ESP8266 می توانید وقفه خارجی( به جز پایه GPIO16) نیز فعال کنید.

esp8266 Introduction of bases and hardware review

 


خواندن ورودی آنالوگ در ESP8266


همانطور که پیشتر گفته شد، ماژول ESP8266 دارای یک ورودی آنالوگ است. به کمک این ورودی می توانید سیگنال های آنالوگ را با تابع analogRead آردوینو، به معادل دیجیتال آن تبدیل کنید. در رابطه با ADC ماژول ESP توجه به نکات ضروری است.

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

در زیر نمونه کد مربوط به خواندن مقدار از ورودی ADC را مشاهده می کنید. در این برنامه مقدار ADC خوانده شده و در سریال مانیتور نمایش داده می شود.

void setup() {
 Serial.begin(9600);  //تنظیم باود ریت سریال جهت نمایش داده ها در سریال مانیتور

}

void loop() {
 Serial.println(analogRead(A0));   //خواندن مقادیر از ورودی آنالوگ و نمایش آن در سریال مانیتور
 delay(1000);

}

 

پس از آپلود برنامه و در پی آن اجرا، خروجی را در سریال مانیتور همانند تصویر زیر مشاهده خواهید کرد.

esp8266 Introduction of bases and hardware review

 

از ADC ماژول ESP8266 استفاده های فراوانی می شود. به عنوان مثال در آموزشی، اقدام به طراحی و پیاده سازی نمایشگر شارژ باتری به کمک ADC ماژول پرداختیم. برای مطالعه این آموزش می توانید بر روی این لینک کلیک نمایید.

 


تولید پالس PWM در پایه ESP8266


یکی از توابع فوق العاده کاربردی آردوینو، تابع analogWrite است. به کمک این تابع می توانید به سادگی بر روی پایه های ESP8266(مطابق جدولی که پیشتر ارائه شد) پالس PWM ایجاد کنید. به کمک این تابع می توانید مقادیر ۰ الی ۱۰۲۳ را در خروجی به عنوان duty cycle تعریف کنید. کد برنامه زیر، یک پالس PWM بر روی پایه GPIO4 ایجاد می کند.

void setup() {
  pinMode(4, OUTPUT);  //تعریف پایه ۴ به عنوان خروجی
  analogWrite(4, 0);   //قرار دادن مقدار ۰ در خروجی

}

void loop() {
  for (int i = 0; i < 1023; i++) {    //حلقه تکرار از ۰ الی ۱۰۲۳ 
    analogWrite(4, i);   //نوشتن مقدار آنالوگ بر روی پایه
    delay(50);
  }

}

 

در برنامه فوق نور LED از کم به زیاد افزایش می یابد. توجه داشته باشید که فرکانس PWM در ESP8266 به صورت پیشفرض ۱ کیلو هرتز است. شما می توانید به کمک تابع زیر، این فرکانس را تغییر دهید.

analogWriteFreq(new_frequency)

در نهایت با اجرای برنامه، با تصویر زیر رو که نور LED آرام آرام زیاد می شود، رو به رو خواهید شد.

esp8266 Introduction of bases and hardware review

 


ایجاد سریال نرم افزاری روی پایه‌های ESP8266


از دیگر امکانات ماژول ESP8266 امکان تعریف و ایجاد سریال نرم افزاری بر روی پایه های دلخواه ESP8266 است. این رویه دقیقا مشابه دستورات آردوینو است. برنامه زیر یک نمونه برنامه جهت ارسال فرامین AT کامند به ماژول SIM800L است.

#include <SoftwareSerial.h>   //اضافه کردن کتابخانه سریال نرم افزاری
SoftwareSerial gsm(12, 13);   //تعیرف پایه ۱۲ به عنوان RX و ۱۳ به عنوان TX
void setup() {
  gsm.begin(9600);   //تعریف باودریت سریال نرم افزاری
  gsm.print("AT+SAPBR=1,1\r\n");  //ارسال دستور فعال سازی اینترنت
  delay(1000);

}

void loop() {

}

 


کار با پورت های I2C و SPI در ESP8266


ماژول ESP8266 دارای پورت I2C و SPI است. راه اندازی و کار با این پورت ها با دستورات آردوینو و کتابخانه wire.h  و spi.h صورت می گیرد.  برای این مورد می توانید دو آموزش زیر را با کلیک بر روی هر یک، مطالعه کنید.

آموزش فوق با برد NODEMCU انجام شده، اما با توجه به یکسان بودن پردازنده، کدها برای ماژول ESP8266-12E نیز قابل اجراست.

 


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


مبدل سریال به USB

ماژول ESP8266-12E

ماژول مبدل SMD به DIP

 


جمع بندی


در سلسله آموزش های ماژول ESP8266، در قسمت سوم به سراغ بررسی پایه های GPIO این ماژول پرداختیم. در این آموزش به تحلیل و بررسی وضعیت پایه های GPIO طی یک جدول پرداختیم. در ادامه با ارائه یک نمونه کد، نحوه تعریف ورودی و خروجی در کد تابع را مشاهده نمودیم. پس از آن به بررسی قابلیت های مختلف نظیر ADC ، تولید پالس PWM و سریال نرم افزاری پرداختیم. در نهایت با ارائه نمونه پروژه، نحوه کار با پورت های I2C و SPI در این ماژول را مورد بررسی قرار دادیم. در قسمت های بعدی این سلسله آموزش، وارد مباحث و امکانات شبکه ای ماژول با دستورات آردوینو خواهیم شد.

 

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

 

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

معین صابری

کارشناسی ارشد رشته معماری سیستم های کامپیوتری

مالي که ز تو کس نستاند، علم است
حرزي که تو را به حق رساند، علم است
جز علم طلب مکن تو اندر عالم
چيزي که تو را ز غم رهاند، علم است
(شیخ بهایی)

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

۲۸ دیدگاه

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

  • سلام
    بازه عددی pwm از ۰ تا ۲۵۵ هست.
    بیشتر از این رو قبول نمیکنه
    حتی روی میکرو کنترلرهای ۳۲ بیتی مثل STM32 همین بازه عددی هست.!
    توی مثال شما از ۰ تا ۱۰۲۳ رو مقدار دهی کردید

    • سلام
      خیر، دقت pwm در ماژول esp8266 برابر با ۱۰ بیت بوده که بین ۰ الی ۱۰۲۳ مقدار قبول می کند.

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

    • سلام
      نه، منظورم همین بود که شما گفتید، چون اندازه پایه ها ها کوچک هستند باید سیم کشی شوند.

  • سلام جناب صابری.
    تو توضیح پایه ها شما پایه های io4 و io5 رو به ترتیب برای SDA و SCL در ارتباط با I2C معرفی کردید ولی در کاتالوگی که خودتون لینکش رو گذاشتین درجواب دوستان در صفحه ۱۰ پایه های ورودی و خروجی ۲ و ۱۴ را به ترتیب برای SDA و SCL معرفی کرده ممکنه توضیح بدین که چطوریه البته من به فرمایش شما آموزش رو با ESP8266-12E شروع کردم.
    سپاسگذارم.

    • سلام و متشکرم از لطف شما
      در این رابطه توجه داشته باشید که به کمک کتابخانه Wire می توان هر دو پایه دلخواه را به عنوان i2c تعریف کرد. این کتابخانه به صورت پیشفرض پایه های ۴ و ۵ را به عنوان I2C در نظر می گیرد. چراکه پایه GPIO2 علاوه بر I2C، پایه TXD1 نیز هست. بدین ترتیب جهت جلوگیری از تداخلات احتمالی، این کتابخانه دو پایه ۴ و ۵ که آزاد هستند را به عنوان I2C در نظر می گیرد.

  • سلام دوستان من کلاً هرچی درباره این ماژول می‌خونم متوجه نمیشم حافظه که من توش برنامه بنویسم چنده

  • سلام خیلی ممنون از توضیحات خوبتون
    من یه پورت سریال مجازی رو با همون پایه ها که شما انجام دادید ساختم و اونارو به مبدل سریال وصل کردم ماژول دیتا رو به درست ارسال میکنه ولی اشتباه دیتارو دریافت میکنه چون بهش گفتم که دیتای دریافتی رو دوباره ارسال کن ولی فقط حرف اول اونچیزی رو که براش فرستادم برام درست پس میفرسته و بقیه تبدیل میشن به حروف گنگ می تونید لطفا راهنمایی کنید
    ماژول هم esp07

      • خیلی ممنون از پاسخ دادنتون مهندس صابری من مشکلم حل شد داشتم با کد ها و نرم افزار ور میرفتم که فهمیدم نسخه بورد esp8266 من ۲٫۴ است به همین دلیل این کتابخونه رو پوشش نمی داد و حتی ota رو هم پوشش نمی داد پس به عنوان یه پینهاد دوستان سعی کنن همیش جدید ترین نسخه رو داشته باشن

  • سلام.خیلی ممنون بابت اموزش عالی تون. فقط دو تا سوال….
    ۱_ ایا میه همین کار هار و نجوه بذنامه ن.یسی و پروگرام کردن رو با wemos d1 mini pro انجام داد؟؟ مثلا همین خوندن داده ها و این کار هارو باهاش مثل همسن کار شما انجام داد؟؟؟و اینکه پروگرام کردنش هم همینطوره؟؟؟
    ۲_برای esp8266-07 هم عملیه؟؟ باید برای ۰۷ هم همینکار هارو کرد؟؟
    ممنون میشم اگه جواب بدید

    • سلام و خواهش میکنم
      بله بر روی کلیه برد ها اعم از wemose ,7e , 01 و…. قابل اجراست

  • سلام
    من یک ESP8266-12E رو روی برد مبدل SMD به DIP لحیم کردم. ولی برای پروگرام با مبدل USB ، نمیدونم کدوم پایه های ESP رو به مبدل USB وصل کنم
    میشه راهنمایی بفرمایید