Trong bài hướng dẫn này, bạn sẽ học cách đọc chân digital input bằng nút nhấn và điều khiển chân digital output là một LED, sử dụng ESP32 với Arduino IDE.
Yêu cầu
Chúng ta sẽ lập trình ESP32 bằng Arduino IDE. Vì vậy, hãy đảm bảo rằng bạn đã cài ESP32 boards add-on trước khi tiếp tục:
Điều khiển Digital Output của ESP32
Trước tiên, bạn cần set GPIO mà bạn muốn điều khiển làm
. Sử dụng hàm OUTPUT
pinMode()
như sau:
pinMode(GPIO, OUTPUT);
Để điều khiển chân digital output chỉ cần sử dụng hàm digitalWrite()
, chấp nhận những đối số (argument) là GPIO (số int) mà bạn đang tham chiếu, và trạng thái HIGH
hoặc LOW
.
digitalWrite(GPIO, STATE);
Tất cả chân GPIO có thể được dùng làm output, ngoại trừ những chân GPIO từ 6 đến 11 (được kết nối với bộ nhớ flash SPI tích hợp) và GPIO 34, 35, 36 và 39 (chỉ làm GPIO input);
Tìm hiểu thêm về các chân ESP32 GPIO: Tham khảo Chân Ra của ESP32
Đọc Chân Digital Input của ESP32
Đầu tiên, set GPIO mà bạn muốn đọc thành INPUT, sử dụng hàm pinMode() như sau:
pinMode(GPIO, INPUT);
Để đọc một chân digital input, như là một nút nhấn, bạn sử dụng hàm digitalRead()
, chấp nhận những đối số (argument) là GPIO (số int) mà bạn đang tham chiếu.
digitalRead(GPIO);
Tất cả GPIO của ESP32 đều có thể được dùng làm input, ngoại trừ GPIO 6 đến 11 (được kết nối với bộ nhớ flash SPI tích hợp).
Tìm hiểu thêm về các chân ESP32 GPIO: Tham khảo Chân Ra của ESP32
Project Example
Để chỉ bạn cách sử dụng những chân digital input và digital output, chúng ta sẽ xây dựng một dự án ví dụ với một nút bấm (pushbutton) và một LED. Chúng ta sẽ đọc trạng thái của pushbutton và bật tắt LED tương ứng với mô tả của hình sau.
Schematic Diagram
Trước khi tiếp tục, bạn cần phải lắp ráp mạch điện với đèn LED và một pushbutton. Chúng ta sẽ kết nối đèn LED với GPIO 5
và nút pushbutton với GPIO 4
.
Linh Kiện Cần Thiết
Dưới đây là danh sách các linh kiện cần thiết để xây dựng mạch điện:
- ESP32 (read Best ESP32 Dev Boards)
- 5 mm LED
- 330 Ohm resistor
- Pushbutton
- 10k Ohm resistor
- Breadboard
- Jumper wires
Code
Copy đoạn code dưới đây bỏ vô Arduino IDE của bạn.
// Complete Instructions: https://RandomNerdTutorials.com/esp32-digital-inputs-outputs-arduino/ // set pin numbers const int buttonPin = 4; // the number of the pushbutton pin const int ledPin = 5; // the number of the LED pin // variable for storing the pushbutton status int buttonState = 0; void setup() { Serial.begin(115200); // initialize the pushbutton pin as an input pinMode(buttonPin, INPUT); // initialize the LED pin as an output pinMode(ledPin, OUTPUT); } void loop() { // read the state of the pushbutton value buttonState = digitalRead(buttonPin); Serial.println(buttonState); // check if the pushbutton 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); } }
Đoạn Code Hoạt Động Như Thế Nào
Trong hai dòng sau, bạn tạo giá trị để gán cho các chân:
const int buttonPin = 4; const int ledPin = 5;
Nút nhấn (button) được kết nối với GPIO 4
và đèn LED được kết nối với GPIO 5
. Khi sử dụng Arduino IDE với ESP32, 4 tương ứng với GPIO 4
và 5 tương ứng với GPIO 5
.
Tiếp theo, bạn tạo một biến để giữ trạng thái nút nhấn. Theo mặc định là 0 (không nhấn).
int buttonState = 0;
Trong hàm setup()
, bạn khởi tạo button dưới dạng INPUT
và LED dưới dạng OUTPUT
. Bằng cách sử dụng hàm pinMode()
với tham số là chân mà bạn đang tham chiếu tới, và mode: INPUT
hoặc OUTPUT
.
pinMode(buttonPin, INPUT); pinMode(ledPin, OUTPUT);
Trong vòng lặp loop()
, nơi bạn đọc trạng thái của button và điều khiển LED theo phù hợp.
Ở dòng tiếp theo, bạn đọc trạng thái button và lưu nó vào biến buttonState
. Như chúng ta đã thấy, bạn sử dụng hàm digitalRead()
.
buttonState = digitalRead(buttonPin);
Câu lệnh if sau đây, kiểm tra xem trạng thái button là HIGH
hay không. Nếu đúng như vậy, thì nó sẽ bật đèn LED bằng cách sử dụng hàm digitalWrite()
, với tham số là ledPin
và trạng thái HIGH
.
if (buttonState == HIGH) { digitalWrite(ledPin, HIGH); }
Nếu trạng thái button không phải HIGH
, bạn cho LED tắt. Chỉ cần đặt LOW
ở tham số thứ hai trong hàm digitalWrite()
.
else { digitalWrite(ledPin, LOW); }
Upload Code
Trước khi click nút upload, đi tới Tools > Board, và chọn loại board bạn đang sử dụng. Trong trường hợp của tôi thì là DOIT ESP32 DEVKIT V1 board.
Đi tới Tools > Port và chọn COM port mà ESP32 được kết nối tới. Kế đó, bấm nút upload và chờ thông báo “Done uploading”.
Nếu bạn thấy nhiều chấm (…__…__) trên cửa sổ debugging và thông báo “Failed to connect to ESP32: Timed out waiting for packet header”, điều đó có nghĩa là bạn cần nhấn nút BOOT trên board ESP32 sau khi những chấm kia xuất hiện.
Demonstration
Sau khi upload code, kiểm tra mạch điện của bạn. Đèn LED của bạn phải nên sáng mỗi khi bạn nhấn nút:
Và tắt khi bạn bỏ tay ra:
Tóm tắt
Với hướng dẫn này, bạn đã học cách đọc những chân digital input và điều khiển những chân digital output của ESP32, sử dụng Arduino IDE.
Nếu bạn muốn tìm hiểu cách đọc analog input hoặc tín hiệu PWM output, hãy đọc các bài hướng dẫn sau:
(Nguồn: randomnerdtutorials.com)