BLE 3

[ESP32] esp_timer 와 sleep 모드 동시 사용시 발생하는 간섭

[ESP32] esp_timer와 sleep 모드 동시 사용 시 발생하는 간섭 ESP-IDF에는esp_timer 가 있습니다. 해당 timer는 task에서 제어됩니다. sleep 모드도 같이 사용할 경우 task가 제대로 작동되지 않는 문제가 발생합니다. 이런 경우에는 하드웨어 타이머를 사용하는 것이 좋습니다. 따라서 esp_timer 보다는 FreeRTOS에서 제공하는 하드웨어 타이머 함수들을 사용하면, 타이머 인터럽트가 제대로 작동하지 않는 문제들을 해결할 수 있습니다. 저의 경우에는 esp_timer와 ble 기능과 modem sleep을 활성화하고 나면, esp_timer로 등록된 타이머 인터럽트 함수가 제대로 작동하지 않는 것을 확인했습니다. #include "freertos/FreeRTOS...

블루투스 AutoConnect 시 지속적으로 연결, 연결해제되는 문제

블루투스 AutoConnect 시 지속적으로 연결, 연결 해제되는 문제 Android와 ESP32 간에 블루투스(BLE)를 연결하고, 일정 거리 벌어진 뒤에 다시 가까이 오면 자동 연결되는 기능을 구현하다 보면, 안드로이드 앱은 계속해서 Connect를 시도하지만, 모종의 이유로 Connect -> Disconnect -> Connect... 가 반복됩니다. Bonding 데이터를 해제하고 다시 해도 안되며, 캐시의 문제일 가능성이 높습니다. 특히나 rsn:0x3d로 연결이 실패되는 경우에는 링크글(https://thinkanother.tistory.com/27)을 확인하시면, 캐시를 지우는 방법을 확인할 수 있습니다.

개발/통신 2022.12.20

[ESP32 BLE 에러] BT_HCI: hcif disc complete: rsn 0x3d

[ESP32 에러] BT_HCI: hcif disc complete: rsn 0x3d 위와 같은 에러가 뜬다면, 기존에 ble 작업하면서, bonding 되어 있는 데이터를 삭제하고 다시 진행하면 됩니다. 안드로이드 개발 과정이라면, 블루투스 기기를 등록하고 해제를 반복하면서, 캐시가 쌓여있을 수 있습니다. 이는 캐시를 지우는 과정을 진행해야 합니다. 이 과정을 refresh라고 알려져 있습니다. 이 기능을 블루투스 기기와 연결 해제되었을 때 실행하도록 하면 됩니다. java를 사용하는 경우는 다음과 같습니다. private void refreshDeviceCache(BluetoothGatt gatt) { try { Method localMethod = gatt.getClass().getMethod("r..