본문 바로가기

ESP32

esp32에서 블루투스를 사용하여 스마트폰과 데이터를 주고받는 방법

반응형

 

내장된 시스템 하드웨어와 블루투스를 사용하여 통신하는 것은 와이파이를 사용할 수 없는 곳에서 매우 유용하며 제품 비용도 절감할 수 있습니다. 다음은 블루투스와 BLE가 내장된 esp32가 안드로이드 모바일 애플리케이션과 통신하여 블루투스를 통해 데이터를 교환하는 간단한 예시입니다. 글의 원문은 이 링크를 따라가시면 만날 수 있습니다.

 

#include  "esp_bt.h"
#include "esp_bt_main.h"
#include "esp_gap_bt_api.h"
#include "esp_bt_device.h"
#include "esp_spp_api.h"

static bool connected = false;
static esp_spp_cb_param_t spp_param;
static esp_spp_cb_t spp_cb = {
    .connect_cb = spp_connect_callback,
    .disconnect_cb = spp_disconnect_callback,
    .data_ind_cb = spp_data_callback,
};


// callback function for when a device is connected
void spp_connect_callback(esp_spp_cb_param_t *param) {
    connected = true;
    spp_param = *param;
    printf("Connected to %s\n", param->connect.rem_bda);
}


// callback function for when a device is disconnected
void spp_disconnect_callback(esp_spp_cb_param_t *param) {
    connected = false;
    printf("Disconnected from %s\n", param->disconnect.rem_bda);
}


// callback function for when data is received
void spp_data_callback(esp_spp_cb_param_t *param) {
    printf("Received data: %s\n", param->data_ind.data);
}


void send_data(char *data) {
    if (connected) {
        esp_spp_write(spp_param.connect.handle, strlen(data), (uint8_t*)data);
        printf("Sent data: %s\n", data);
    } else {
        printf("Not connected, can't send data\n");
    }
}


void app_main() {
    // initialize the Bluetooth stack
    esp_bt_controller_init();
    esp_bt_controller_enable(ESP_BT_MODE_BTDM);
    // set the device name
    esp_bt_dev_set_device_name("ESP32_Device");
    // start scanning for devices
    esp_bt_gap_start_discovery(ESP_BT_INQ_MODE_GENERAL_INQUIRY, 5, 0);
    // register the callback function
    esp_bt_gap_register_callback(ESP_BT_GAP_DISC_RES_EVT, &device_found_callback);
    esp_spp_register_callback(&spp_cb);
    esp_spp_init(ESP_SPP_MODE_CB);
}

"

 

이 코드는 ESP-IDF 프레임워크를 사용하여 ESP32 마이크로컨트롤러를 위한 임베디드 C로 작성되었습니다. 이 코드는 ESP32와 Android 모바일 애플리케이션 간에 Bluetooth 연결을 설정하고 이 연결을 통해 데이터를 송수신하는 데 사용됩니다.

 

이 코드는 ESP-IDF Bluetooth 스택과 Serial Port Profile(SPP) API에 대한 여러 헤더 파일을 포함하는 것으로 시작합니다.

 

다음으로, 이 코드는 여러 전역 변수와 콜백 함수를 정의합니다. connected 변수는 ESP32가 현재 장치에 연결되어 있는지 여부를 추적하는 데 사용됩니다. spp_param 변수는 콜백 함수에 전달된 매개변수를 저장하는 데 사용됩니다. spp_cb 변수는 콜백 함수에 대한 포인터를 포함하는 esp_spp_cb_t 구조체의 인스턴스입니다.

 

spp_connect_callback() 함수는 장치가 ESP32에 연결될 때 호출됩니다. 이 함수는 connected 변수를 true로 설정하고, 함수에 전달된 매개변수를 spp_param 변수에 저장하고, 연결이 설정되었음을 나타내는 메시지를 인쇄합니다.

 

spp_disconnect_callback() 함수는 장치가 ESP32에서 연결이 끊어질 때 호출됩니다. 이 함수는 연결된 변수를 false로 설정하고 연결이 끊어졌다는 메시지를 출력합니다.

 

spp_data_callback() 함수는 연결된 장치에서 데이터를 수신할 때 호출됩니다. 이 함수는 수신된 데이터를 콘솔에 출력합니다.

 

send_data() 함수는 연결된 장치로 데이터를 전송하는 데 사용됩니다. 이 함수는 현재 연결이 설정되었는지 확인하고 그렇다면 esp_spp_write() 함수를 사용하여 데이터를 전송하고 데이터가 전송되었음을 나타내는 메시지를 출력합니다.

 

app_main() 함수에서 이 코드는 Bluetooth 스택을 초기화합니다.

 

감사합니다.

 

이와 같은 업데이트를 더 보려면 좋아요를 누르고 구독하세요. 

 

 

https://youtu.be/5KqW-apFWjY?si=-KS8t3rRAIrqSVHa

 

 

 

반응형

더욱 좋은 정보를 제공하겠습니다.~ ^^