ESP8266 LED Mờ dần

Hướng dẫn này chỉ cho bạn cách lập trình ESP8266 để làm mờ đèn LED. Chúng ta sẽ xem qua ba ví dụ và so sánh sự khác biệt giữa chúng:

Phần cứng cần chuẩn bị

1×ESP8266 NodeMCU ESP-12E
1×Recommended: ESP8266 NodeMCU ESP-12E (Uno-form)
1×USB Cable Type-A to Type-C (for USB-A PC)
1×USB Cable Type-C to Type-C (for USB-C PC)
1×LED Kit
1×LED (red)
1×LED Module
1×220Ω Resistor
1×breadboard
1×dây jumper
1×(Khuyến nghị) Screw Terminal Expansion Board for ESP8266
1×(Khuyến nghị) Power Splitter for ESP8266 Type-C

Or you can buy the following kits:

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

Giới thiệu về LED

Cách bố trí các chân LED

LED có hai chân:

  • Chân cathode(-): cần được kết nối với GND (0V)
  • Chân anode(+): dùng để điều khiển trạng thái của LED
sơ đồ chân LED

Cách hoạt động

Ngày khi cực âm (-) đã được nối với GND:

  • Kết nối GND với anode (+) sẽ làm LED tắt.
  • Kết nối VCC với anode (+) sẽ làm LED sáng.
  • Tạo tín hiệu PWM tới anode (+) sẽ điều chỉnh độ sáng của LED, tùy thuộc vào giá trị PWM. Giá trị này có thể từ 0 đến 255, giá trị càng cao thì LED càng sáng và giá trị càng thấp khiến LED trông tối hơn.
  • Nếu giá trị PWM bằng 0, tương tự như kết nối GND, thì LED sẽ tắt.
  • Nếu giá trị PWM bằng 255, tương tự như kết nối VCC, thì LED sẽ sáng hoàn toàn.
cách LED hoạt động

※ Lưu ý:

Đối với hầu hết LED, một điện trở phải được đặt giữa cực dương (anode) và nguồn VCC. Giá trị của điện trở này được xác định bởi thông số kỹ thuật của LED.

ESP8266 - Làm mờ LED

Một số chân của ESP8266 có thể được lập trình để tạo tín hiệu PWM. Kết nối chân anode (+) của LED với một chân của ESP8266, chân cathode (-) nối về GND, và lập trình chân ESP8266 để tạo PWM, chúng ta có thể làm LED mờ dần.

Sơ đồ đấu dây

sơ đồ kết nối LED ESP8266 NodeMCU

This image is created using Fritzing. Click to enlarge image

Xem thêm Sơ đồ chân ESP8266Cách cấp nguồn cho ESP8266.

Cách Lập Trình

  • Đặt chân của ESP8266 ở chế độ đầu ra kỹ thuật số bằng hàm pinMode(). Ví dụ, điều này có thể được thực hiện cho chân D5:
pinMode(D5, OUTPUT);
  • Điều chỉnh độ sáng của đèn LED bằng cách tạo tín hiệu PWM với hàm analogWrite().
analogWrite(D5, brightness);

Độ sáng có thể nằm trong khoảng từ 0 đến 255.

Mã ESP8266 - Ví dụ mờ dần từ Arduino IDE

Hướng dẫn từng bước

Để bắt đầu với ESP8266 trên Arduino IDE, hãy làm theo các bước sau:

  • Hãy tham khảo bài hướng dẫn ESP8266 - Cài đặt phần mềm nếu đây là lần đầu tiên bạn sử dụng ESP8266.
  • Nối các thành phần như được thể hiện trong sơ đồ.
  • Kết nối bo mạch ESP8266 với máy tính của bạn bằng cáp USB.
  • Mở Arduino IDE trên máy tính của bạn.
  • Chọn bo mạch ESP8266 phù hợp, như ví dụ: NodeMCU 1.0 (ESP-12E Module), và cổng COM tương ứng của nó.
  • Gắn ESP8266 vào máy tính của bạn bằng cáp USB.
  • Mở Arduino IDE, và chọn đúng bo mạch và cổng.
  • Sao chép mã bên dưới và dán vào Arduino IDE.
