Bài 1: Lập trình ESP32 GPIO Digital Input và Digital Output

lap trinh esp32 gpio input output

Mỗi khi bắt đầu với một loại MCU, GPIO luôn là 1 bài mở đầu không thể thiếu được. Lập trình ESP32 GPIO Digital Input và Ouput sẽ giúp cho bạn hiểu được các điều khiển một chân GPIO của ESP32.

Đây chính là 1 chức năng rất đơn giản nhưng cũng cực kì quan trọng trong lập trình MCU.

Bài 1 Phần Ngoại Vi ESP32 trong Serie Lập trình ESP32 từ A tới Z

ESP32 GPIO Digital Ouput ( Đầu ra tín hiệu số)

Trong bài mở đầu về cách cài đặt Platformio chúng ta đã nạp 1 code blink led, trong đó cũng đã sử dụng chức năng Digital Output.

Trước tiên, bạn cần đặt GPIO bạn muốn điều khiển làm OUTPUT. Sử dụng hàm pinMode () như sau:

pinMode(GPIO, OUTPUT);

Để điều khiển chân đó, bạn sử dụng hàm digitalWrite(), với tham số truyền vào STATES là trạng thái đầu ra dạng int (0,1) hoặc LOW, HIGH. Các số int khác 0 đều tương ứng với giá trị HIGH

digitalWrite(GPIO, STATE);

Tất cả các GPIO có thể được sử dụng làm đầu ra ngoại trừ GPIO từ 6 đến 11 (chân SPI tích hợp) và GPIO 34, 35, 36 và 39 (chân Input Only).togl

ESP32 GPIO Digital Input (Đầu vào kĩ thuật số)

Tương tự như Output chúng ta sẽ phải set chân GPIO đó là kiểu đầu vào bằng lệnh:

pinMode(GPIO, INPUT);

Để đọc trạng thái chúng ta sử dụng lệnh digitalRead() với tham số truyền vào là số chân GPIO. Tham số truyền ra là trạng thái của chân đó.

Ta có thể sử dụng 1 biến kiểu boolean hoặc int để nhận lấy giá trị đọc được.

int value = digitalRead(GPIO);

Tất cả các GPIO của ESP32 đều có thể được sử dụng làm đầu vào, ngoại trừ GPIO từ 6 đến 11 ( tích hợp SPI).

Bài tập lập trình ESP32 GPIO bật tắt led bằng nút nhấn

Trong bài này, chúng ta sẽ bật tắt led bằng nút nhấn. Khi nút được nhấn Led sẽ bật, nhả nút ra thì led sẽ tắt.

Vì bo ESP32 không có Led nên chúng ta sẽ sử dụng Led ngoài nhé. Sử dụng GPIO16 là Ouput và GPIO 17 là input.

led pushbutton

Chúng ta cần chuẩn bị thêm các linh kiện sau:

  • Nút nhấn
  • Led
  • Trở 100R

Sơ đồ nguyên lý

Kết nối như sau.

  • Chân GPIO 16 nối với trở 100R nối tiếp với Led, chân + của Led nối với 3.3V
  • Chân GPIO 17 nối với nút nhấn, 1 đầu nút nhấn nối với GND

ESP32 led và nút nhấn

Code và giải thích code

Đầu tiên chúng ta sẽ tạo 1 Project mới với VS Code. Nhớ sử dụng Framwork là Arduino nhé. Chi tiết các bạn đọc lại bài viết: Hướng dẫn cài đặt platform IO

Full Code

#include <Arduino.h>
const int buttonPin = 16;  // định nghĩa chân nút nhấn
const int ledPin =  17;    // định nghĩa chân led
// biến lưu trạng thái nút nhấn
int buttonState = 0;

void setup() {
  Serial.begin(115200);  
  // khởi tạo chân nút nhấn là input
  pinMode(buttonPin, INPUT);
  // khởi tạo chân nút nhấnn là output
  pinMode(ledPin, OUTPUT);
}

void loop() {
  // đọc giá trị nút nhấn 
  buttonState = digitalRead(buttonPin);
  //in lên màn hình serial
  Serial.println(buttonState);
  //ghi giá trị nút nhấn vào led
  digitalWrite(ledPin, buttonState);
}

Giải thích code

Đầu tiên chúng ta định nghĩa các chân led và button là 16 và 17.

Tạo 1 biến lưu giá trị đọc được của nút nhấn

const int buttonPin = 17;
const int ledPin = 16;
int buttonState = 0;

Set chế độ input và output cho chân.

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

Trong loop chúng ta sẽ liên tục đọc giá trị chân Button sau đó ghi vào chân Led.

buttonState = digitalRead(buttonPin);
digitalWrite(ledPin, buttonState);

Nhấn Build và nạp vào KIT, sau đó hãy thử test nhé.

esp32 gpio

Kết

Lập trình ESP32 GPIO rất đơn giản và dễ làm. Ứng dụng của GPIO cũng rất nhiều, như làm 1 chiếc công tắc thông minh, điều khiển các loại đèn, động cơ … Nếu thấy bài viết này hay đừng quên chia sẻ với bạn bé nhé.

Đừng quên vào nhóm Nghiện lập trình để kết nối với những anh em lập trình viên nhé!

 

5/5 - (1 bình chọn)

14 những suy nghĩ trên “Bài 1: Lập trình ESP32 GPIO Digital Input và Digital Output

  1. H12345X nói:

    nếu có clib hướng dẫn rỏ hơn dành cho người mới bắt đầu thì tốt biết mấy!
    Thanks bạn.
    chờ bài mới….

  2. Linh Nguyễn Tiến nói:

    Với con esp32 này chạy dual core nên em nghĩ nên theo hướng dùng FreeRTOS ko thì khá phí hiệu năng con này

  3. huy nói:

    giá trị 115200 là sao anh hay chỉ là lấy bất kì. em đang hiểu giá trị đó là 2^16. anh giải thích dùm em vs ạ

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *