본문 바로가기

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

 

 

 

반응형

캐어랩 고객 지원

취업, 창업의 막막함, 외주 관리, 제품 부재!

당신의 고민은 무엇입니까? 현실과 동떨어진 교육, 실패만 반복하는 외주 계약, 아이디어는 있지만 구현할 기술이 없는 막막함.

우리는 알고 있습니다. 문제의 원인은 '명확한 학습, 실전 경험과 신뢰할 수 있는 기술력의 부재'에서 시작됩니다.

이제 고민을 멈추고, 캐어랩을 만나세요!

코딩(펌웨어), 전자부품과 디지털 회로설계, PCB 설계 제작, 고객(시장/수출) 발굴과 마케팅 전략으로 당신을 지원합니다.

제품 설계의 고수는 성공이 만든 게 아니라 실패가 만듭니다. 아이디어를 양산 가능한 제품으로!

귀사의 제품을 만드세요. 교육과 개발 실적으로 신뢰할 수 있는 파트너를 확보하세요.

지난 30년 여정, 캐어랩이 얻은 모든 것을 함께 나누고 싶습니다.

카카오 채널 추가하기

카톡 채팅방에서 무엇이든 물어보세요

당신의 성공을 위해 캐어랩과 함께 하세요.

캐어랩 온라인 채널 바로가기

캐어랩