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);
}
 
 

 

 

틀린 부분이나 질문은 댓글 달아주세요.

즐거운 하루 보내세요. 감사합니다.

 

 

반응형