728x90
반응형
시작하기
이번에는 NFC 태그가 되면 태그 메시지를 전송하는 예제에 대해서 간단하게 알아보도록 하겠다.
\examples\nfc\record_text\pca10040\blank\ses 폴더에서 프로젝트를 실행한다.
#define MAX_REC_COUNT 3 /**< Maximum records count. */
/* Text message in English with its language code. */
/** @snippet [NFC text usage_1] */
static const uint8_t en_payload[] =
{
'H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd', '!'
};
static const uint8_t en_code[] = {'e', 'n'};
/** @snippet [NFC text usage_1] */
/* Text message in Norwegian with its language code. */
static const uint8_t no_payload[] =
{
'H', 'a', 'l', 'l', 'o', ' ', 'V', 'e', 'r', 'd', 'e', 'n', '!'
};
static const uint8_t no_code[] = {'N', 'O'};
/* Text message in Polish with its language code. */
static const uint8_t pl_payload[] =
{
'W', 'i', 't', 'a', 'j', ' ', 0xc5, 0x9a, 'w', 'i', 'e', 'c', 'i', 'e', '!'
};
static const uint8_t pl_code[] = {'P', 'L'};
/* Buffer used to hold an NFC NDEF message. */
uint8_t m_ndef_msg_buf[256];
/**
* @brief Function for application main entry.
*/
int main(void)
{
uint32_t len = sizeof(m_ndef_msg_buf);
uint32_t err_code;
log_init();
/* Configure LED-pins as outputs */
bsp_board_init(BSP_INIT_LEDS);
/* Set up NFC */
err_code = nfc_t2t_setup(nfc_callback, NULL);
APP_ERROR_CHECK(err_code);
/* Encode welcome message */
err_code = welcome_msg_encode(m_ndef_msg_buf, &len);
APP_ERROR_CHECK(err_code);
/* Set created message as the NFC payload */
err_code = nfc_t2t_payload_set(m_ndef_msg_buf, len);
APP_ERROR_CHECK(err_code);
/* Start sensing NFC field */
err_code = nfc_t2t_emulation_start();
APP_ERROR_CHECK(err_code);
while (1)
{
NRF_LOG_FLUSH();
__WFE();
}
}
record_launch_app 예제와 NFC 사용 방식은 기본적으로 동일하며 메시지 인코딩을 위한 welcome_msg_encode 함수를 사용하는 부분만 다르다.
/**
* @brief Function for encoding the NDEF text message.
*/
static ret_code_t welcome_msg_encode(uint8_t * p_buffer, uint32_t * p_len)
{
/** @snippet [NFC text usage_2] */
ret_code_t err_code;
/* Create NFC NDEF text record description in English */
NFC_NDEF_TEXT_RECORD_DESC_DEF(nfc_en_text_rec,
UTF_8,
en_code,
sizeof(en_code),
en_payload,
sizeof(en_payload));
/** @snippet [NFC text usage_2] */
/* Create NFC NDEF text record description in Norwegian */
NFC_NDEF_TEXT_RECORD_DESC_DEF(nfc_no_text_rec,
UTF_8,
no_code,
sizeof(no_code),
no_payload,
sizeof(no_payload));
/* Create NFC NDEF text record description in Polish */
NFC_NDEF_TEXT_RECORD_DESC_DEF(nfc_pl_text_rec,
UTF_8,
pl_code,
sizeof(pl_code),
pl_payload,
sizeof(pl_payload));
/* Create NFC NDEF message description, capacity - MAX_REC_COUNT records */
/** @snippet [NFC text usage_3] */
NFC_NDEF_MSG_DEF(nfc_text_msg, MAX_REC_COUNT);
/** @snippet [NFC text usage_3] */
/* Add text records to NDEF text message */
/** @snippet [NFC text usage_4] */
err_code = nfc_ndef_msg_record_add(&NFC_NDEF_MSG(nfc_text_msg),
&NFC_NDEF_TEXT_RECORD_DESC(nfc_en_text_rec));
VERIFY_SUCCESS(err_code);
/** @snippet [NFC text usage_4] */
err_code = nfc_ndef_msg_record_add(&NFC_NDEF_MSG(nfc_text_msg),
&NFC_NDEF_TEXT_RECORD_DESC(nfc_no_text_rec));
VERIFY_SUCCESS(err_code);
err_code = nfc_ndef_msg_record_add(&NFC_NDEF_MSG(nfc_text_msg),
&NFC_NDEF_TEXT_RECORD_DESC(nfc_pl_text_rec));
VERIFY_SUCCESS(err_code);
/** @snippet [NFC text usage_5] */
err_code = nfc_ndef_msg_encode(&NFC_NDEF_MSG(nfc_text_msg),
p_buffer,
p_len);
return err_code;
/** @snippet [NFC text usage_5] */
}
NFC_NDEF_TEXT_RECORD_DESC_DEF 매크로를 통해 nfc_en_text_rec, nfc_no_text_rec, nfc_pl_text_rec로 NDEF 텍스트 레코드를 UTF-8로 생성하고 NFC_NDEF_MSG_DEF 매크로를 통해 nfc_text_msg의 NDEF 레코드 헤더를 생성한다.
nfc_ndef_msg_record_add 함수를 통해 UTF-8로 생성한 텍스트 레코드들을 페이로드 레코드에 추가해준다.
마지막으로 nfc_ndef_msg_encode 함수를 통해 NDEF 메시지를 인코딩하면 마무리된다.
728x90
반응형
'Embedded > nRF52 BLE 개발 안내서' 카테고리의 다른 글
nRF52 BLE 개발하기 - nfc/record_url (1) | 2021.02.24 |
---|---|
nRF52 BLE 개발하기 - nfc/record_launch_app (0) | 2021.02.23 |
nRF52 BLE 개발하기 - saadc (0) | 2021.02.17 |
nRF52 BLE 개발하기 - pwm_driver (4) | 2021.02.07 |
nRF52 BLE 개발하기 - low_power_pwm (0) | 2021.02.04 |
댓글