ESP32
ESP32: Wi-Fi와 BLE를 번갈아 켜는 예제 코드
소나무기운
2025. 7. 1. 12:00
반응형
[2025/07/01] First Start.
소나무 기운 , 전자제품 개발/생산
ESP32: Wi-Fi와 BLE를 번갈아 켜는 예제 코드
간단한 테스트용 스위칭 프로그램 (Arduino IDE)
ESP32는 Wi-Fi와 BLE(Bluetooth Low Energy)를 동시에 사용할 수 있는 기능이 있지만, 상황에 따라 두 가지 무선 기능을 순차적으로 전환해서 사용하는 경우도 있습니다.
이 글에서는 Wi-Fi와 BLE를 번갈아 켜고 끄는 간단한 예제 코드를 소개합니다.
테스트 환경: Arduino IDE 사용
파일 확장자: .ino
📦 코드 설명
이 프로그램은 BLE와 Wi-Fi 기능을 각각 ON/OFF 하면서 10초 간격으로 전환합니다.
목적은 하드웨어나 펌웨어 환경에서 두 기능의 전환이 가능한지 확인하는 것에 있습니다.
#include <WiFi.h>
#include <esp_wifi.h>
#include "SimpleBLE.h"
필요한 라이브러리는 WiFi와 SimpleBLE. esp_wifi.h는 Wi-Fi 설정을 더 세밀하게 조절하기 위해 추가합니다.
🔁 기능 요약
소제목 2 첫줄
함수명 기능
함수명 | 기능 |
turn_ON_BLE() | BLE 켜기 (BLE_esp32 이름으로 시작) |
turn_OFF_BLE() | BLE 끄기 |
turn_ON_WIFI() | Wi-Fi AP 모드로 켜기 (ssid, password 지정) |
turn_OFF_WIFI() | Wi-Fi 끄기 (모드 NULL 설정) |
🔧 주요 설정
📡 Wi-Fi 설정 부분
WiFi.mode(WIFI_AP);
WiFi.softAP(ssid, password, 1); // 채널 1
esp_wifi_set_protocol((wifi_interface_t)ESP_IF_WIFI_AP, WIFI_PROTOCOL_11B | WIFI_PROTOCOL_11G | WIFI_PROTOCOL_11N);
WiFi.setTxPower((wifi_power_t)84);
- AP 모드로 설정하고 직접 Wi-Fi를 방송
- 프로토콜: 11b/g/n 사용
- 송신 전력도 설정 (값은 84로 설정)
🔄 loop 동작 흐름
BLE ON → 10초 대기
BLE OFF → 10초 대기
Wi-Fi ON → 10초 대기
Wi-Fi OFF → 10초 대기
(반복)
이렇게 BLE와 Wi-Fi를 번갈아가며 테스트합니다.
📌 이 코드가 유용한 경우
- Wi-Fi와 BLE 전환이 정상 작동하는지 확인하고 싶을 때
- BLE 광고와 Wi-Fi 핫스팟 기능을 번갈아 써야 하는 프로젝트
- 전력 소모 최적화 실험
- ESP32의 무선 기능 충돌 여부를 실험적으로 검증하고자 할 때
📝 정리
이 예제는 단순하지만, BLE ↔ Wi-Fi 전환 동작을 반복적으로 테스트하는 데 유용합니다.
본격적인 프로젝트를 시작하기 전에, 기본 기능이 하드웨어에서 문제 없이 작동하는지 확인하는 용도로 적합합니다.
다음 글에서는 BLE 이름 설정이나 Wi-Fi 설정을 좀 더 유연하게 만드는 방식도 소개해볼게요.
참고문헌
마무리5
* 전체 코드입니다.
#include <WiFi.h>
#include <esp_wifi.h>
#include "SimpleBLE.h"
const char* ssid = "WiFi Name";
const char* password = "WiFi Password";
SimpleBLE ble;
void turn_ON_WIFI() {
Serial.println("WIFI ON");
WiFi.mode(WIFI_AP);
WiFi.softAP(ssid, password, 1); // channel 1
esp_wifi_set_protocol((wifi_interface_t)ESP_IF_WIFI_AP, WIFI_PROTOCOL_11B | WIFI_PROTOCOL_11G | WIFI_PROTOCOL_11N);
WiFi.setTxPower((wifi_power_t)84);
delay(2000);
}
void turn_OFF_WIFI() {
Serial.println("WIFI OFF");
WiFi.mode(WIFI_MODE_NULL);
delay(2000);
}
void turn_ON_BLE() {
Serial.println("BLE ON");
ble.begin("BLE_esp32");
delay(2000);
}
void turn_OFF_BLE() {
Serial.println("BLE OFF");
ble.end();
delay(2000);
}
void setup() {
Serial.begin(115200);
}
void loop() {
turn_ON_BLE();
delay(10000);
turn_OFF_BLE();
delay(10000);
turn_ON_WIFI();
delay(10000);
turn_OFF_WIFI();
delay(10000);
}
틀린 부분이나 질문은 댓글 달아주세요.
즐거운 하루 보내세요. 감사합니다.
반응형