ESP32 Cảm Biến Âm Thanh LED

Trong hướng dẫn này, chúng ta sẽ khám phá cách sử dụng cảm biến âm thanh để điều khiển LED. Cụ thể, chúng ta sẽ tìm hiểu hai ứng dụng thú vị:

Phần Cứng Cần Thiết

1×mô-đun phát triển ESP-WROOM-32
1×Alternatively, ESP32 Uno-form board
1×Alternatively, ESP32 S3 Uno-form board
1×Cáp USB Type-C
1×Cảm Biến Âm Thanh
1×LED Kit
1×LED (red)
1×LED Module
1×Điện trở 220 ohm
1×breadboard
1×Dây Jumper
1×(Khuyến nghị) Screw Terminal Expansion Board for ESP32
1×(Khuyến nghị) Breakout Expansion Board for ESP32
1×(Khuyến nghị) Power Splitter for ESP32

Or you can buy the following kits:

1×DIYables ESP32 Starter Kit (ESP32 included)
1×DIYables Sensor Kit (30 sensors/displays)
1×DIYables Sensor Kit (18 sensors/displays)

Về LED và Cảm Biến Âm Thanh

Nếu bạn chưa biết về LED và cảm biến âm thanh (sơ đồ chân, cách hoạt động, cách lập trình ...), hãy tìm hiểu trong các hướng dẫn sau:

Sơ Đồ Kết Nối

sơ Đồ kết nối ESP32 cảm biến Âm thanh LED

This image is created using Fritzing. Click to enlarge image

Nếu bạn chưa rõ cách cấp nguồn cho ESP32 và các linh kiện khác, xem: Cách Cung Cấp Nguồn Điện Cho ESP32.

Code ESP32 - Công Tắc Âm Thanh Chuyển Đổi LED

Đoạn code dưới đây sẽ chuyển đổi trạng thái của LED mỗi khi phát hiện âm thanh.

/* * Mã ESP32 này được phát triển bởi newbiely.vn * Mã ESP32 này được cung cấp để sử dụng công khai, không có ràng buộc. * Để xem hướng dẫn chi tiết và sơ đồ kết nối, vui lòng truy cập: * https://newbiely.vn/tutorials/esp32/esp32-sound-sensor-led */ #define SENSOR_PIN 25 // The ESP32 pin GPIO25 connected to the sound sensor #define LED_PIN 26 // The ESP32 pin GPIO26 connected to the LED int prev_sound_state; // the previous state of sound sensor int sound_state; // the current state of sound sensor int led_state = LOW; // the current state of LED void setup() { Serial.begin(9600); // initialize serial pinMode(SENSOR_PIN, INPUT); // set ESP32 pin to input mode pinMode(LED_PIN, OUTPUT); // set ESP32 pin to output mode sound_state = digitalRead(SENSOR_PIN); } void loop() { prev_sound_state = sound_state; // save the last state sound_state = digitalRead(SENSOR_PIN); // read new state if (prev_sound_state == HIGH && sound_state == LOW) { // state change: HIGH -> LOW Serial.println("The sound has been detected"); // toggle state of LED led_state = !led_state; // control LED arccoding to the toggled state digitalWrite(LED_PIN, led_state); } }

Các Bước Thực Hiện

  • Nếu đây là lần đầu bạn sử dụng ESP32, hãy xem ESP32 - Cài Đặt Phần Mềm.
  • Thực hiện kết nối theo sơ đồ trên.
  • Kết nối board ESP32 với PC qua cáp micro USB
  • Mở Arduino IDE trên PC của bạn.
  • Chọn đúng board ESP32 (ví dụ: ESP32 Dev Module) và COM port.
  • Kết nối ESP32 với PC qua cáp USB
  • Mở Arduino IDE, chọn đúng board và port
  • Copy code trên và mở bằng Arduino IDE
  • Click nút Upload trên Arduino IDE để tải code lên ESP32
tải mã lên Arduino IDE
  • Vỗ tay trước mặt cảm biến âm thanh
  • Quan sát sự thay đổi trạng thái của LED

Giải Thích Code

Đọc giải thích từng dòng trong phần comment của source code!

Code ESP32 - LED Kích Hoạt Bằng Âm Thanh Trong Một Khoảng Thời Gian

Đoạn code dưới đây sẽ bật LED trong một khoảng thời gian khi phát hiện âm thanh. Sau khoảng thời gian đó, LED sẽ tự động tắt.

