راهنمای جامع پایه های ESP8266: از کدام پایه های GPIO باید استفاده کنیم؟

فهرست مطالب

مقدمه

وقتی صحبت از اینترنت اشیا، هوشمندسازی و حتی الکترونیک می‌شود تراشه‌های ESP و برد‌های NODEMCU، با توجه به امکانات گسترده و قیمت مناسب، جایگاه ویژه‌ای دارند. آشنایی و استفاده از این برد‌‌‌ها کمک شایانی برای انجام پروژه‌های متنوع است. همچنین، کار با آن‌ها بسیار ساده بوده و حتی از نرم افزار Arduino IDE هم برای برنامه نویسی برد‌های NODEMCU می‌توان استفاده کرد.
ممکن است برای علم‌آموزانی که تازه در این زمینه قدم گذاشته‌اند وجود نام‌های متفاوت ESP وNODEMCU کمی گمراه کننده باشد که آیا منظور یکیست یا تفاوتی وجود دارد. لذا ابتدا به توصیف ESP8266 و NODEMCU، مدل‌های مختلف و تفاوت‌هایشان می‌پردازیم تا بتوانیم انتخاب درستی داشته باشیم.
سپس در چند تصویر، مشخصات مهم و کاربردی پین‌ها به طور خلاصه آورده شده که تقریبا تمام اطلاعات لازم را شامل می‌شود. اگر در ابتدای راه آموزش این برد‌ها هستید می‌توانید یک پرینت از تصاویر بگیرید و گوشه‌ای از فضای کار خود بچسبانید تا با نگاهی سریع آنچه را می‌خواهید بیابید.
بعد به تشریح کامل‌تر بخش‌های مختلف برد NODEMCU ESP8266 همراه با نحوه عملکرد و کد‌نویسی در Arduino IDE می‌پردازیم. در پایان این آموزش نه تنها با پین‌های ESP8266 آشنا شده‌ایم بلکه اصول استفاده از آن‌ها را نیز می‌آموزیم.

آنچه در این آموزش یاد می‌گیرید

• تفاوت ESP8266 و NODEMCU و ورژن‌های مختلف
• شروع کدنویسی برای برد‌های NODEMCU در نرم افزار Arduino IDE
• پایه‌های برد ESP8266
• کدام پین‌های GPIO در برد ESP8266 قابل استفاده است
• نحوه استفاده از بخش‌های مختلف برد، پروتکل‌های ارتباطی و…
• ملاحظات لازم در استفاده از پین‌ها

آیا ESP8266 همان NODEMCU است؟ ورژن‌های مختلف NODEMCU ESP8266

ESP8266 یک میکروکنترلر از خانواده ESP با قابلیت WIFI است که برای عملیات به حافظه فلش خارجی و آنتن نیاز دارد.
ماژول ها و بردهای مختلفی برای این میکرو کنترلر ساخته شده که ممکن است با نام ماژول ESP یا تنها ESP شناخته شوند.

برد توسعه چیست؟

بردهایی که برای کار با یک آی‌سی یا قطعه مشخص طراحی می‌شوند تا کار با آن‌ها راحت‌تر و امکانات جانبی بیشتری را فراهم آورد برد توسعه بر پایه آن قطعه می‌گویند (مثلا برد توسعه بر پایه ESP).
NODEMCU در واقع یک پلتفرم اینترنت اشیا است که شامل firmware ای است که روی ESP8266 اجرا می‌شود. اما به برد‌های توسعه بر پایه ESP8266 با فریم-ویر NODEMCU هم یک برد NODEMCU میگویند. (به بیان ساده تر: NODEMCU یک برد توسعه یافته است که بخش مرکزی و در واقع تنها هسته این برد را یک میکروکنترلر از نوع ESP8266 (وجدیدا ESP32) تشکیل می‌دهد.)

Types of ESP

پس ESP8266 و NODEMCU یکی نیستند، اما ممکن است گاهی به اشتباه منظور از ESP8266 همان برد توسعه NODEMCU باشد که شامل میکروکنترلر ESP8266 است.

پایه های ESP8266

دیتاشیت و پایه‌ های آی‌سی میکروکنترلر ESP8266

ESP8266 IC

