راه اندازی پایه های ورودی خروجی ESP32

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

قبل از آموزش لازمه یادبگیریم چطور ESP32 رو در ARDUINO IDE پروگرم کنیم. این لینک رو بخونیم.

خروجی های دیجیتالی کنترلی

برای اینکه GPIOهایی رو به عنوان خروجی تعریف کنید باید با دستور ()pinMode اینکارو انجام بدین :

pinMode(GPIO, OUTPUT);

برای کنترل کردن هر خروجی هم با دستور ()digitalWrite انجام میشه به صورتیکه با شماره GPIO و حالت HIGH و یا  LOW تعریف میشه:

digitalWrite(GPIO, STATE);

همه GPIO ها به جز پایه های ۶ تا ۱۱ که به SPI متصل هستن و پایه های های ۳۴، ۳۵، ۳۶ و ۳۹ که ورودی هستن، میتونن به عنوان خروجی استفاده بشن.

ورودی های دیجیتالی کنترلی

برای اینکه GPIOی رو به عنوان ورودی تعریف کنید قدم اول باید با دستور ()pinMode اینکارو انجام بدین :

pinMode(GPIO, INPUT);

برای اینکه یک ورودی دیجیتالی رو بخونید، مثلا یک کلید، با دستور  ()digitalRead و مشخص کردن شماره پایه مورد نظر تنظیم میشه:

digitalRead(GPIO);

همه  GPIOها به جز پایه های ۶ تا ۱۱ که  به  SPI متصل هستن  میتونن به عنوان ورودی استفاده بشن.

پروژه نمونه

خب بعد از اینکه یاد گرفتیم چطور پایه ها رو تعریف کنیم با هم یک مثال ساده رو بررسی می کنیم.

تو این مثال یک LED و یک Pushbotton(کلید) استفاده شده که وضعیت کلید خونده میشه و بر اساس وضعیتش LED روشن میشه . طبق شکل زیر :

ESP32 button pressed or not to turn LED on and off

شماتیک

قبل از شروع کار باید دیاگرام مدار رو با LED و  کلید رسم کنیم. LED رو به پایه GPIO5 و کلید رو به پایه GPIO4 متصل میکنیم. قطعات دیگری که نیاز داریم :

  • ESP32
  • LED5mm
  • مقاومت ۳۳۰ اهم
  • کلید
  • مقاومت ۱۰k اهم
  • بِردبُرد
  • سیم جامپر
ESP32 Digital Input and Digital Output Schematic Circuit LED Pushbutton

حالا این کد رو در Arduino IDE کپی کنید :

// Complete Instructions: https://RandomNerdTutorials.com/esp32-digital-inputs-outputs-arduino/

// set pin numbers
const int buttonPin = 4;  // the number of the کلید pin
const int ledPin =  5;    // the number of the LED pin

// variable for storing the کلید status 
int buttonState = 0;

void setup() {
  Serial.begin(115200);  
  // initialize the کلید pin as an input
  pinMode(buttonPin, INPUT);
  // initialize the LED pin as an output
  pinMode(ledPin, OUTPUT);
}

void loop() {
  // read the state of the کلید value
  buttonState = digitalRead(buttonPin);
  Serial.println(buttonState);
  // check if the کلید is pressed.
  // if it is, the buttonState is HIGH
  if (buttonState == HIGH) {
    // turn LED on
    digitalWrite(ledPin, HIGH);
  } else {
    // turn LED off
    digitalWrite(ledPin, LOW);
  }
}

این کد چطور کار می کنه ؟

در دو خط زیر با استفاده از تعریف متغیر به پین ها تخصیص داده شده :

const int buttonPin = 4;
const int ledPin = 5;

LED به پایه GPIO5 و کلید به پایه GPIO4 متصل  شده .در محیط Arduino IDE ، ۴ به معنی GPIO4 و ۵ به معنی GPIO5 است.

مرحله بعدی باید یک متغیری تعریف کنید تا حالت کلید را نگه داریم . این متغیر در حالت پیش فرض مقدارش صفره.

int buttonState = 0;

در ()setup ، کلید رو به عنوان ورودی و LED رو به عنوان خروجی تعریف میکینم. برای این کار از دستور ()pinMode طبق دستور زیر استفاده میکینم :

pinMode(buttonPin, INPUT); pinMode(ledPin, OUTPUT);

در ()loop وضعبت کلید رو میخونه و تنظیمات مربوط به  LED رو انجام میده. در خط بعدی وضعیت کلید خونده میشه و درbuttonState  ذخیره میشه:

buttonState = digitalRead(buttonPin);

درون شرط IF هم بررسی میکنه آیا وضعیت کلید HIGH هست یا نیست ؟ اگر HIGH  باشه LED رو با دستور ()digitalWrite روشن می کنه:

<!-- wp:paragraph {"direction":"ltr"} -->
<p dir="ltr">if (buttonState == HIGH) {</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph {"direction":"ltr"} -->
<p dir="ltr">&nbsp; digitalWrite(ledPin, HIGH);</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph {"direction":"ltr"} -->
<p dir="ltr">}</p>
<!-- /wp:paragraph -->

اگر وضعیت کلید HIGH نباشه LED رو با دستور ()digitalWrite خاموش میکنه:

else {
  digitalWrite(ledPin, LOW);
}

آپلود کردن کد

برای اینکار به ترتیب گزینه Tools =>Board رفته و بردی که استفاده کردید رو انتخاب می کنید . بعد  از بخش Tools => Port ، گزینه COM رو که ESP32 به اون متصل شده انتخاب کنید. بعد کلید آپلود رو بزنید و متتظر بمونید تا پیغام “Done Uploading” رو ببینید.

Done uploading Arduino IDE button

نکته: اگر پیغام “Failed to connect to ESP32:Timed out waiting for packet header” و تعداد زیادی نقطه به شکل (…-…-…) در پنجره دیباگ ظاهر شد ESP32 on-board BOOT رو بعد از ظاهر شدن نقطه ها بزنید.

صحت عملکرد مدار

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

ESP32 Input Output Button Pressed LED On Arduino IDE
ESP32 Input Output Button Not Pressed Arduino IDE

پایان آموزش راه اندازی پایه های ورودی خروجی ESP32

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

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

قبلا حساب کاربری ایجاد کرده اید؟
گذرواژه خود را فراموش کرده اید؟
Loading...