본문으로 바로가기

[nRF52] [Android App] BLE Advertising 이름에 한글 넣기

category Nordic_nRF52 2023. 8. 4. 10:53

: nRF52 및 Android앱를 사용해 Advertising 이름에 한글을 넣어 보았습니다.

 

0>  Adertising 이름 설정하기

#define TEST_NAME		"TEST_123"
err_code = sd_ble_gap_device_name_set(&sec_mode,
        (const uint8_t *)TEST_NAME,
        strlen(TEST_NAME));

 

 

1> Advertising  데이타에 한글 넣기

   ==> main.c 에 삽입시 성능이 너무 느려짐.. (SES 디버깅)

#define DEVICE_NAME                     "테스트" 
sd_ble_gap_device_name_set(&sec_mode, (const uint8_t *)DEVICE_NAME,  strlen(DEVICE_NAME));

 

2>  NUS 서비스를 사용해 앱에서 이름 전송하게 변경

  2-1> 앱에서 이름 설정 및 UTF8 포맷으로 이름전송하기


fun cmdChangeDevName(devName : String) : Int {
    val aName =devName.toByteArray(Charsets.UTF_8)
    ~~ 중략 ~~
    bluetoothGatt?.writeCharacteristic(charac)
}

   >> "리모컨123"  String 데이타를 UTF_8 형으로 변환을 해줍니다.

< 분석 > 

  "" 글자만 변환하는 방법을 분석해 보겠습니다.

   한글 "" 의 16진수 Unicode 값 :  B9AC  (10111001 10101100 )

   UTF-8 변환

  10111001 10101100

  11101011  10100110    10101100

 

아래의 변환공식 참고하세요.

 

  2-2> 전송된 이름 Flash 저장 

FDS 사용해 UTF-8 포맷 데이타 그대로 쓰기
static fds_record_t const m_sys_config_record =
{
    .file_id           = CONFIG_SYS_FILE,
    .key               = CONFIG_SYS_REC_KEY,
    .data.p_data       = &g_sys_config,
    /* The length of a record is always expressed in 4-byte units (words). */
    .data.length_words = (sizeof(g_sys_config) + 3) / sizeof(uint32_t),
};

iRet = fds_record_write(&desc,  &m_sys_config_record);

 

  2-3> Flash 저장된 이름을 가져와 ADV 하기

static void gap_params_init(void)
{
    err_code = sd_ble_gap_device_name_set(&sec_mode,
                (const uint8_t *)&g_sys_config.device_name,
                strlen(&g_sys_config.device_name));
        ~~ 중략 ~~
}

 

 

3> 화면에 표시되는 ADV 이름 체킹

 

일본어도 한글처럼 UTF8로 변환후 저장하면 ADV 이름이 변경됩니다.

 

그럼 오늘 하루도 수고하세요.

반응형