برد Nodemcu

شناخت پایه‌های GPIO برد NodeMcu با نرم افزار Arduino IDE

nodemcu-gpio-pin-address-in-arduino-ide-digispark
نوشته شده توسط پریسا پوربلورچیان

برد NODEMCU به واسطه ی طراحی فوق العاده و امکانات متمایزی که در اختیار ما قرار داده است، امکان طراحی و اجرای پروتوتایپ اولیه ی پروژه های IOT اینترنت اشیا برای ما ساده تر شده است. در این آموزش کوتاه به معرفی پایه های GPIO برد خواهیم پرداخت. در ادامه آموزش پایه‌های GPIO برد NodeMcu با مرجع تخصصی آردوینو به زبان فارسی دیجی اسپارک همراه باشید.

 

پایه‌های GPIO برد NodeMcu - دیجی اسپارک


 GPIO چیست؟


GPIO یا General Purpose Input/Output به معنی ورودی/خروجی عمومی یا ورودی/خروجی کلی است. این عبارت برای توصیف پین‌های موجود در برخی از میکروکنترلرها و سیستم‌های الکترونیکی استفاده می‌شود که به طور اختصاصی برای اتصال و کنترل اجزای دیگر استفاده می‌شود.GPIO به میکروکنترلر اجازه می‌دهد تا با سنسورها به صورت دیجیتال ارتباط برقرار کند. برای مثال، می‌توان از پین‌های GPIO برای اتصال و کنترل LEDها، دکمه‌ها، سنسورها، موتورها، نمایشگرها و سایر قطعات الکترونیکی استفاده کرد.پین‌های GPIO می‌توانند به دو حالت عمل کنند: حالت ورودی و حالت خروجی. در حالت ورودی، پین می‌تواند اطلاعات دیجیتال را از دستگاه خارجی دریافت کند. در حالت خروجی، پین می‌تواند اطلاعات دیجیتال را به دستگاه خارجی ارسال کند. وضعیت (خروجی یا ورودی) و سطح (مثبت یا منفی) سیگنال‌هایی که به پین‌های GPIO وصل می‌شوند، می‌توانند توسط کد نرم‌افزاری کنترل شوند

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

برای مثال، در یک سناریو ساده، می‌توانید یک LED را به یک پین GPIO وصل کنید و سپس با تنظیم وضعیت پین به حالت خروجی و ارسال سطح مورد نظر (مثلاً برق تغذیه)، LED را روشن یا خاموش کنید. همچنین می‌توانید دکمه‌ای را به یک پین GPIO وصل کنید و با خواندن وضعیت پین به عنوان ورودی، عملکردی مانند راه‌اندازی یک عملیات یا تغییر وضعیت دستگاه را فعال کنید.در برنامه‌نویسی میکروکنترلرها و سیستم‌های الکترونیکی، واجدانِ مجموعه‌ای از توابع و روش‌ها برای کنترل پین‌های GPIO وجود دارند. این توابع توسط محیط توسعه یا کتابخانه‌های مربوطه فراهم می‌شوند و شامل عملیات مانند تنظیم وضعیت پین به ورودی یا خروجی، خواندن و نوشتن به پین، تنظیم سطح پین (مانند برق تغذیه یا زمین) و سایر عملیات مرتبط است.

مهمترین نکته در استفاده از پین‌های GPIO این است که باید به محدودیت‌ها و ویژگی‌های آن‌ها توجه کنید. به عنوان مثال، باید از حداکثر جریان مجاز برای پین‌های GPIO و تحمل ولتاژ مناسب آن‌ها اطمینان حاصل کنید. همچنین، در صورت نیاز به اتصال قطعات با سطوح ولتاژ متفاوت، باید از استفاده از منطقی‌ها و قطعات واسط مانند مقاومت‌های منطقی و تراشه‌های واسط (مثل مبدل‌های سطح) استفاده کنید.  GPIO مخفف عبارت General – Purpose input / output است که پین های آی سی به شمار می‌آید. توسط این پایه ها ارتباط با سخت افزارهای دیگر فراهم شده و با تمامی سنسورهایی که ولتاژ آن ها همخوانی دارد، قابل تست و راه اندازی است. پایه های آی سی میتوانند به صورت ورودی و خروجی در هر زمانی بسته به نوع نیاز ما در کدها تعریف شده و عمل خاصی را انجام دهند. برد Nodemcu امکان دسترسی به پایه های GPIO را توسط تراشه ESP8266 ساده تر می‌کند.