/* * Mã ESP32 này được phát triển bởi newbiely.vn * Mã ESP32 này được cung cấp để sử dụng công khai, không có ràng buộc. * Để xem hướng dẫn chi tiết và sơ đồ kết nối, vui lòng truy cập: * https://newbiely.vn/tutorials/esp32/esp32-sound-sensor-led */ #define SENSOR_PIN 25 // The ESP32 pin GPIO25 connected to the sound sensor #define LED_PIN 26 // The ESP32 pin GPIO26 connected to the LED #define TIME_PERIOD 5000 // in milliseconds int prev_sound_state; // the previous state of sound sensor int sound_state; // the current state of sound sensor void setup() { Serial.begin(9600); // initialize serial pinMode(SENSOR_PIN, INPUT); // set ESP32 pin to input mode pinMode(LED_PIN, OUTPUT); // set ESP32 pin to output mode sound_state = digitalRead(SENSOR_PIN); } void loop() { prev_sound_state = sound_state; // save the last state sound_state = digitalRead(SENSOR_PIN); // read new state if (prev_sound_state == HIGH && sound_state == LOW) { // state change: HIGH -> LOW Serial.println("The sound has been detected"); // turn on LED digitalWrite(LED_PIN, HIGH); delay(TIME_PERIOD); // turn off LED digitalWrite(LED_PIN, LOW); } }

Vui lòng lưu ý rằng đoạn code trước sử dụng hàm delay(), dễ hiểu nhưng có thể gây ra vấn đề blocking khi thêm code khác. Để khắc phục điều này, đoạn code sau sử dụng phương pháp non-blocking bằng thư viện ezLED. Thư viện ezLED hoạt động ẩn bên trong, sử dụng hàm millis() thay vì delay để tránh blocking.

/* * Mã ESP32 này được phát triển bởi newbiely.vn * Mã ESP32 này được cung cấp để sử dụng công khai, không có ràng buộc. * Để xem hướng dẫn chi tiết và sơ đồ kết nối, vui lòng truy cập: * https://newbiely.vn/tutorials/esp32/esp32-sound-sensor-led */ #include <ezLED.h> // ezLED library #define SENSOR_PIN 25 // The ESP32 pin GPIO25 connected to the sound sensor #define LED_PIN 26 // The ESP32 pin GPIO26 connected to the LED #define TIME_PERIOD 5000 // in milliseconds ezLED led(LED_PIN); // create a LED object that attach to pin LED_PIN int prev_sound_state; // the previous state of sound sensor int sound_state; // the current state of sound sensor void setup() { Serial.begin(9600); // initialize serial pinMode(SENSOR_PIN, INPUT); // set ESP32 pin to input mode sound_state = digitalRead(SENSOR_PIN); } void loop() { led.loop(); // MUST call the led.loop() function in loop() prev_sound_state = sound_state; // save the last state sound_state = digitalRead(SENSOR_PIN); // read new state if (prev_sound_state == HIGH && sound_state == LOW) { // state change: HIGH -> LOW Serial.println("The sound has been detected"); led.turnON(); // turn on immediately led.turnOFF(TIME_PERIOD); // turn off after TIME_PERIOD } }

Các Bước Thực Hiện

  • Nếu đây là lần đầu bạn sử dụng ESP32, hãy xem ESP32 - Cài Đặt Phần Mềm.
  • Thực hiện kết nối theo sơ đồ trên.
  • Kết nối board ESP32 với PC qua cáp micro USB
  • Mở Arduino IDE trên PC của bạn.
  • Chọn đúng board ESP32 (ví dụ: ESP32 Dev Module) và COM port.
  • Kết nối ESP32 với PC qua cáp USB
  • Mở Arduino IDE, chọn đúng board và port
  • Click vào biểu tượng Libraries ở thanh bên trái của Arduino IDE.
  • Tìm kiếm "ezLED", sau đó tìm thư viện led của ArduinoGetStarted
  • Click nút Install để cài đặt thư viện ezLED.
ESP32 LED thư viện
  • Copy code trên và mở bằng Arduino IDE
  • Click nút Upload trên Arduino IDE để tải code lên ESP32
tải mã lên Arduino IDE
  • Vỗ tay trước mặt cảm biến âm thanh
  • Quan sát sự thay đổi trạng thái của LED

Video Tutorial

Việc sản xuất video tốn rất nhiều thời gian. Nếu video hướng dẫn hữu ích cho việc học của bạn, hãy đăng ký kênh YouTube để ủng hộ. Nếu nhu cầu đủ cao, chúng tôi sẽ cố gắng làm thêm nhiều video.