NFC 태그의 NDEF 데이터 처리를 위한 웹 플러그인 개발

NDEF 데이터 읽기 및 쓰기 기능 소개

NDEF(Non-Contact Forum Data Exchange Format)는 NFC 기기 간에 표준화된 데이터 교환을 가능하게 하는 포맷입니다. 이 형식을 사용하면 다양한 장치가 미리 정의된 규칙 없이도 직접 데이터를 읽거나 쓸 수 있습니다. 카드 종류에 관계없이, 우아기술사의 모든 NFC 리더기 제품은 이 표준을 지원합니다.

주요 지원되는 NDEF 데이터 유형은 다음과 같습니다:

  • 0: 텍스트 데이터 (Text Type)
  • 1: http://www. 접두사 포함 웹 주소
  • 2: https://www. 접두사 포함 웹 주소
  • 3: http:// 접두사 포함 웹 주소
  • 4: https:// 접두사 포함 웹 주소
  • 5: 전화번호 (tel:)
  • 6: 이메일 주소 (mailto:)
  • 7: 문자 메시지 (sms:)

이 외에도 더 많은 유형이 존재하며, 자세한 사양은 NFC 포럼 공식 문서를 참조하세요.

우아기술사 웹 플러그인의 NDEF API

이 플러그인은 M1 카드, NTAG 등 다양한 NFC 태그에 대해 NDEF 쓰기/읽기 작업을 지원하며, 4개의 주요 함수를 제공합니다.

  1. NDEF 기록 추가 (메모리 내 저장)
NDEF_AddRecord(type, content)
  • type: NDEF 데이터 유형 코드 (0~7)
  • content: 실제 데이터 문자열 (예: "example.com" → URI=1 경우 "www." 생략)

함수 호출 시 태그에 직접 작동하지 않으며, 내부 리스트에만 저장됩니다.

  1. 모든 기록 삭제 (메모리 내)
NDEF_ClearAllRecords()
  • 파라미터 없음
  • 현재 메모리에 저장된 모든 기록을 제거
  1. 메모리 내용을 태그에 쓰기
NDEF_Write()
  • 파라미터 없음
  • 현재 메모리에 저장된 모든 기록을 선택된 NFC 태그에 기록
  1. 태그에서 모든 기록 읽기
NDEF_Read()
  • 파라미터 없음
  • 태그에 저장된 모든 NDEF 기록을 읽어와 반환

JavaScript 예제 코드

다음은 실용적인 사용 예제입니다:

// 메모리에 새로운 기록 추가 (예: 웹사이트)
function addNdefRecord() {
    const recordType = 1; // www. 접두사 포함
    const urlContent = "youwokeji.com.cn"; // 'www.' 생략 가능

    rfidreader.Repeat = 0;
    rfidreader.NDEF_AddRecord(recordType, urlContent);
}

// 전체 목록 초기화
function clearNdefList() {
    rfidreader.Repeat = 0;
    rfidreader.NDEF_ClearAllRecords();
}

// 메모리의 모든 기록을 태그에 쓰기
function writeNdefToTag() {
    rfidreader.Repeat = 0;
    rfidreader.NDEF_Write();
}

// 태그에서 데이터 읽기
function readNdefFromTag() {
    rfidreader.Repeat = 0;
    rfidreader.NDEF_Read();
}

모든 작업 결과는 콜백 함수로 전달됩니다:

rfidreader.onResult(function(response) {
    switch (response.FunctionID) {
        case 51: // AddRecord 성공 여부
            if (response.Result > 0) {
                alert("기록 추가 성공");
            }
            break;

        case 52: // ClearAll 성공 여부
            if (response.Result > 0) {
                alert("기록 목록 비움 성공");
            }
            break;

        case 53: // Write 성공 여부
            if (response.Result > 0) {
                alert(`태그에 쓰기 성공: 카드번호 ${response.CardNo}`);
            }
            break;

        case 54: // Read 성공 여부
            if (response.Result >= 0) {
                const cardNumber = response.CardNo;
                const dataType = response.ValData;
                const dataValue = response.strData;
                console.log(`읽은 데이터 - 유형: ${dataType}, 값: ${dataValue}`);
            }
            break;
    }
});

각 함수는 태그에 직접 접근하는 것이 아니라, 내부 큐를 통해 관리되며, 최종적으로 Write 또는 Read를 통해 실제 물리적 작업이 수행됩니다.

태그: NFC NDEF Web Plugin JavaScript IC Card Reader

6월 14일 20:45에 게시됨