دیتاشیت و پایه‌ های ESP8266 (ماژول ESP8266-12F)

ESP8266 Pinout

ما در این مقاله به شرح پایه‌های برد توسعه NODEMCU ESP8266 می‌پردازیم که اصول مشابهی با ماژول ESP8266 دارد.

پایه های NODEMCU ESP8266 Amica/DoIT , LOLIN

مدل‌های Amica/doit از نسل دو و مدل LiLon نسل 3 برد‌های توسعه NODEMCU محسوب می‌شوند.

Amica vs. LoLin

در حال حاضر متداول‌ترین ورژن‌های موجود در بازار، مدل‌های NODEMCU LiLon و NODEMCU amica هستند که در ابعاد و همچنین دو پایه شماره 2 و 3 تفاوت جزیی دارند و بقیه مشخصات پین‌های آن‌ها یکیست.

NodeMCU-ESP8266 Pinout

جدول مشخصات فنی برد NODEMCU

بخش‌های اصلی برد NODEMCU ESP8266

مشخصات و پایه‌ های NODEMCU ESP8266؛ تمام اطلاعات در یک تصویر

Pinout of 8266

پین‌ های ESP8266 مناسب برای ورودی/خروجی دیجیتال

اولویت اول

 مناسب ترین پین‌ها برای استفاده ورودی/خروجی دیجیتال، پایه‌های D1(GPIO5) و D2(GPIO4) هستند.

اولویت دوم

 بعد از آن‌ها پایه‌های D5(GPIO14), D4(GPIO12) ،D7(GPIO13) هم برای ورودی و خروجی دیجیتال می‌توانند مورد استفاده قرار گیرند، نکته اینکه این پین‌ها برای ارتباط SPI می‌باشند و استفاده از آن‌ها برای ورودی خروجی دیجیتال، امکان استفاده از پروتکل SPI برد NODEMCU را از ما می‌گیرد (بسیاری از تجهیزات از جمله برخی نمایشگر‌ها از این پروتکل برای راه‌اندازی و ارتباط استفاده می‌کنند. اگر همچین قطعه‌ای در مدار ندارید طبعاً محدودیت SPI دردسرساز نخواهد بود).

اولویت سوم

 D3(GPIO0) و D4(GPIO2) هم به عنوان خروجی دیجیتال میتوانند مورد استفاده قرار گیرند. نکته اینکه این دو پین از پین‌های مورد استفاده در هنگام بوت هستند. یعنی فعال (HIGH) یا غیرفعال (LOW) شدن این پین‌ها از طریق تجهیزات جانبی مثل رله، اپتوکوپلر، ترانزیستور یا هر مدل درایوری می‌تواند باعث بوت نشدن برد شود. در مورد این دو پین خاص، LOW کردن آن‌ها باعث بوت نشدن مدار می‌شود. این دو پین به صورت داخلی PULLUP شده اند. D3 (GPIO0) متصل به دکمه FLASH روی برد است.

سایر پین‌ها که بهتر است استفاده نشود

 پین TX(GPIO1) می‌تواند به عنوان خروجی مورد استفاده قرار گیرد هرچند که توصیه نمی‌شود. این پین خط ارسال داده از طریق پورت سریال است که برای ارتباط با کامپیوتر هم از این پورت استفاده می‌شود. همچنین موقع بوت هم HIGH است و LOW کردن آن هنگام بوت باعث بوت نشدن می‌شود.
پین RX(GPIO3) می‌تواند به عنوان ورودی استفاده شود. این پین خط دریافت داده از طریق پورت سریال است که برای ارتباط با کامپیوتر هم از این پورت استفاده می‌شود. همچنین موقع بوت HIGH است.
پینD0(GPIO16) به عنوان ورودی، روتین وقفه ندارد و به عنوان خروجی هم PWM یا I2C را ساپورت نمی‌کند. همچنین موقع بوت HIGH است.
پین D8(GPIO15) می‌تواند به عنوان خروجی مورد استفاده قرار گیرد. اگر موقع بوت شدن HIGH شود باعث بوت نشدن برد می‌شود.

ADC و ورودی آنالوگ در برد NODEMCU ESP8266 و نحوه عملکرد در آردوینو IDE