برد NodeMCU یک برد توسعه بر پایه میکروکنترلر ESP8266 است که قابلیت اتصال به اینترنت را دارد. برای استفاده از پین‌های GPIO در برد NodeMCU، پایه‌های مربوطه را می‌توان به شکل زیر مشخص کرد.NodeMCU دارای یک مجموعه از پین‌های GPIO است که با عدد ۰ تا ۱۶ شماره گذاری شده‌اند. این شماره‌گذاری بر اساس شماره پین‌های GPIO استاندارد بر مبنای ESP8266 انجام شده است. پایه‌های GPIO در برد NodeMCU به صورت زیر است:
  • D0 (پین ۱۶)
  • D1 (پین ۵)
  • D2 (پین ۴)
  • D3 (پین ۰)
  • D4 (پین ۲)
  • D5 (پین ۱۴)
  • D6 (پین ۱۲)
  • D7 (پین ۱۳)
  • D8 (پین ۱۵)
  • D9 (پین ۳)
  • D10 (پین ۱)
  • D11 (پین ۹)
  • D12 (پین ۱۰)
  • D13 (پین ۱۱)
علاوه بر پین‌های GPIO معمولی، برد NodeMCU دارای پین‌های دیگری نیز است که به منظور اتصال و کنترل قطعات خاصی مانند سنسور DHT11 و LED RGB به کار می‌روند. این پین‌ها عبارتند از:
  1. DHT11 (پین ۷) – برای اتصال سنسور دما و رطوبت DHT11
  2. SDA (پین ۶) – برای اتصال به خط داده I2C (مانند اتصال به سنسورهای I2C)
  3. SCL (پین ۵) – برای اتصال به خط ساعت I2C (مانند اتصال به سنسورهای I2C)
  4. LED RGB (پین‌های ۴، ۵ و ۱۲) – برای کنترل رنگ LED RGB
این لیست تا حد مورد نیاز پایه‌های GPIO موجود در برد NodeMCU را بررسی می‌کند. اما، توجه داشته باشید که ممکن است در بردهای مختلف NodeMCU با ویژگی‌ها و نسخه‌های متفاوت، پایه‌ها و شماره‌گذاری متفاوتی وجود داشته باشد.
  • D0 (پین ۱۶)
  • D1 (پین ۵)
  • D2 (پین ۴)
  • D3 (پین ۰)
  • D4 (پین ۲)
  • D5 (پین ۱۴)
  • D6 (پین ۱۲)
  • D7 (پین ۱۳)
  • D8 (پین ۱۵)
  • D9 (پین ۳)
  • D10 (پین ۱)
  • D11 (پین ۹)
  • D12 (پین ۱۰)
  • D13 (پین ۱۱)
  • D14 (پین ۶) – پین SDA برای اتصال به خط داده I2C
  • D15 (پین ۸) – پین SCL برای اتصال به خط ساعت I2C

پایه‌های D0 تا D13 پایه‌های GPIO استاندارد هستند که قابلیت عملیات ورودی و خروجی را دارند. پایه‌های D14 و D15 نیز برای اتصال به خطوط داده و ساعت I2C استفاده می‌شوند.اگر قصد استفاده از پایه‌های GPIO در برد NodeMCU را در زبان برنامه‌نویسی Lua داشته باشید، می‌توانید از کتابخانه gpio استفاده کنید. این کتابخانه دسترسی به پایه‌های GPIO را فراهم می‌کند و امکان کنترل ورودی و خروجی را به شما می‌دهد.همچنین، اگر از برنامه‌نویسی با زبان Arduino بر روی برد NodeMCU استفاده می‌کنید، می‌توانید از کتابخانه ESP8266WiFi و ESP8266WebServer برای کنترل پایه‌های GPIO و تعامل با شبکه استفاده کنید.در هر صورت، مطالعه مستندات و راهنمای مربوط به برد NodeMCU و زبان برنامه‌نویسی مورد استفاده خود (مانند Lua یا Arduino) می‌تواند به شما کمک کند تا نحوه استفاده صحیح از پایه‌های GPIO را در این برد بیاموزید.

