YOGYUI

Matter - Wi-Fi AP Mode 기본으로 활성화하기 (ESP32) 본문

홈네트워크(IoT)/Matter

Matter - Wi-Fi AP Mode 기본으로 활성화하기 (ESP32)

요겨 2023. 2. 13. 12:26
반응형

ESP32 + CHIP(Matter) 프로젝트를 esp-matter 프레임워크로 진행하고 있다 (CHIP 소스코드를 wrapping해놓은거라 esp32 기기에 적용하기에 꽤나 유용하다)

 

BLE 커미셔닝하기 전에 ESP32에 HTTP나 웹소켓으로 접속해서 Matter 외 기타 디바이스 설정 기능을 구현하고 싶어서 깃허브 이슈로 문의해봤다

https://github.com/espressif/esp-matter/issues/205

Matter 1.0 specification에 따르면 SoftAP (AP: Access Point)는 Matter가 공인하는 방식이 아니라고 한다

(Matter에서는 BLE+Wi-Fi의 경우 커미셔닝 시 Wi-Fi는 Station 모드로만 작동하며, 사용자의 LAN에 접속하는 방식만을 다루고 있다고 한다... spec 문서 새로 읽어보던가 해야겠다 ㅋㅋ)

 

esp-matter 소스코드에서 해당 내용을 찾아볼 수 있다

(esp-matter/components/esp_matter/esp_matter_core.cpp

line 865 ~ 910: 함수명: chip_init

static esp_err_t chip_init(event_callback_t callback)
{
    // ...
    ConnectivityMgr().SetBLEAdvertisingEnabled(true);
    // ConnectivityMgr().SetWiFiAPMode(ConnectivityManager::kWiFiAPMode_Enabled);
    if (PlatformMgr().StartEventLoopTask() != CHIP_NO_ERROR) {
    // ...
    PlatformMgr().ScheduleWork(esp_matter_chip_init_task, reinterpret_cast<intptr_t>(xTaskGetCurrentTaskHandle()));
    // Wait for the matter stack to be initialized
    xTaskNotifyWait(0, 0, NULL, portMAX_DELAY);
    return ESP_OK;
}

886번 line의 주석을 빼고, idf.py menuconfig 등을 통해 다음 빌드 옵션을 추가해주자

sdkconfig 파일에 다음 항목들이 있어야 한다

CONFIG_ESP_WIFI_SOFTAP_SUPPORT=y
CONFIG_ENABLE_WIFI_AP=y
CONFIG_WIFI_AP_SSID_PREFIX="APNAMEPREFIX-"
CONFIG_WIFI_AP_CHANNEL=1
CONFIG_WIFI_AP_MAX_STATIONS=4
CONFIG_WIFI_AP_BEACON_INTERVAL=100
CONFIG_WIFI_AP_IDLE_TIMEOUT=120000

(SoftAP 모드가 활성화되어야 하며, Enable WiFi AP가 활성화되어야 한다)

 

빌드 후 플래싱해보니 BLE 커미셔닝이 되기 전에도 "APNAMEPREFIX-XXX-YYYY-ZZZZ " 이름을 가진 WiFi SSID가 정상적으로 생성되며, 접속 후 웹소켓 통신도 가능한 것을 확인했다

(Prefix 뒤에 붙은건 CHIP용 VIP, PID 등의 값들이다)

※ 아직 커미셔닝  후의 동작은 확인하지 않았다


#include <platform/CHIPDeviceLayer.h>
using chip::DeviceLayer::ConnectivityMgr;
ConnectivityMgr().SetWiFiAPMode(ConnectivityManager::kWiFiAPMode_Enabled);

SetWiFiAPMode를 PlatformMgr().ScheduleWork() 함수 호출 후 임의의 코드에서 호출해도 정상적으로 Wi-Fi Access Point가 생성되는걸 확인했다

esp_matter_core.cpp 소스코드를 수정하지 않고, 특정 시점에서만 AP Mode를 활성화하게 수정해봐야겠다

반응형