ADC (Analog Digital Convertor) واحد تبدیل مقدار آنالوگ به دیجیتال است. مثلا خروجی یک سنسوری که مقدار ولتاژ آنالوگ دارد باید با ورودی آنالوگ خوانده و تبدیل به مقدار دیجیتال شود تا بتوان از آن در میکروکنترلر استفاده کرد.

چیپ و یا ماژول ESP8266 دارای یک کانال ADC ده بیتی است با بازه ولتاژ 0-1v. این بازه در برد NODEMCU به 0-3.3v افزایش یافته. این افزایش تنها با یک تقسیم مقاومتی ساده به دست می‌آید. تصویر زیر چگونگی افزایش این بازه را نشان می‌دهد.

پین A0 (ADC0) تنها ورودی آنالوگ برد NODEMCU ESP8266 است.

در مثال زیر، ولتاژ پایه وسط پتانسیومتر خوانده شده و در پنجره سریال نمایش داده می‌شود.

شماتیک و کد


void setup() {
 Serial.begin(9600);
}

void loop() {
 Serial.print("ADC Value: ");Serial.println(analogRead(A0));
 delay(300);
}
Arduino

پین‌ های پروتکل SPI در برد NODEMCU ESP8266 و نحوه عملکرد در آردوینو IDE

در سمت چپ تصویر، شش پین (SD3, SD2, SD1,SD0 خطوط دیتا، SDIO_CLK خط کلاک و SDIO_CMD که همان Chip Select است.) وجود دارد که برای برقراری ارتباط از نوع Quad-SPI با حافظه فلش به طور داخلی استفاده شده است. این پین‌ها عملا استفاده خارجی ندارند و نباید از آن‌ها استفاده کرد.
همچنین برد NODEMCU ESP8266 دارای SPI سخت افزاری (Hardware SPI) با 4 پین در دسترس برای ارتباط SPI است.(D5,D6,D7,D8) از این 4 پین می‌توان برای اتصال به هر قطعه‌ای که پروتکل SPI را پشتیبانی می‌کند استفاده کرد.

NodeMCU_SPI Pins

• HSCLK D5(GPIO14): پایه کلاک SPI
• HMISO D6(GPIO12): پایه MISO (Master In Slave Out)
• HMOSI D7(GPIO13): پایه MOSI (Master Out Slave In)
• HCS D8(GPIO15): پایه CS (Chip Select) ، Master میتواند Slave مورد نظر را از طریق برقراری ارتباط با این پایه انتخاب کند.

مثال: برقراری ارتباط SPI بین برد NODEMCU و آردوینو UNO

در مثال زیر، آردوینو به عنوان اسلیو و NODEMCU به عنوان مستر پیکربندی شده‌اند. مستر کلمه ‘HEllO UNO’ را به اسلیو ارسال میکند و اسلیو، پیام دریافتی را در پورت سریال نمایش می‌دهد.

شماتیک

NodeMCU_SPI Interface Circuit

کد NODEMCU به عنوان Master


#include<SPI.h>
char buff[]="Hello UNO\n"; 
void setup() {
 SPI.begin(); /* begin SPI */
}

void loop() {
 for(int i=0; i<sizeof buff; i++){ /* transfer buff data per second */
 SPI.transfer(buff[i]); // transfer byte i from buffer buff on SPI line
 delay(1000); 
 }
}
Arduino

کد Arduino UNO به عنوان Slave


#include <SPI.h>

char buff [100];
volatile byte index;
volatile bool receivedone; /* use reception complete flag */

void setup (void)
{
 Serial.begin (9600);
 SPCR |= bit(SPE); /* Enable SPI */
 pinMode(MISO, OUTPUT); /* Make MISO pin as OUTPUT */// <<---*** in slave device MISO must to define OUTPUT
 index = 0;
 receivedone = false;
 SPI.attachInterrupt(); /* Attach SPI interrupt */// activate spi interrupt
}

void loop (void)
{
 if (receivedone) /* Check and print received buffer if any */
 {
 buff[index] = 0;
 Serial.println(buff);
 index = 0;
 receivedone = false;
 }
}

// SPI interrupt routine
ISR (SPI_STC_vect)
{
 uint8_t oldsrg = SREG;
 cli();
 char c = SPDR;
 if (index <sizeof buff)
 {
 buff [index++] = c;
 if (c == '\n'){ /* Check for newline character as end of msg */
 receivedone = true;
 }
 }
 SREG = oldsrg;
}
Arduino

