در این جلسه به آموزش پایه های ورودی و خروجی دیجیتالی 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 روشن میشه . طبق شکل زیر :
شماتیک
قبل از شروع کار باید دیاگرام مدار رو با LED و کلید رسم کنیم. LED رو به پایه GPIO5 و کلید رو به پایه GPIO4 متصل میکنیم. قطعات دیگری که نیاز داریم :
- ESP32
- LED5mm
- مقاومت ۳۳۰ اهم
- کلید
- مقاومت ۱۰k اهم
- بِردبُرد
- سیم جامپر
حالا این کد رو در 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"> 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” رو ببینید.
نکته: اگر پیغام “Failed to connect to ESP32:Timed out waiting for packet header” و تعداد زیادی نقطه به شکل (…-…-…) در پنجره دیباگ ظاهر شد ESP32 on-board BOOT رو بعد از ظاهر شدن نقطه ها بزنید.
صحت عملکرد مدار
خب این مرحبه باید مدار رو تست کنید . بعد از آپلود کردن کد اگر کلید را فشار بدین LED روشن و رها کردن کلید LED باید خاموش بشه .
پایان آموزش راه اندازی پایه های ورودی خروجی ESP32
ماژول ESP32 دارای وای فای و بلوتوث
ماژول ESP32 دارای وای فای و بلوتوث