내장된 시스템 하드웨어와 블루투스를 사용하여 통신하는 것은 와이파이를 사용할 수 없는 곳에서 매우 유용하며 제품 비용도 절감할 수 있습니다. 다음은 블루투스와 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 스택을 초기화합니다.
감사합니다.
이와 같은 업데이트를 더 보려면 좋아요를 누르고 구독하세요.
'ESP32' 카테고리의 다른 글
ESP32 Arduino Websocket 서버: JSON 콘텐츠 수신 및 파싱 (1) | 2024.11.14 |
---|---|
TM74 LED Driver - 4 digit 7 segment (1) | 2024.11.11 |
ESP32 4-digit 7-segment display (4) | 2024.11.11 |
Android 폰에서 ESP32로 데이터를 보내는 방법 (5) | 2024.11.11 |
ESP32 센서 데이터 대시보드 BLE, Flask 서버, SQLite (5) | 2024.11.09 |
ESP32 74HC595 4자리 7세그먼트 디스플레이 (2) | 2024.11.08 |
ESP32-wroom-32 high resolution pinout and specs (2) | 2024.11.08 |
1.69inch LCD Display Module, 240×280 (2) | 2024.11.06 |
더욱 좋은 정보를 제공하겠습니다.~ ^^