پین‌ های پروتکل I2C در برد ESP8266 و نحوه عملکرد در آردوینو IDE

پین‌های D1(GPIO5) و D2(GPIO4) پین‌های مناسب ارتباط I2C هستند.

I2C Pins of NodeMcu

برقراری ارتباط I2C بین NODEMCU و Arduino UNO با نرم افزار آردوینو IDE

در مثال زیر NODEMCU به عنوان مستر یک پیغام رشته‌ای hello به آردوینو به عنوان اسلیو ارسال میکند و آردوینو هم به عنوان پاسخ همین کار را می‌کند. پیام‌ها به پورت سریال کامپیوتر ارسال می‌شود و در پنجره سریال قابل مشاهده است.

شماتیک ارتباط I2C

I2C Interface Circuit

کد برد NODEMCU ESP8266


#include <Wire.h> // library for i2c communication

void setup() {
 Serial.begin(9600); /* begin serial for debug */
 Wire.begin(D1, D2); /* join i2c bus with SDA=D1 and SCL=D2 of NODEMCU */
}

void loop() {
 Wire.beginTransmission(8); /* begin with device address 8 */
 Wire.write("Hello Arduino"); /* sends hello string */
 Wire.endTransmission(); /* stop transmitting */

 Wire.requestFrom(8, 13); /* request & read data of size 13 from slave */
 while(Wire.available()){
 char c = Wire.read();
 Serial.print(c);
 }
 Serial.println();
 delay(1000);
}
Arduino

کد برد آردوینو


#include <Wire.h>

void setup() {
 Wire.begin(8); /* join i2c bus with address 8 */
 Wire.onReceive(receiveEvent); /* register receive event */
 Wire.onRequest(requestEvent); /* register request event */
 Serial.begin(9600); /* start serial for debug */
}

void loop() {
 delay(100);
}

// function that executes whenever data is received from master
void receiveEvent(int howMany) {
 while (0 <Wire.available()) {
 char c = Wire.read(); /* receive byte as a character */
 Serial.print(c); /* print the character */
 }
 Serial.println(); /* to newline */
}

// function that executes whenever data is requested from master
void requestEvent() {
 Wire.write("Hello NODEMCU"); /*send string on request */
}
Arduino

پین‌ های پروتکل سریال (UART) در برد ESP8266

UART Pins of NodeMCU

NODEMCU بر پایه ESP8266 دارای دوپورت ارتباط UART است: UART0 و UART1.
UART0 که همان پایه‌های RX/TX روی برد است و به طور کامل قابل استفاده است.
• RX(GPIO3) RXD0 Data Receive Pin (پین دریافت داده)
• TX(GPIO1) TXD0 Data Transmit Pin (پین ارسال داده)
UART1 تنها پایه‌ی ارسال داده آن (TXD1/GPIO2/D4) قابل استفاده است.
• D4(GPIO2) TXD1 Data Transmit Pin (پین ارسال داده)

PWM در برد ESP8266 و نحوه عملکرد در آردوینو IDE

PWM چیست؟

“Pulse Width Modulation” تکنیکی است که با کنترل عرض روشن/خاموش بودن پالس‌های خروجی، مقدار موثر ولتاژ خروجی را کنترل می‌کند. به کمک آن میتوانیم به عنوان مثال سرعت یک موتور دی‌سی را کنترل و یا نور یک ال‌ای‌دی را کم و زیاد کنیم.
ESP8266 اجازه اجرای PWM نرم‌افزاری را روی همه پین‌های GPIO0 تا GPIO15 می‌دهد.
رزولوشن سیگنال PWM در ESP8266، ده بیت و رنج فرکانس آن از 1Hz تا 1Khz قابل تغییر است.
مثال:
خواندن مقدار آنالوگ از A0 و اعمال سیگنال PWM متناسب با آن به D6 برای کم و زیاد کردن نور ال‌ای‌دی.

شماتیک

کد


uint8_t LEDpin = D6;
/* By default PWM frequency is 1000Hz and we are using same 
 for this application hence no need to set */
