게시글 상세

목록으로

ESP32 BLE HID 기반 PET RFID 리더 구현

조회수: 16
작성자: june9152
등록일: 2026-03-29 07:30 수정일: 2026-04-04 22:20

ESP32 + BLE(HID) 기반으로 PET RFID 태그를 읽는 시스템을 소개합니다.

이 방식의 핵심은 다음입니다:

  • RFID 리더가 BLE HID(키보드) 형태로 데이터를 전송

  • ESP32가 이를 키보드 입력처럼 받아 처리

  • 최종적으로 RFID 값을 JSON 형태로 출력

👉 즉, 별도의 RFID 프로토콜 없이도 태그 읽기 가능

🧠 동작 구조

전체 흐름은 아래와 같습니다:

RFID 태그 스캔

BLE HID (키보드 입력 형태)

ESP32 수신

스캔코드 → 문자 변환

문자열 완성 (Enter 기준)

JSON 출력


⚙️ 주요 기능 요약

기능

설명

BLE 스캔

HID 장치 자동 탐색

자동 연결

TAG 또는 HID 서비스 감지 시 연결

HID 파싱

키보드 입력을 문자로 변환

태그 조립

Enter 기준으로 하나의 ID 완성

출력

{"id":"태그값"} 형태


🔑 핵심 코드 설명


1️⃣ HID 스캔코드 → 문자 변환

static char scancodeToChar(uint8_t code)

👉 BLE HID 키보드에서 오는 데이터는 ASCII가 아니라 스캔코드

예:

  • 0x04 → A

  • 0x1E → 1

📌 역할:

  • 스캔코드를 사람이 읽을 수 있는 문자로 변환


2️⃣ HID 데이터 처리

static void processHIDReport(const uint8_t *data, int len)

👉 핵심 로직 (가장 중요)

동작:

  1. HID 데이터 수신

  2. 문자 변환

  3. 버퍼에 저장

  4. Enter(\n) 오면 출력

if (c == '\n') {

Serial.printf("{\"id\":\"%s\"}\n", tagBuffer);

}

✔ 결과 예시:

{"id":"1234567890"}


3️⃣ BLE HID 서비스 탐색

svcDiscCB()

👉 UUID 0x1812 = HID 서비스

  • HID 장치인지 확인

  • 해당 서비스 범위 저장


4️⃣ HID Report Characteristic 찾기

charDiscCB()

👉 중요한 UUID:

  • 0x2A4D → HID Report

  • 0x2A22 → Boot Keyboard

✔ Notify 가능한 것만 저장


5️⃣ Notification 활성화

enableNotification()

👉 CCCD(0x2902)에 write해서

데이터를 실시간으로 받도록 설정


6️⃣ BLE 이벤트 처리 (핵심 상태 머신)

gapEventHandler()

주요 이벤트:

이벤트

설명

CONNECT

연결 성공

DISCONNECT

연결 해제

NOTIFY_RX

데이터 수신

ENC_CHANGE

암호화 완료

PASSKEY

페어링 처리

✔ 여기서 실제 데이터 들어옴:

case BLE_GAP_EVENT_NOTIFY_RX:

processHIDReport(buf, len);


7️⃣ BLE 스캔 필터

if (name.indexOf("TAG") >= 0 || dev->isAdvertisingService("1812"))

👉 조건:

  • 이름에 TAG 포함

  • 또는 HID 서비스 광고

✔ 즉, RFID 리더 자동 탐색


8️⃣ 전체 루프 흐름

loop()

동작:

  1. 스캔 완료 → 연결 시도

  2. 실패 → 재스캔

  3. 끊어짐 → 재연결

👉 완전 자동 시스템


📡 실제 출력 결과

시리얼 모니터:

[BLE] Connected

[BLE] Ready! Scan a pet tag...

{"id":"A123456789"}


💡 활용 아이디어

이 구조는 생각보다 강력합니다 👇

🐶 반려동물 관리 시스템

  • RFID 등록

  • 병원 기록 조회

  • 출입 관리


🍽️ 반려동물 출입 식당

  • NFC/RFID 찍으면

  • 건강 기록 확인

👉 네가 말한 아이디어랑 딱 맞음


🏭 산업용 출입 인증

  • 카드 대신 BLE HID 리더 사용


🚀 장점

✔ UART/RS485 필요 없음

✔ 드라이버 필요 없음

✔ HID 표준이라 호환성 좋음

✔ 구현 난이도 낮음


⚠️ 주의사항

  • HID 장치마다 스캔코드 다를 수 있음

  • 특수문자 처리 추가 필요

  • 대소문자 (Shift) 처리 없음 → 필요 시 추가


✍️ 마무리

이번 프로젝트는 단순한 RFID 리더가 아니라

👉 BLE HID 기반 입력 시스템

으로 확장 가능한 구조입니다.

특히 ESP32 하나로:

  • BLE 스캔

  • HID 파싱

  • 데이터 처리

까지 다 가능하다는 점이 핵심입니다.


📌 결론

👉 “RFID 리더를 키보드처럼 쓰는 구조”

이거 하나 이해하면

IoT 시스템 설계 난이도 확 내려갑니다.

아래와같은 방식으로 식당 POS기기에 도입하여 사용중입니다.

강아지 NFC가 입력되면 JSON 데이터가 Serial로 들어오기 때문에 해당 데이터를 읽은 POS기기에서

"건강한 강아지네요" 신규등록 음성알림

"단골 댕댕이네요" 재방문 음성알림


업로드된 이미지

위 와같이 제가 개발한 포스시스템이 붙여서 현재 사용중입니다.

서버도 별도로 개발 하여 강아지 동물코드도 별도로 관리하고 있습니다.

반려견 문화가 좋은 쪽으로 많이 발전하였으면 좋겠습니다. ^^

처리 중입니다...

잠시만 기다려주세요.