پایه های GPIO برد Nodemcu برپایه ESP8266 - دیجی اسپارک

 

نام پایه ها در برد Nodemcu با برد تراشه ESP8266 متفاوت است. جدول زیر را با هم بررسی کنیم.

اسم پایه ها در برد NODEMCU شماره پایه های داخلی ESP8266
D0 GPIO16
D1 GPIO5
D2 GPIO5
D3 GPIO0
D4 GPIO2
D5 GPIO14
D6 GPIO12
D7 GPIO13
D8 GPIO15
D9 = RX GPIO3
D10 = TX GPIO1
D11 = SD2 GPIO9
D12 = SD3 GPIO10

 

نکته ی اصلی در ترتیب پایه ها اشتباه نشدن شماره های آن هاست که ممکن است با یک اشتباه ساده در کدنویسی و اتصال اشتباه پایه تا مدتی دنبال روش رفع عیب باشید!!

  • از GPIO با شماره های ۱, ۳, ۹, ۱۰ به صورت معمول به عنوان ورودی و خروجی استفاده نمی‌شود.
  • GPIO با شماره های D1 , D2, D5, D6, D7 در دسترس و قابل استفاده است.
  • پایه های D8, RX , TX در زمان بوت شدن ممکن است خطاهایی در برنامه ایجاد کند که پیشنهاد می‌شود از آن ها استفاده نکنید.

تراشه ESP8266 با توجه به اینکه از SOC ساخته شده است و بسیاری از GPIO ها به صورت داخلی استفاده می‌شود، در مجموع ۱۱ پایه GPIO در اختیار ما قرار دارد. دو پایه از ۱۱ پایه GPIO یعنی TX, RX برای ارتباط سریال و ارتباط با دیگر سخت افزارها و کامیپوتر استفاده می‌شود. با این وجود تا این لحظه فقط ۹ پایه دیجیتال D0 تا D8 تحت کنترل و اختیار ما است. همانطور که اشاره شد چهار پایه ۱ و ۳ و ۹ ۱۰ به دلیل استفاده در فرآیندهای داخلی استفاده نمی‌شود اما از پایه SD3 یا همان D12 برای برقراری ارتباط GPIO/ PWM/ INTERRUPT قابل تست و استفاده است. پایه D0 – GPIO16 فقط برای خواندن و نوشتن READ AND WRITE استفاده می‌شود و نمیتوانید تاثیری در مدار بگذارد.

 


جزییات پایه‌های GPIO


در این جدول تمامی پایه های قابل استفاده در برد NODEMCU نوشته شده است. شماره پایه برد با شماره GPIO به همراه نقش ورودی INPUT, نقش خروجی OUTPUT و عملکرد آن ها کامل شرح داده شده است. مطابق با جدول و نیاز پروژه پایه های مناسب را انتخاب کرده و در کدنویسی برنامه از آن ها استفاده کنید.

پایه ها GPIO ورودی خروجی سایر توضیحات
D0 GPIO16 اینتراپت داخلی ندارد از PWM و I2C پشتیبانی نمی‌کند. در زمان BOOT شدن همیشه HIGH است و برای DEEP SLEEP  در برد استفاده می‌شود.
D1 GPIO5 به عنوان ورودی قابل استفاده است به عنوان خروجی قابل استفاده است I2C = SCL
D2 GPIO4 به عنوان ورودی قابل استفاده است به عنوان خروجی قابل استفاده است I2C = SDA
D3 GPIO0 پایه PULLED UP به عنوان خروجی قابل استفاده است مستقیم به کلید فلش در برد متصل است و اگر غیرفعال باشد، بوت موفق نیست.
D4 GPIO2 پایه PULLED UP به عنوان خروجی قابل استفاده است به ال ای دی داخلی برد متصل است
D5 GPIO14 به عنوان ورودی قابل استفاده است به عنوان خروجی قابل استفاده است SPI = SCLK
D6 GPIO12 به عنوان ورودی قابل استفاده است به عنوان خروجی قابل استفاده است SPI = MISO
D7 GPIO13 به عنوان ورودی قابل استفاده است به عنوان خروجی قابل استفاده است SPI = MOSI
D8 GPIO15 مستقیم به  GND وصل است به عنوان خروجی قابل استفاده است اما پیشنهاد نمی‌شود. SPI = CS
A0 ADC0 ANALOG ورودی  

 

 