void setup(){
 Serial.begin(9600);
 analogWrite(LEDpin, 512); /* set initial 50% duty cycle */
}

void loop(){
 uint16_t dutycycle = analogRead(A0); /* read continuous POT and set PWM duty cycle according */
 if(dutycycle > 1023) dutycycle = 1023;/* limit dutycycle to 1023 if POT read cross it */
 Serial.print("Duty Cycle: "); Serial.println(dutycycle);
 analogWrite(LEDpin, dutycycle);
 delay(100);
}
Arduino

Interrupt در برد NODEMCU ESP8266

Interrupt یا روتین وقفه چیست؟

بگذارید با یک مثال توضیح بدهیم. فرض کنید یک سری کارها به صورت پیوسته و حلقه‌وار در حال انجام هستید، مثلا چک کردن درب خانه که کسی پشت درب نباشد چون زنگی برای در تعبیه نشده است، یعنی شما کارهای مشخصی را در یک حلقه به ترتیب انجام می‌دهید از جمله چک کردن درب خروجی. حال مشکل چیست؟
یک اینکه شما در هر حلقه کار باید حتما درب را چک کنید، دوم اینکه زمانیکه در حال انجام کار دیگری هستید اگر کسی پشت در باشد آنقدر باید صبر کند تا کارهای دیگر را انجام دهید و سپس نوبت چک کردن درب برسد (در اینصورت، کسی هم اگر آمده باشد تا حالا رفته است). این روش اصلا بازدهی خوبی ندارد. پس چاره چیست؟
یک زنگ بخرید و نصب کنید، آن وقت دیگر نیازی نیست به صورت مداوم و حلقه وار درب را چک کنید. با صدای زنگ درب شما متوجه میشید که کسی پشت درب هست و دست از کار می‌کشید تا در را باز کنید (البته اگر کاری که در حال انجامش هستید را بتوانید متوقف کنید)، وقتی جواب زنگ در را دادید برمی‌گردید و به ادامه کار قبلی می‌‌پردازید.
Interrupt یا وقفه برای ما مثل زنگ در عمل می کند. مثلا یک روتین وقفه برای پین شماره n مشخص میکنید که اگر اتفاق بیفتد یک کار مشخصی را انجام دهد، مثلا با صفر شدن GPIO4 که خروجی یک سنسور است، باید به سرعت یک سیستم هشداری را فعال کند. اگر روتین وقفه را برای پین مورد نظر فعال کرده باشید به محض رخ دادن اتفاق تعریف شده (در اینجا low شدن GPIO4) برنامه در هرجایی از اجرا که بود توقف میکند، به روتین تعریف شده میپردازد و سپس برمی‌گردد به جایی از برنامه که از قبل در حال اجرای آن بود.
حال اگر از چند وقفه استفاده کنیم و همه باهم اتفاق بیفتند چه؟ (مثلا هم زنگ در به صدا در آید و هم زنگ گوشی)
آن وقت شما به موردی می‌پردازید که اولویت بالاتری دارد، اولویتی که از قبل تعریف شده است. در NODEMCU یا هر میکروکنترلر دیگری هم چندین مدل وقفه وجود دارد که از قبل اولویت بندی شده اند.
یک مدل وقفه، وقفه پین‌های I/O هستند. برای پایه‌های NODEMCU هم این ویژگی قرار داده شده و میتوانید از آن به راحتی استفاده کنید.
پایه‌های D1 تا D8 مناسب برای استفاده سیستم interrupt هستند. D0 (GPIO16) ویژگی اینتراپت ندارد (به نظرم این پین را کامل کنار بگذارید).

کار با وقفه NODEMCU در آردوینو


attachInterrupt(pin, ISR(callback function), interrupt type/mode);
Arduino

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

Arduino's Interrupt function

detachInterrupt(pin)
Arduino

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

شماتیک مدار INTERRUPT برد NODEMCU ESP8266

Switch Interrupt for NodeMCU

کد وقفه برد NODEMCU در آردوینو IDE


uint8_t GPIO_Pin = D2;

void setup() {
 Serial.begin(9600);
 attachInterrupt(digitalPinToInterrupt(GPIO_Pin), IntCallback, RISING);
}

void loop() {
}

