Chức Năng Nhập Xuất Tín Hiệu Số (GPIO) Trên NodeMCU, ESP32 Dev ...
Có thể bạn quan tâm
GPIO (General Purpose Input/Output) là một chức năng cơ bản và phổ biến của vi điều khiển, nó bao gồm các chân đầu vào và đầu ra tín hiệu số được lập trình bởi người dùng. Bài viết này sẽ giúp các bạn hiểu rõ hơn về chức năng GPIO trên board NodeMCU và ESP32 Dev Kit và những lưu ý quan trọng khi sử dụng.
1. Sơ đồ chân GPIO và những lưu ý khi sử dụng:
NodeMCU:
Chúng ta biết rằng ở mỗi chân trên vi điều khiển có thể thực hiện nhiều chức năng khác nhau, NodeMCU có tổng cộng 13 chân GPIO tuy nhiên một số chân được dùng cho những mục đích quan trọng khác vì vậy chúng ta phải lưu ý khi sử dụng như sau:
- Tất cả các GPIO đều có trở kéo lên nguồn bên trong (ngoại trừ GPIO16 có trở kéo xuống GND). Người dùng có thể cấu hình kích hoạt hoặc không kích hoạt trở kéo này.
- GPIO1 và GPIO3: hai GPIO này được nối với TX và RX của bộ UART0, NodeMCU nạp code thông qua bộ UART này nên tránh sử dụng 2 chân GPIO này.
- GPIO0, GPIO2, GPIO15: đây là các chân có nhiệm vụ cấu hình mode cho ESP8266 điều khiển quá trình nạp code nên bên trong NodeMCU (có tên gọi là strapping pins) có các trở kéo để định sẵn mức logic cho chúng như sau: GPIO0: HIGH, GPIO2: HIGH, GPIO15: LOW. Vì vậy khi muốn sử dụng các chân này ở vai trò GPIO cần phải thiết kế một nguyên lý riêng để tránh xung đột đến quá trình nạp code. Các bạn có thể tham khảo nguyên lý thiết kế mạch nạp ở bài viết này
- GPIO9, GPIO10: hai chân này được dùng để giao tiếp với External Flash của ESP8266 vì vậy cũng không thể dùng được (đã test thực nghiệm).
Như vậy, các GPIO còn lại: GPIO 4, 5, 12, 13, 14, 16 có thể sử dụng bình thường.
ESP32 DevKit V1 – DOIT (version 30 pins):
ESP32 có rất nhiều kit phát triển khác nhau nên các bạn lưu ý bài hướng dẫn này chỉ viết cho ESP32 DEVKIT V1 – DOIT loại 30 chân, các kit khác tương tự. Trên kit có tổng cộng 25 chân GPIO tuy nhiên cũng giống với NodeMCU, khi dùng GPIO trên ESP32 DEVKIT cần lưu ý:
- GPIO34, 35, 36, 39 chỉ dùng được chức năng INPUT, không dùng được chức năng OUTPUT.
- GPIO1, GPIO3: Giống như NodeMCU 2 chân này cũng được nối đến bộ UART0 và ESP32 Dev Kit cũng nạp code thông qua bộ UART này nên tránh sử dụng 2 chân này cho chức năng I/O.
- GPIO0, 2, 4, 5, 12, 15 đã được định sẵn mức logic bên trong module ESP32 để phục vụ quá trình nạp code, nên tránh sử dụng các GPIO này.
Ngoài ra đối với những bạn thiết kế mạch sử dụng module ESP32 rời (module tích hợp trên ESP32 Dev Kit) thì ngoài lưu ý ở trên còn lưu ý thêm các chân từ GPIO6 đến GPIO11. Các chân này dùng để giao tiếp SPI với External Flash nên không thể dùng được chức năng I/O và trên ESP32 Dev Kit đã ẩn đi các chân này.
Một lưu ý quan trọng khác cho cả NodeMCU và ESP32 Dev Kit là mức điện áp INPUT tối đa mà các chân GPIO có thể hoạt động được là 3.6V (khác với các board Arduino là 5V) vì vậy nếu tác động mức điện áp lớn hơn 3.6V vào chân INPUT sẽ làm hỏng chân GPIO.
2. Khai báo và sử dụng chức năng GPIO
Để lập trình sử dụng chức năng GPIO trên 2 board NodeMCU và ESP32 Dev Kit, có thể sử dụng các hàm sau:
pinMode(PIN_NUMBER, MODE);
Chức năng: Để khai báo sử dụng một chân là Input hoặc Output.
PIN_NUMBER: số thứ tự chân GPIO
MODE: INPUT, OUTUT, INPUT_PULLUP.
digitalRead(PIN_NUMBER);
Chức năng: đọc giá trị digital tại chân PIN_NUMBER
PIN_NUMBER: số thứ tự chân GPIO
Giá trị trả về: 0 (tương ứng LOW) hoặc 1 (tương ứng HIGH)
digitalWrite(PIN_NUMBER, VALUE);
Chức năng: ghi mức điện áp VALUE ra chân PIN_NUMBER
PIN_NUMBER: số thứ tự chân GPIO
VALUE: LOW hoặc HIGH
attachInterrupt(INTERRUPT_PIN, ISR, MODE);
Chức năng: khai báo sử dụng ngắt ngoài trên chân INTERUPT_PIN
INTERUPT_PIN:
Đối với NodeMCU: tất cả các GPIO ngoại trừ GPIO16 đều có hỗ trợ interrupt
Đối với ESP32 DEVKIT: tất cả các GPIO đều hỗ trợ interrupt
ISR: chương trình ngắt, là một hàm do người dùng tự định nghĩa, hàm này sẽ được gọi khi có ngắt xảy ra. Lưu ý: hàm ngắt là hàm không có giá trị truyền vào và không có giá trị trả về.
MODE: là thông số định nghĩa khi nào ngắt được kích hoạt. Có 4 giá trị sau:
LOW: kích hoạt ngắt khi giá trị logic tại chân là mức thấp
HIGH: kích hoạt ngắt khi giá trị logic tại chân là mức cao
CHANGE: kích hoạt ngắt bất cứ khi nào giá trị logic tại chân thay đổi
RISING: kích hoạt ngắt khi mức logic của chân thay đổi từ thấp sang cao
FALLING: kích hoạt ngắt khi mức logic của chân thay đổi từ cao sang thấp
detachInterrupt(INTERUPT_PIN);
Chức năng: tắt chức năng ngắt tại INTERUPT_PIN
Ví dụ: chương trình sử dụng chức năng interrupt để đảo trạng thái led
Arduino #define INTERRUPT_PIN 0 #define LED_PIN 16 void setup() { pinMode(INTERRUPT_PIN, INPUT_PULLUP); attachInterrupt(INTERRUPT_PIN, blinkLed, FALLING); pinMode(LED_PIN, OUTPUT); } void loop() { } void blinkLed() { digitalWrite(LED_PIN, !digitalRead(LED_PIN)); }12345678910111213141516 | #define INTERRUPT_PIN 0#define LED_PIN 16voidsetup(){pinMode(INTERRUPT_PIN,INPUT_PULLUP);attachInterrupt(INTERRUPT_PIN,blinkLed,FALLING);pinMode(LED_PIN,OUTPUT);}voidloop(){ }voidblinkLed(){digitalWrite(LED_PIN,!digitalRead(LED_PIN));} |
Tài liệu tham khảo thêm:
- Datasheet ESP8266 SoC
- Datasheet ESP32 SoC
Xem thêm: Tổng hợp hướng dẫn Internet of Things với NodeMCU ESP8266 và ESP32
Nhóm TAPIT IoTs
Từ khóa » Esp8266 Sơ đồ Chân
-
Sơ đồ Chân ESP8266 - Nên Sử Dụng Chân Nào - ĐIỆN TỬ TƯƠNG LAI
-
Sơ đồ Chân ESP8266 - Hub Plus
-
ESP8266 #1 Chi Tiết Sơ đồ Chân NodeMCU, Tránh Sai Lầm Khi Code ...
-
[Thông Tin] Kỹ Thuật NodeMCU ESP8266 - Blog Mecsu
-
Sơ đồ Chân Esp8266 - Nông Trại Vui Vẻ
-
Sơ Đồ Chân Esp8266 - BeeCost
-
Phần Cứng & Công Cụ - Internet Of Things (IoT) Với ESP8266
-
Cấu Tạo Của NODEMCU ESP8266 - Tài Liệu Text - 123doc
-
Module Thu Phát Wifi ESP8266 NodeMCU Lua CP2102 - Nshop
-
Mạch WiFi ESP8266 CP2102 NodeMCU - EPCB
-
Mạch WiFi ESP8266 Uart ESP-12F - EPCB
-
Mạch Thu Phát Wifi ESP8266 Uart ESP-01S Ai-Thinker
-
Arduino ESP8266 NodeMcu Lua WIFI V3 - IC ĐÂY RỒI