/* * Mã ESP8266 NodeMCU này được phát triển bởi newbiely.vn * Mã ESP8266 NodeMCU 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/esp8266/esp8266-led-fade */ #define LED_PIN D5 // The ESP8266 pin connected to the LED int brightness = 0; // how bright the LED is int fade_step = 5; // how many points to fade the LED by // The setup function runs once on reset or power-up void setup() { // Configure the ESP8266 pin as a digital output pin pinMode(LED_PIN, OUTPUT); } // The loop function repeats indefinitely. void loop() { // set the brightness of pin 9: analogWrite(LED_PIN, brightness); // change the brightness for next time through the loop: brightness = brightness + fade_step; // reverse the direction of the fading at the ends of the fade: if (brightness <= 0 || brightness >= 255) { fade_step = -fade_step; } // wait for 30 milliseconds to see the dimming effect delay(30); }
  • Nhấp vào nút Tải lên trên Arduino IDE để biên dịch và tải mã lên bo mạch ESP8266.
Arduino ide: tải mã lên
  • Kiểm tra độ sáng của đèn LED.

Giải thích mã nguồn

Xem phần giải thích theo từng dòng được chứa trong các chú thích của mã nguồn!

※ Lưu ý:

Ví dụ ở trên sử dụng hàm [delay()] để mờ dần lên và mờ dần đi. Tuy nhiên, điều này khiến LED mờ dần một cách không mượt và chặn việc chạy các đoạn mã khác. Trong các phần sắp tới, chúng ta sẽ học cách mờ dần lên và mờ dần đi một cách mượt mà mà không làm gián đoạn mã khác bằng cách tận dụng hàm [millis()].

Cách làm LED sáng dần trong một khoảng thời gian mà không dùng delay()

/* * Mã ESP8266 NodeMCU này được phát triển bởi newbiely.vn * Mã ESP8266 NodeMCU 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/esp8266/esp8266-led-fade */ #define LED_PIN D5 // The ESP8266 pin connected to the LED unsigned long FADE_PEDIOD = 3000; // fade time is 3 seconds unsigned long start_time; // The setup function runs once on reset or power-up void setup() { // Configure the ESP8266 pin as a digital output pin pinMode(LED_PIN, OUTPUT); start_time = millis(); } // fade-in in loop, and restart after finishing void loop() { unsigned long progress = millis() - start_time; if (progress <= FADE_PEDIOD) { long brightness = map(progress, 0, FADE_PEDIOD, 0, 255); analogWrite(LED_PIN, brightness); } else { start_time = millis(); // restart fade again } }

Cách làm LED mờ dần trong một khoảng thời gian mà không dùng delay()

/* * Mã ESP8266 NodeMCU này được phát triển bởi newbiely.vn * Mã ESP8266 NodeMCU 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/esp8266/esp8266-led-fade */ #define LED_PIN D5 // The ESP8266 pin connected to the LED unsigned long FADE_PEDIOD = 3000; // fade time is 3 seconds unsigned long start_time; // The setup function runs once on reset or power-up void setup() { // Configure the ESP8266 pin as a digital output pin pinMode(LED_PIN, OUTPUT); start_time = millis(); } // fade-out in loop, and restart after finishing void loop() { unsigned long progress = millis() - start_time; if (progress <= FADE_PEDIOD) { long brightness = 255 - map(progress, 0, FADE_PEDIOD, 0, 255); analogWrite(LED_PIN, brightness); } else { start_time = millis(); // restart fade again } }

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.

Kiến thức bổ sung

  • Hàm analogWrite() trên ESP8266 có thể tạo tín hiệu PWM, khiến một đèn LED mờ dần. Tuy nhiên, nếu một hàm tùy chỉnh được tạo ra với kiến thức chuyên sâu, nó có thể tạo tín hiệu PWM tần số thấp, dẫn đến đèn LED nhấp nháy thay vì mờ dần.
  • Tóm lại, tín hiệu PWM có thể được sử dụng trên ESP8266 cho nhiều mục đích khác nhau, chẳng hạn như điều khiển động cơ servo, động cơ DC, tạo âm thanh bằng còi piezo, làm mờ các đèn LED và nhấp nháy các đèn LED.

Các tham chiếu hàm