void IntCallback(){
 Serial.print("Stamp(ms): ");
 Serial.println(millis());
 }
Arduino

پین‌های درگیر هنگام بوت شدن

GPIO16 / D0      pin is high at BOOT
GPIO0 / D3        boot failure if pulled LOW
GPIO2 /D4         pin is high on BOOT, boot failure if pulled LOW
GPIO15 /D8       boot failure if pulled HIGH
GPIO3 /RX         pin is high at BOOT
GPIO1 /TX         pin is high at BOOT, boot failure if pulled LOW
GPIO10 /SD3    pin is high at BOOT
GPIO9 /SD2     pin is high at BOOT

پایه‌های کنترل برد NODEMCU

پایه EN (Enable)

چیپ ESP زمانی فعال است که پایه High , EN باشد. زمانی که این پایه LOW شود چیپ ESP در حالت حداقل مصرف انرژی قرار می‌گیرد. ممکن است نام این پین در برخی مدل ها CH_PD باشد.

پایه (Reset) RST

RST پین ریست ESP8266 است که به صورت پیش‌فرض HIGH است. زمانی که LOW بشود در لحظه سیستم ESP8266 را ریست می‌کند. مانند فشار دادن دکمه RESET روی برد.

پایه FLASH/ D3/GPIO0

اگر این پایه را low کنید (نگه‌ داشته باشید) و پایه EN را low کنید برد در حالت Flashing قرار می‌گیرد.
اگر این پایه را low کنید (نگه‌ داشته باشید) و دکمه RESET را low کنید برد در حالت Uploading قرار می‌گیرد.
عملکرد این پایه دقیقا مانند عملکرد دکمه FLASH روی برد است.

پایه WAKE / GPIO16 / D0

مد Deep Sleep چیست؟ در این مد فقط سیستم RTC (real time counter) فعال است و بقیه قسمت‌ها غیر فعال می‌شوند تا مصرف انرژی به کمترین مقدار خود برسد.
پین WAKE برای بیدار کردن ESP8266 از حالت deep sleep مورد استفاده قرار می‌گیرد. برای استفاده از این ویژگی نیاز است که این پایه را به پایه ریست متصل کنید. یعنی چه؟ وقتی برد روشن است وضعیت پایه High, Reset است. وقتی پایه Low, Reset شود برد ریست می‌شود. زمانی که ما یک تایمر deep sleep را با یک زمان بیدار شدن پیکر بندی می‌کنیم، GPIO16 با اتمام زمان مشخص شده به حالت LOW میرود (این همان ویژگی wake این پایه است). با وصل بودن GPIO16 به RST، این پین نیز در همان لحظه LOW شده و باعث ریست و در نتیجه خروج برد از حالت deep sleep می‌شود.
این پایه در زمان بوت شدن HIGH است و تا 1 ولت کاهش می‌یابد.

پایه‌های خطوط پاور در NODEMCU ESP8266

در شکل زیر می توانید پایه‌های خطوط توان را مشاهده کنید.

Power Pins of NodeMCU

• Vin: این پایه تنها پایه ولتاژ ورودی مدار است (البته به جز ولتاژ ورودی پورت usb)، مقدار مجاز ولتاژ ورودی برد NODEMCU، 4.5 الی 10 ولت است.
• ground : GND

3v3: پایه‌های ولتاژ خروجی رگولاتور روی برد هستند. حداکثر جریان مجاز کل خروجی 600 میلی آمپر است. سعی کنید حتی به این عدد نزدیک هم نشوید. برای راه‌اندازی مدارات دیگر که مصرف بیشتر از چند ده میلی آمپر دارند، به ‌جای استفاده از برد میکروکنترلر به عنوان منبع، بهتر است از یک منبع خارجی استفاده کنید (در آن صورت یکی کردن GND های مختلف فراموش نشود).

• 5V*: در برد‌های ورژن LiLon پایه شماره 3 پایه ولتاژ خروجی 5v است. این پایه در ورژن Amica پایه RSV بوده و به جایی متصل نیست.

برنامه نویسی NODEMCU در Arduino IDE

فراهم بودن امکان کدنویسی بردهای NODEMCU در محیط نرم‌افزار آردوینو، شاید یکی از دلایل محبوبیت این بردها باشد.
برای کار با ESP8266 در آردوینو کافیست چند قدم ساده را انجام دهیم.

قطعات مورد نیاز

NODEMCU ESP8266 × 1

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

Arduino IDE

آماده سازی نرم افزار Arduino IDE برای برنامه‌نویسی NODEMCU

1- ابتدا آخرین نسخه نرم‌افزار آردوینو IDE را از لینک بالا دانلود کنید.
2- پس از نصب نرم افزار Arduino IDE، برنامه را باز کنید و از مسیر File>preferences پنجره زیر را باز کنید.

3- لینک زیر را کپی و در قسمت نشان داده شده پیست کنید. سپس گزینه ok را بزنید.
HTTP://ARDUINO.ESP8266.COM/STABLE/PACKAGE_ESP8266COM_INDEX.JSON
4- حال مسیر Tools>Board>Board Manager را بروید تا پنجره زیر باز شود. در این پنجره ESP8266 را سرچ کنید و مانند تصویر ESP8266 by ESP8266 community را پیدا و گزینه install را کلیک کنید.

Installing the ESP8266 Board

5- سپس از مسیر Tools> Board مدل ESP استفاده شده را پیدا و انتخاب کنید.
حال میتوانید در محیط آردوینو IDE هم برای ماژول های ESP8266 و هم بردهای NODEMCU مبتنی بر ESP8266 برنامه بنویسید.

جمع بندی

برد‌های NODEMCU، بردهای توسعه یافته بر مبنای میکروکنترلرهای ESP8266 یا ESP32 هستند که با فراهم آوردن امکانات جانبی، کار با این میکروکنترلرها را بسیار ساده کرده‌اند. برخورداری از ارتباط وای فای که مشخصه بارز این میکروکنترلرهاست، استفاده و راه‌اندازی به نسبت آسان و قیمت مناسب آن در مقایسه با بردهای مشابه باعث شده تا این برد‌ها گزینه‌ای مناسب برای انواع پروژه‌های IoT محسوب شوند.
در مورد استفاده از پایه‌های GPIO برد NODEMCU ESP8266 به طور خلاصه باید گفت که از پایه‌های سمت چپ برد (اگر برد را طوری بگیریم که پورت یواس‌بی پایین و آنتن بالا باشد) تنها پایه A0 آن هم به عنوان ورودی آنالوگ در دسترس است. GPIO6 تا GPIO11 که در همین سمت قرار می‌گیرند برای استفاده خارجی نیستند. مناسب‌ترین گزینه‌ها برای ورودی/خروجی دیجیتال، پین‌های D1(GPIO5) و D2(GPIO4) هستند. این پین‌ها نقش پین‌های پروتکل I2C را نیز ایفا می‌کنند. پین‌های D5,D6,D7,D8 پین‌های ارتباط SPI و پین‌های RX,TX برای ارتباط سریال به کار می‌روند. شاید یکی از نقاط ضعف بردهای NODEMCU تعداد کم پایه‌های GPIO قابل استفاده باشد. برای رفع این مشکل در پروژه‌ای که نیاز به تعداد بیشتری ورودی/ خروجی داریم می‌توانیم از واسط‌‌ ‌های افزاینده ورودی/خروجی استفاده کنیم.
برای کدنویسی و راه‌اندازی بردهای ESP میتوان از ARDUINO IDE استفاده کرد فقط کافیست در قسمت برد منیجر این نرم‌افزار، برد مورد نیاز را اضافه کرد.

آموزش های مشابه

Comments (5)

  • داریوش تصدیقی Reply

    این مقاله فوق‌العاده بود… درود بر شما…

    جولای 5, 2023 at 6:55 ق.ظ
    • محمد دمیرچی Reply

      خواهش میکنم

      جولای 5, 2023 at 4:36 ب.ظ
  • علی نظری Reply

    فوق‌العاده بود

    مارس 30, 2024 at 4:20 ب.ظ
  • امیر Reply

    بسیار عالی
    مختصر
    کاربردی
    مفید

    اکتبر 20, 2024 at 1:13 ب.ظ
  • علی ابرایمی Reply

    بسیار عالی

    دسامبر 19, 2024 at 6:36 ب.ظ

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

نشانی ایمیل شما منتشر نخواهد شد.