개발/ESP32, ESP8266 14

[ESP32] wifi 연결시 특정 와이파이 기기(AP)에 연결안되던 점

ESP32를 사용하면서 wifi를 연결을 구현하고 싶을 때가 있습니다. 그런데, 간혹 가다가 정확한 코드에 정확한 SSID, PW를 입력했음에도 불구하고, 연결이 안 되던 적이 있었습니다. 여러 방면으로 원인을 찾아봤지만, 근본적인 원인은 찾지 못했고 단기적인 해결책만 찾았습니다. ※이는 개인적인 상황에서 해결책임으로 보편적인 해결책이 아닐 수 있습니다. 저의 상황은 다음과 같습니다. 사용한 예제코드는 ESP32의 예제 중 하나인 WifiClient입니다. /* * This sketch sends data via HTTP GET requests to data.sparkfun.com service. * * You need to get streamId and privateKey at data.sparkfun..

[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...

[ESP32] RTC_SW_CPU_RST 에러

[ESP32] RTC_SW_CPU_RST ESP32로 특정 코드를 업로드하였는데, 계속해서 위와 같은 에러를 띄우고 재부팅을 한다면, menuconfig 같은 설정들을 저장하지 않았는지 확인해봅니다. 저의 경우 Vscode로 menuconfig를 설정을 다 해놓았지만, 저장하지 않고 바로 빌드 - 업로드하는 바람에 코드와 설정간의 차이로 계속 재부팅이 반복되는 현상이 있었는데, 원인은 저장을 하지 않았던 것입니다.

[ESP32 BLE 에러] BT_HCI: hcif disc complete: hdl 0x1, rsn 0x3e

[ESP32 BLE 에러] BT_HCI: hcif disc complete: hdl 0x1, rsn 0x3e 위와 같은 에러가 뜬다면, 특정 정보가 잘못되었을 경우에 발생합니다. 저의 경우에는 외부 크리스탈(External xtal)을 사용하였는데, 잘못된 주파수를 발진하고 있음에도 불구하고 프로그램이 잘못 되었음을 인지하지 못했습니다. 그래서 주파수 오류없이 본 코드로 들어갔다가 연결오류를 띄웠습니다. 해당 크리스탈을 제거하고, 노이즈 없이 새로 연결한 결과는 해당 오류가 나타나지 않았습니다. 0x3e의 에러는 블루투스 5.0 core 설명에서 다음과 같이 되어 있습니다. 연결시 특정 정보를 설정하지 못했음을 알리는 에러입니다. 더보기 2.59 CONNECTION FAILED TO BE ESTABLIS..

[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..

ESP8266(ESP-01, ESP-01S) wifi client, 서버로 부터 데이터 받기

이번에는 wifi client - esp8266에 대해서 알아봅니다. 코드의 기능은 특정 서버에 데이터를 보내 응답을 받습니다. 따라서 esp8266은 client의 기능을 합니다. /* This sketch establishes a TCP connection to a "quote of the day" service. It sends a "hello" message, and then prints received data. */ #include #ifndef STASSID #define STASSID "your-ssid" #define STAPSK "your-password" #endif const char* ssid = STASSID; const char* password = STAPSK; const c..

ESP8266(ESP-01, ESP-01S) SSE, 서버에서 클라이언트에게 데이터 전송

ESP8266(ESP-01, ESP-01S) SSE, 서버에서 클라이언트에게 데이터 전송 ESP8266에서 서버에서 데이터를 받고 싶다면, 고려해 볼 수 있는 SSE(Server Sent Events)에 관한 예제를 살펴보겠습니다. 파일 - 예제 - ESP8266WebServer - SeverSentEvents를 열어주시면 됩니다. SSE에 대해서 잠시 설명드리면, 클라이언트와 서버가 소통하는 방법중 하나인데, 기존에 양방향 소통이 가능하던 웹소켓과 달리 서버 → 클라이언트만 가능한 방법입니다. 그렇다면 웹소켓 방식에서 클라이언트 → 서버로 데이터를 주는 것만 사용 안 하면, 되지 않냐 하시겠지만 이는 배터리 소모면에서는 SSE를 선택하는 것이 좋습니다. 기본적으로 ESP 계열은 IOT나 배터리를 사용하..

ESP8266(ESP-01, ESP-01S) 웹서버 만들기, Html 출력하기

ESP8266(ESP-01, ESP-01S) 웹서버 만들기, Html 출력하기 이전 글(ESP 웹 서버에 문자 출력하기)에 이어서 이번에는 html 코드를 출력해보도록 하겠습니다. 마찬가지로 이를 하기 위해 적절한 예시가 있습니다. 예제 - ESP8266WebServer - PostServer를 선택해 줍니다. 이 예제는 ESP의 웹서버에 Post 요청을 하는 내용이 포함되어 있습니다. Post는 서버에 요청하는 방식 중 하나이며, 서버에 있는 어떤 리소스들을 변경, 생성하기 위함입니다. 당장 이해가 안 된다면, 예제를 차근차근 진행해주시기 바랍니다. #include #include #include #include #ifndef STASSID #define STASSID "your-ssid" #defin..

ESP8266(ESP-01, ESP-01S) 웹서버 만들기, 간단한 문자 출력

ESP8266(ESP-01, ESP-01S) 웹서버 만들기, 간단한 문자 출력 ESP01 시리즈로 서버를 만들어 봅니다. 서버는 클라이언트(ex 사용자)에게 정보를 제공해주는 시스템이라고 보시면 됩니다. 따라서 우리가 ESP가 만들어 놓은 서버에 브라우저를 통해서 접속을 할 수 있고, 제공하는 특정 정보를 볼 수 있습니다. 웹서버를 만드는 쉬운 예제가 있습니다. 파일-예제-ESP8266WebServer-HellowServer 입니다. 해당 예제를 선택해주면, 아래와 같은 코드들이 나타납니다. #include #include #include #include #ifndef STASSID #define STASSID "your-ssid" #define STAPSK "your-password" #endif co..

ESP8266(ESP-01, ESP-01S) 와이파이 리스트 검색

ESP8266(ESP-01, ESP-01S) 와이파이 리스트 검색 이전 글에 이어서 ESP01을 기준으로 설명합니다. ESP01로 현재 있는 곳에 퍼지고 있는 와이파이가 어떤 것들이 있는지 확인할 수 있습니다. 다행히도 이 코드는 예제 파일에 포함되어 있습니다. 파일 - 에제 - ESP8266WIFI - WifiScan 예제를 선택해 주시면 됩니다. 코드는 아래와 같습니다. /* This sketch demonstrates how to scan WiFi networks. The API is almost the same as with the WiFi Shield library, the most obvious difference being the different file you need to include..