برد NODEMCU به واسطه ی طراحی فوق العاده و امکانات متمایزی که در اختیار ما قرار داده است، امکان طراحی و اجرای پروتوتایپ اولیه ی پروژه های IOT اینترنت اشیا برای ما ساده تر شده است. در این آموزش کوتاه به معرفی پایه های GPIO برد خواهیم پرداخت. در ادامه آموزش پایههای 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 ساده تر میکند.
- D0 (پین ۱۶)
- D1 (پین ۵)
- D2 (پین ۴)
- D3 (پین ۰)
- D4 (پین ۲)
- D5 (پین ۱۴)
- D6 (پین ۱۲)
- D7 (پین ۱۳)
- D8 (پین ۱۵)
- D9 (پین ۳)
- D10 (پین ۱)
- D11 (پین ۹)
- D12 (پین ۱۰)
- D13 (پین ۱۱)
- DHT11 (پین ۷) – برای اتصال سنسور دما و رطوبت DHT11
- SDA (پین ۶) – برای اتصال به خط داده I2C (مانند اتصال به سنسورهای I2C)
- SCL (پین ۵) – برای اتصال به خط ساعت I2C (مانند اتصال به سنسورهای I2C)
- LED RGB (پینهای ۴، ۵ و ۱۲) – برای کنترل رنگ LED RGB
- 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 را در این برد بیاموزید.
نام پایه ها در برد 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 بودن هر پایه در زمان بوت شدن هم پرداخته شده است. قبل از خرید با توجه به نیاز پروژه پایه ها را بررسی کنید.
چنانچه در مراحل ارایه شده در این آموزش سوالی داشتید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریعترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد.
در پایان نظرات و پیشنهادات خود را با ما درمیان بگذارید و با اشتراک گذاری این آموزش در شبکه های اجتماعی از وبسایت دیجی اسپارک حمایت کنید.
سلام
مگر حداکثر ولتاژ ورودی پورت آنالوگ یک ولت نیست؟
در این مطلب ۳.۳ ولت نوشته شده است.
با سلام
ولتاژ اکسترنال adc بین ۰ تا ۳٫۳ ولت dc است. در برد nodemcu از یک resistive voltage divider استفاده شده است. موردی که شما میفرمایید برای تراشه Esp8266 است.
استفاده از ولتاژ دیوایدر این حسن داره که با سری کردن مقاومت میتونی ولتاژ بیشتر از ۳۰۳ هم به عنوان ورودی به پایه اا اعمال کنی
سپاس از همراهی شما
سلام
تازه متوجه اشتباهاتم شدم و فکر میکردم ایراد از برد خودمه
ممنونم بابت توضیحات خوبتون
سپاس از همراهی شما امیدوارم مفید واقع شده باشد.
سلام
من پایه D3 gpio0 را در سریال سافت ویر به عنوان اتصال به tx ماژول سیم کارت معرفی کرده بودم هدر برد بوت نمیشد
بعد از روشن کردن مدار یبار هم باید ریستارت میکردم تا از توی ست اپ وارد لوپ بشه
پایه را عوض کردم درست شد
در هر صورت از توضیحات دیرهنگام شما سپاسگزارم
سلام وقتتون بخیر
من از پایه آنالوگ برد خروجی گرفتم (بدون اینکه سنسوری متصل کنم) بین سیگنال ۰ تا ۱۳۱۸ تغییر میکنه مدام و باعث میشه من دیتای دقیقی از سنسورام نمیتونم بگیرم. علت این چیه؟
با سلام
لطفا توضیحات تکمیلی دهید تا راهنمایی شود. روش تست را بفرمایید.
با سلام و احترام
nodeMcu Esp32
بدون اینکه سنسوری به پین آنالوگ وصل کنم، از قطعه کد analogRead(analogPin) خروجی عددی گرفتم (توی متد loop) و پرینت کردم
عدد خروجی بین ۰ تا ۱۳۱۸ متغیره و سریعا تغییر میکنه
اما من هیچ سنسوری متصل نکردم چرا باید خروجی بده وقتی چیزی بهش وصل نیست؟
آیا مشکل از برد هست؟ یا بخاطر نویزه؟
حتی وقتی به پین انالوگ دست میزنم این عدد یهو تغییر میکنه.
این مشکل باعث میشه من از سنسورام دیتای دقیق نمیگیرم. اول فکر میکردم سنسورا ایراد دارن یا دقیق کار نمیکنن
اگه امکانش هست یه راه ارتباطی بدید که من بتونم ویدیوشو بفرستم خیلی ممنون میشم.
با سلام
در این حالت خروجی نمایش داده شده همان ولتاژ قرار گرفته شده بر روی پایه های آنالوگ است که به آن adc گفته میشود.
ممنون خیلی مفید بود ، لطف کردین
سپاس از همراهی شما
با سلام و عرض ادب
من یک برد Node Mcu دارم و چند وقیه دارم روش برنامه webserver می نویسم نمی دونم چش شده یا من دکمه رو اشتباه زدم برنامه روش سیو نمی مونه و بعد از هر بار قطع تغذیه باید دوباره روش آپلود کنم ممنون میشم راهنماییم کنید
با سلام
چنین موردی تا به حال برای بنده پیش نیامده است. لطفا توضیحات بیشتری در خصوص تست برد بفرمایید تا بررسی شود.
سلام من تا حالا با برد های nodemcu یا esp کار نکرده ام ولی میخوام بخرم تو سایت رفتم ولی چند مدل بود نمیدونستم کدومو بخرم لطفا راهنمایی می کنید؟
با سلام
برای شروع از برد Nodemcu CP2102 و یا برد Wemos D1 mini استفاده کنید.
برد wemos D1 mini بر پایه ESP8266 با ۴ مگابایت حافظه فلش
برد وای فای NodeMCU بر پایه ESP8266 با تراشه CP2102
کلا چند مدل برد nodemcu و esp داریم من تو هر سایتی میرم از هرکدوم ۱۰ مدل میاره کلا گیج شدم خواهش می کنم راهنماییم کنید
با سلام
لینک زیر را بررسی کنید.
خرید برد ESP8266