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.
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
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é.
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é!
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.
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….
Sẽ sớm có bạn nhé
Mình ko rành về điện tử nên không hiểu vì sao phải gắn trở nối tiếp với LED?
Nếu không gắn trở thì sao hả bạn?
Trở hạn dòng với chia đúng điện áp cho led nhé bạn, không lắp sẽ cháy led hoặc nhanh cháy
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
free RTOS khi cần thôi em, đâu phải ứng dụng nào cũng cần đâu
ủa ngoài bai 1 ra . các bài còn lại không xem được à bạn
Đang ra tiếp nhé bạn
A có video hướng dẫn nữa thì tuyệt vời a ơi!
😀 anh sẽ cố gắng
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 ạ
Theo tốc độ baudrate quy định nhé em. có nhiều tốc độ như 4800 9600, 115200 …
của em báo lỗi không tìm thấy thư viện arduino ạ Arduino.h: No such file or directory