خطر بوت نشدن!


بعضی از پایه های GPIOدر زمان بوت شدن استفاده می‌شوند به همین دلیل فعال شدن و غیرفعال شدن هر یک از این پایه ها در زمان درست ممکن است مانع بوت شدن برد NODEMCU شوید. همچنین در نظر داشته باشید اتصال هر دیوایس، سنسور و حتی کوچکترین قطعه الکترونیکی در مسیر اتصال ممکن است باعث HIGH و LOW شدن پایه ها شود و در نتیجه مانع از بوت شدن شود که بایستی این مورد توسط خودتان تست و بررسی شود. ال ای دی داخلی برد در بعضی از بردها D4 و در برخی از بردها GPIO16 است.

 پایه GPIO0

این پایه پس از گدشت ۱۰۰ میلی ثانیه پایدار شده و HIGH می‌شود. پس قبل از این زمان ممکن است وضعیت آن LOW شود و برد NODEMCU بوت نشود.

پایه GPIO1

در مدت زمان ۵۰ میلی ثانیه غیر فعال است و سپس HIGH می‌شود.

پایه GPIO2

این پایه پس از گدشت ۱۰۰ میلی ثانیه پایدار شده و HIGH می‌شود.

پایه GPIO3

در مدت زمان ۵۰ میلی ثانیه غیر فعال است و سپس HIGH می‌شود.

پایه GPIO9

این پایه در زمان بوت شدن HIGH است.

پایه GPIO10

این پایه در زمان بوت شدن HIGH است.

پایه GPIO15

این پایه در زمان بوت شدن LOW است.

پایه GPIO16

این پایه در زمان بوت شدن HIGH است و تا ۱ ولت کاهش پیدا می‌کند.

 

 

 


پایه‌های فعال در زمان بوت شدن


بعضی از پایه ها در زمان بوت شدن به ولتاژ ۳٫۳ ولت میرسند. به همین دلیل اگر رله و قطعه ای با ولتاژ بیشتر به این پایه متصل باشد، برد بوت BOOT نخواهد شد.

GPIO16
GPIO3
GPIO1
GPIO10
GPIO9

 


پایه ورودی آنالوگ


برد NODEMCU فقط و فقط یک پایه ADC با عنوان A0 دارد! شاید در لحظه ی اول دردناک باشد، اما جای نگرانی نیست! تا به امروز بسیاری از مبدل های I2C تولید شده است که تعداد پایه های آنالوگ بیشتری در اختیار ما قرار میدهد. ولتاژ ورودی در این پایه بین ۰ تا ۳٫۳ ولت و در برد از تقسیم ولتاژ داخلی استفاده می‌کنند.

 

 


پایه‌های I2C برد NodeMcu


برد ESP8266 به تنهایی از I2C پشتیبانی نمی‌کند اما در نرم افزار امکان اختصاص پایه های I2C به برد فراهم است.

  • GPIO5: SCL
  • GPIO4: SDA

 


پایه‌های SPI برد NodeMcu


پایه های SPI در ESP8266 به صورت زیر است.

  • GPIO12: MISO
  • GPIO13: MOSI
  • GPIO14: SCLK
  • GPIO15: CS

 

 


پایه‌های PWM برد NodeMcu


تمامی پایه های ESP8266 در نرم افزار امکان استفاده از پایه های ورودی و خروجی در GPIO را در نقش PWM فراهم می‌کند!!!!

 


پایه‌های INTERRUPT


پایه‌های GPIO برد NodeMcu با تراشه ESP8266 در نرم افزار امکان استفاده از پایه های ورودی و خروجی در GPIO را در نقش وقفه INTERRUPT فراهم می‌کند!!!!

 


جمع بندی


خیلی از افراد بدون بررسی دیتاشیت و بررسی پایه‌های GPIO برد NodeMcu نسبت به خرید برد اقدام کرده اند. در یکی از آخرین تیکت هایی که پاسخ دادم، کاربری اعلام کرده بود که چرا به اشتباه در ویژگی های کالا تعداد پایه ها ۱۶ عدد نوشته شده است. برای تست و اجرا فقط و فقط ۹ پایه در اخیتار ما است که میتوانیم از آن ها استفاده کنیم که در این بخش به معرفی و وضعیت HIGH , LOW بودن هر پایه در زمان بوت شدن هم پرداخته شده است. قبل از خرید با توجه به نیاز پروژه پایه ها را بررسی کنید.

 

 

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

 

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

 

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

پریسا پوربلورچیان

تولید کننده محتوا / کارشناس IOT

زندگی یعنی پژوهش و فهمیدن چیزی جدید

تلاشم بر این است تجربیاتم در زمینه IOT‌ را به بهترین شکل با شما در میان بگذارم.

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

۱۹ دیدگاه

  • سلام
    مگر حداکثر ولتاژ ورودی پورت آنالوگ یک ولت نیست؟
    در این مطلب ۳.۳ ولت نوشته شده است.

    • با سلام
      ولتاژ اکسترنال adc بین ۰ تا ۳٫۳ ولت dc است. در برد nodemcu از یک resistive voltage divider استفاده شده است. موردی که شما میفرمایید برای تراشه Esp8266 است.

  • سلام
    تازه متوجه اشتباهاتم شدم و فکر میکردم ایراد از برد خودمه
    ممنونم بابت توضیحات خوبتون

    • سلام
      من پایه D3 gpio0 را در سریال سافت ویر به عنوان اتصال به tx ماژول سیم کارت معرفی کرده بودم هدر برد بوت نمیشد
      بعد از روشن کردن مدار یبار هم باید ریستارت میکردم تا از توی ست اپ وارد لوپ بشه
      پایه را عوض کردم درست شد
      در هر صورت از توضیحات دیرهنگام شما سپاسگزارم

  • سلام وقتتون بخیر
    من از پایه آنالوگ برد خروجی گرفتم (بدون اینکه سنسوری متصل کنم) بین سیگنال ۰ تا ۱۳۱۸ تغییر میکنه مدام و باعث میشه من دیتای دقیقی از سنسورام نمیتونم بگیرم. علت این چیه؟

      • با سلام و احترام
        nodeMcu Esp32
        بدون اینکه سنسوری به پین آنالوگ وصل کنم، از قطعه کد analogRead(analogPin) خروجی عددی گرفتم (توی متد loop) و پرینت کردم
        عدد خروجی بین ۰ تا ۱۳۱۸ متغیره و سریعا تغییر میکنه
        اما من هیچ سنسوری متصل نکردم چرا باید خروجی بده وقتی چیزی بهش وصل نیست؟
        آیا مشکل از برد هست؟ یا بخاطر نویزه؟
        حتی وقتی به پین انالوگ دست میزنم این عدد یهو تغییر میکنه.

        این مشکل باعث میشه من از سنسورام دیتای دقیق نمیگیرم. اول فکر میکردم سنسورا ایراد دارن یا دقیق کار نمیکنن

        اگه امکانش هست یه راه ارتباطی بدید که من بتونم ویدیوشو بفرستم خیلی ممنون میشم.

        • با سلام
          در این حالت خروجی نمایش داده شده همان ولتاژ قرار گرفته شده بر روی پایه های آنالوگ است که به آن adc گفته می‌شود.

  • با سلام و عرض ادب
    من یک برد Node Mcu دارم و چند وقیه دارم روش برنامه webserver می نویسم نمی دونم چش شده یا من دکمه رو اشتباه زدم برنامه روش سیو نمی مونه و بعد از هر بار قطع تغذیه باید دوباره روش آپلود کنم ممنون میشم راهنماییم کنید

    • با سلام
      چنین موردی تا به حال برای بنده پیش نیامده است. لطفا توضیحات بیشتری در خصوص تست برد بفرمایید تا بررسی شود.

  • سلام من تا حالا با برد های nodemcu یا esp کار نکرده ام ولی میخوام بخرم تو سایت رفتم ولی چند مدل بود نمیدونستم کدومو بخرم لطفا راهنمایی می کنید؟

  • کلا چند مدل برد nodemcu و esp داریم من تو هر سایتی میرم از هرکدوم ۱۰ مدل میاره کلا گیج شدم خواهش می کنم راهنماییم کنید