Linh kiện cần chuẩn bị:
- Arduino, esp32 hoặc esp8266
- Board Test mạch
- Dây cắm Board Test
- Module thu RF-5V
- Remote học lệnh
Sơ đồ kết nối

Code nạp cho ESP32
#include <RCSwitch.h>
RCSwitch mySwitch = RCSwitch();
const int RF_RECEIVE_PIN = 18; // Chân kết nối với module RF
const unsigned long PAIRING_CODE = 100000101100100011001000; // Mã RF để khởi động chế độ học
const int BUTTON_PIN = 0; // Chân kết nối với nút (GPIO0)
const int LED_PIN = 19; // Chân kết nối với đèn LED (GPIO19)
const int CONTROLLED_PIN = 21; // Chân kết nối với bóng đèn cần điều khiển (GPIO21)
bool pairingMode = false;
unsigned long learnedCode = 0; // Mã sóng sẽ được lưu trữ
void setup() {
Serial.begin(115200);
mySwitch.enableReceive(RF_RECEIVE_PIN);
pinMode(BUTTON_PIN, INPUT_PULLUP); // Đặt chân BUTTON_PIN là INPUT_PULLUP để nút nhấn được đặt HIGH mặc định
pinMode(LED_PIN, OUTPUT); // Đặt chân LED_PIN là OUTPUT
pinMode(CONTROLLED_PIN, OUTPUT); // Đặt chân CONTROLLED_PIN là OUTPUT
digitalWrite(LED_PIN, LOW); // Tắt LED ban đầu
digitalWrite(CONTROLLED_PIN, LOW); // Tắt đèn ban đầu
}
void loop() {
// Kiểm tra trạng thái của nút (nếu nút được nhấn)
if (digitalRead(BUTTON_PIN) == LOW) {
Serial.println(“Button pressed, toggling pairing mode…”);
pairingMode = !pairingMode; // Chuyển đổi trạng thái chế độ học khi nút được nhấn
if (pairingMode) {
Serial.println(“Entering pairing mode…”);
digitalWrite(LED_PIN, HIGH); // Bật LED để báo hiệu đang trong chế độ học
learnedCode = 0; // Đặt lại mã sóng đã học
} else {
Serial.println(“Exiting pairing mode…”);
digitalWrite(LED_PIN, LOW); // Tắt LED khi thoát khỏi chế độ học
}
// Đợi một thời gian ngắn để tránh đọc nhiều lần khi nút vẫn còn được nhấn
delay(500);
}
// Kiểm tra nếu có mã sóng nhận được từ module RF
if (mySwitch.available()) {
unsigned long receivedCode = mySwitch.getReceivedValue();
// Kiểm tra xem có đang ở chế độ học
if (pairingMode) {
Serial.print(“Learning code: “);
Serial.println(receivedCode);
learnedCode = receivedCode; // Lưu mã sóng đã học
// Đặt biến trạng thái trả về về 0 để sẵn sàng nhận mã sóng tiếp theo
mySwitch.resetAvailable();
} else {
// Kiểm tra mã sóng có trùng khớp với mã sóng đã học không
if (receivedCode == learnedCode) {
Serial.println(“Received matching code. Toggling controlled LED…”);
digitalWrite(CONTROLLED_PIN, !digitalRead(CONTROLLED_PIN)); // Bật/tắt đèn điều khiển
}
// Đặt biến trạng thái trả về về 0 để sẵn sàng nhận mã sóng tiếp theo
mySwitch.resetAvailable();
}
}
}
