PokeVault: STM32-Based Security Vault for Sealed Pokémon Collectibles
An STM32F411 security box concept using RFID access, IR line-break sensing, AHT20 monitoring, and W5500 Ethernet groundwork.
1. Overview
PokeVault is an STM32-based embedded security-vault project for sealed collectibles. The repository describes it as a personal storage/security system for Pokémon sealed collectors, but the codebase shows a broader embedded architecture: RFID-based access control, IR line-break open/close detection, temperature/humidity monitoring, and Ethernet connectivity groundwork.
The project is not presented as a finished commercial device. The repository has no published releases, no stars or forks at the time of checking, and only a short README. Its value is mainly in the embedded system structure rather than a complete user-facing product. Humanity has once again compressed the README to near-vacuum levels, so the code has to do the explaining.
2. What the System Does
PokeVault is best understood as a sealed collectible security box firmware prototype. It combines four major roles:
| Function | Component | Role |
|---|---|---|
| Access authorization | MFRC522 RFID reader / keycard logic | Reads RFID keycards and checks stored UIDs |
| Vault state detection | IR line-break sensors | Detects whether storage units are open or closed |
| Environmental monitoring | AHT20 sensor | Measures temperature and humidity |
| Network foundation | WIZnet W5500 | Provides Ethernet initialization and network connection groundwork |
The repository uses a typical STM32 firmware layout with Core, Drivers, a Makefile, startup file, linker script, and a CubeMX-style .ioc file. The Makefile lists application and driver modules such as keycard.c, security.c, alerts.c, rendering.c, adc.c, aht20.c, ir_sensor.c, mfrc522.c, ssd1306.c, and w5500.c.
3. System Architecture
[RFID Keycard / User]
|
v
[MFRC522 RFID Reader]
|
| SPI
v
+----------------------------+
| STM32F411 Microcontroller |
| Central Control Logic |
+----------------------------+
| | |
| ADC + DMA | I2C | SPI
v v v
[IR Sensors] [AHT20] [WIZnet W5500]
| | |
v v v
Vault open / Temperature Ethernet link,
closed state humidity DHCP / DNS baseThe STM32F411 acts as the central controller. It receives RFID-related access data, samples IR sensor signals through ADC and DMA, reads AHT20 environmental data through I2C, and communicates with the W5500 Ethernet controller through SPI. The architecture is therefore built around a single MCU that consolidates access, physical state, environmental state, and network state.
4. Key Components
4.1 STM32F411 Microcontroller
The STM32F411 is the main control unit. It coordinates the RFID reader, IR detection path, AHT20 environmental monitoring, and W5500 Ethernet module. The repository uses GCC/Makefile-based embedded firmware organization and defines STM32F411-related build configuration.
4.2 MFRC522 RFID Reader
The MFRC522 side is used for keycard detection and UID handling. The keycard module stores up to two allowed UID entries and compares scanned card UIDs against those stored entries.
The quick verification path explicitly skips full card selection and authentication, retrieves the UID, and compares it against saved UIDs. This makes the access path simple and fast, but it also means the quick path is not a strong cryptographic authentication mechanism.
4.3 Keycard Registration Logic
The keycard registration path authenticates using the default sector key, derives a new key from the UID using an XOR-based process, writes the sector trailer, and stores the UID in the local registered-key array.
This is useful as a prototype mechanism, but it should not be described as production-grade access control. The code itself contains a TODO note stating that the current unscramble logic cannot directly recover the byte as written. That is not a tiny detail. That is the code quietly raising its hand and saying, “Please don’t ship me yet.”
4.4 IR Line-Break Sensors
The IR sensor module implements line-break detection using the ADC peripheral. It defines three storage units, and each IR line corresponds to one storage unit. The header states that a connected line means the box is open, while a broken line means the unit is closed.
This makes the IR layer the physical-state verification layer. RFID tells the system who is attempting access; IR line detection tells the system whether the storage compartment is actually open or closed.
4.5 ADC + DMA Sampling
The ADC driver is designed for repeated multi-sensor sampling. It defines 15 sensor samples, two DMA buffers, a data-ready flag, and error handling. The code comments describe the samples as three samples per sensor for false-flag reduction.
The ADC configuration enables continuous conversion, scan mode, DMA requests, and multi-buffer DMA start. This is a better fit for periodic physical-state sensing than manual blocking reads.
4.6 AHT20 Temperature and Humidity Sensor
The AHT20 driver uses I2C and defines the AHT20 device address as 0x38. The header explicitly notes that an I2C multiplexer or additional pins may be required because the AHT20 address is fixed.
The AHT20 data structures include temperature and humidity fields and storage for three units: UNIT0_DATA, UNIT1_DATA, and UNIT2_DATA. This matches the project’s three-vault storage model.
4.7 WIZnet W5500 Ethernet Controller
The W5500 provides the Ethernet foundation. WIZnet describes the W5500 as a hardwired TCP/IP Ethernet controller that uses SPI, embeds TCP/IP, 10/100 Ethernet MAC and PHY, supports 8 hardware sockets, and includes 32 KB internal memory.
In PokeVault, the W5500 driver registers chip-select and SPI byte/burst callbacks, resets the WIZchip, initializes memory, verifies the chip version register, checks PHY link state, runs DHCP, applies static IP fallback if DHCP fails, and initializes DNS.
At the current stage, the W5500 is a network-enabling layer rather than a complete remote application. No complete HTTP server, REST API, dashboard, or alert delivery flow is visible from the checked code.
5. Operating Flow
1. User taps an RFID keycard.
2. MFRC522 detects the card and retrieves its UID.
3. STM32F411 compares the UID against registered entries.
4. IR line-break sensors detect each vault’s open/closed state.
5. ADC + DMA collects sensor signals efficiently.
6. AHT20 measures temperature and humidity.
7. STM32F411 consolidates access, vault state, and environment data.
8. W5500 prepares Ethernet connectivity through link check, DHCP, and DNS.
9. The system maintains a security and preservation state for sealed collectibles.This flow shows the project’s core idea: it does not rely on one signal only. Access identity, physical state, and environmental condition are handled as separate inputs that can be consolidated by the MCU.
6. Design Meaning
The strongest idea in PokeVault is the combination of access control, physical open/closed detection, and environmental monitoring. For sealed collectibles, security is not only about theft. Unauthorized opening, poor humidity, temperature changes, and lack of event visibility can all matter.
The W5500 adds a reasonable direction for a fixed-location vault device. A storage box or display cabinet does not need to roam around like a confused laptop. Wired Ethernet can be a stable choice for a stationary embedded system, especially where predictable connectivity matters. The current implementation does not complete the remote layer, but the network foundation is clearly present.
7. Important Limitations
| Limitation | Why It Matters |
|---|---|
| UID-based quick verification | Fast, but not strong security |
| Key handling TODO remains | The code itself marks part of the key logic as unresolved |
| W5500 app layer is incomplete | Ethernet initialization exists, but full remote functions are not visible |
| AHT20 fixed I2C address | Multiple sensors require multiplexer or additional bus/pin planning |
| Possible SPI chip-select conflict | MFRC522 and W5500 are both mapped to GPIOA pin 10 in io.c |
| Sparse documentation | The README is too short to explain the system without reading the code |
The SPI chip-select issue is especially important. The IO configuration maps both IO_SPI_CS_MFRC and IO_SPI_CS_W5500 to GPIOA pin 10. Unless there is an external selection mechanism not visible in the repository, independent SPI device selection would be problematic.
8. Practical Applications
PokeVault is most relevant as a reference structure for:
| Area | Use Case |
|---|---|
| Collectible storage | Sealed card packs, limited-edition items, small valuable collectibles |
| Small display security | Open/closed detection for display boxes |
| Environmental storage | Monitoring temperature and humidity-sensitive items |
| STM32 learning | RFID, ADC + DMA, I2C, SPI, and Ethernet integration |
| W5500 integration | Basic Ethernet initialization using DHCP, DNS, and PHY link checks |
The project is better treated as an embedded security-system prototype than a finished consumer product. Its core value is architectural: combining RFID, physical state sensing, environmental monitoring, and Ethernet groundwork in one embedded device.
9. Technical Assessment
| Item | Assessment |
|---|---|
| Concept clarity | High |
| Hardware direction | Strong and coherent |
| Firmware layering | Reasonable, with separated drivers and app modules |
| Security strength | Prototype-level |
| Network readiness | Foundational, not complete |
| Product completeness | Low to medium |
| Expansion potential | High |
PokeVault has a clear technical direction. Its strongest point is the way it combines physical security and preservation monitoring. Its weakest points are the incomplete upper application layer, UID-centered RFID verification, unresolved key logic, and hardware pin-mapping concern. The system has enough structure to be technically interesting, but not enough completion to be treated as a finished secure vault.
1. 프로젝트 개요
PokeVault는 sealed collectible을 보관하기 위한 STM32 기반 보안 박스형 임베디드 프로젝트다. README는 이 프로젝트를 Pokémon sealed collectors를 위한 개인용 storage/security system으로 짧게 소개한다. 하지만 저장소 내부 코드를 보면 단순 보관함 설명보다 더 구체적인 구조가 드러난다. RFID 접근 제어, IR line-break 개폐 감지, AHT20 온습도 측정, WIZnet W5500 Ethernet 초기화 코드가 함께 들어 있다.
현재 저장소는 완성 제품 형태라기보다, 하드웨어 기능을 붙이고 검증하는 펌웨어 프로토타입에 가깝다. GitHub 저장소 기준 릴리스가 없고, README도 매우 짧다. 저장소는 Core, Drivers, Makefile, startup file, linker script, .ioc 파일을 포함하는 STM32 계열 펌웨어 구조를 가진다.
2. 시스템이 해결하려는 문제
값비싼 sealed collectible은 단순히 상자에 넣어두는 것만으로 충분히 보호되지 않는다. 누가 접근했는지, 실제로 보관함이 열렸는지, 내부 환경이 안정적인지, 외부 시스템과 연결될 수 있는지가 중요해진다. PokeVault는 이 문제를 네 가지 축으로 나누어 다룬다.
| 문제 | 구성요소 | 역할 |
|---|---|---|
| 접근 권한 확인 | MFRC522 RFID / keycard logic | 등록된 카드인지 확인 |
| 보관 유닛 개폐 감지 | IR line-break sensor | 각 vault의 open/closed 상태 감지 |
| 보관 환경 확인 | AHT20 | 온도와 습도 측정 |
| 외부 연결 기반 | WIZnet W5500 | Ethernet link, DHCP, DNS 기반 제공 |
이 프로젝트의 방향은 “잠금장치 하나 붙인 박스”가 아니라, 접근·개폐·환경·네트워크를 함께 보는 물리 보안 시스템이다. 물론 아직 완성도는 중간 단계다. 하지만 방향 자체는 꽤 선명하다.
3. 전체 구조
[사용자 / RFID Keycard]
|
v
[MFRC522 RFID Reader]
|
| SPI
v
+----------------------------+
| STM32F411 Microcontroller |
| Central Control Logic |
+----------------------------+
| | |
| ADC + DMA | I2C | SPI
v v v
[IR Sensors] [AHT20] [WIZnet W5500]
| | |
v v v
Vault open / 온도·습도 Ethernet link,
closed 상태 데이터 DHCP / DNS 기반STM32F411은 시스템의 중앙 제어기다. RFID 리더에서 접근 정보를 받고, IR 센서 신호를 ADC + DMA로 수집하며, AHT20의 온습도 데이터를 I2C로 읽고, W5500을 SPI로 제어한다. 이 구조에서는 MCU가 단순 입출력 제어기가 아니라 접근 상태, 보관 상태, 환경 상태, 네트워크 상태를 통합하는 제어 허브가 된다.
4. 핵심 구성요소
4.1 STM32F411 Microcontroller
STM32F411은 PokeVault의 중심 MCU다. Makefile은 STM32F411xE define, Cortex-M4 컴파일 옵션, STM32 HAL driver, CMSIS, W5500 관련 include path를 포함한다. 또한 keycard.c, adc.c, aht20.c, ir_sensor.c, mfrc522.c, w5500.c 같은 애플리케이션·드라이버 파일을 빌드 대상으로 포함한다.
4.2 MFRC522 RFID Reader
MFRC522는 RFID keycard를 감지하고 UID를 읽는 역할을 한다. Keycard 모듈은 허용된 UID를 최대 2개 저장하도록 정의되어 있고, 등록된 UID와 현재 감지된 UID를 비교해 접근 허용 여부를 판단한다.
keycard_quick_scan()은 빠른 인증을 위해 카드 선택과 인증 과정을 생략하고 UID를 가져와 저장된 UID 목록과 비교한다. 이 방식은 빠르지만, 강한 보안 인증 방식으로 보기에는 부족하다. UID 비교 기반 구조는 복제 가능성이나 spoofing 가능성을 반드시 고려해야 한다.
4.3 Keycard 등록 구조
카드 등록 흐름은 기본 sector key로 인증한 뒤, UID 기반 XOR 방식으로 새 sector key를 만들고, sector trailer에 기록한 다음, 해당 UID를 내부 배열에 저장한다.
다만 코드 내부에는 unscramble_key() 처리와 관련된 TODO가 남아 있다. 즉, key 처리 로직은 아직 완전히 안정화된 상태로 보기 어렵다. 여기서 “강력한 보안 시스템”이라고 포장하면 코드가 뒤에서 조용히 비웃는다.
4.4 IR Line-Break Sensor
IR sensor 모듈은 ADC peripheral을 사용해 line-break detection을 구현한다. 헤더에는 세 개 storage unit이 정의되어 있고, 각 IR line이 하나의 storage unit에 대응한다고 되어 있다. line connected 상태는 box open, line broken 상태는 closed를 의미한다.
이 구조에서 IR sensor는 실제 보관 유닛의 물리 상태를 확인하는 계층이다. RFID가 “누가 접근했는가”를 다룬다면, IR line-break는 “실제로 열렸는가”를 다룬다.
4.5 ADC + DMA
ADC 드라이버는 여러 센서 값을 반복적으로 수집하기 위한 구조를 가진다. 코드에는 15개 sensor sample, 두 개 DMA buffer, data ready flag, transfer error flag가 정의되어 있다. 주석상 15개 샘플은 false flag를 줄이기 위한 센서당 3개 샘플 구조로 설명된다.
ADC 설정은 continuous conversion mode, scan conversion mode, DMA continuous request를 사용한다. 또한 HAL_DMAEx_MultiBufferStart_IT()로 두 개의 DMA buffer를 사용해 ADC 데이터를 수집한다. 이 구조는 주기적인 센서 감시에 적합하다.
4.6 AHT20 온습도 센서
AHT20은 온도와 습도를 측정하는 I2C 기반 센서로 사용된다. 헤더에는 AHT20 device address가 0x38로 정의되어 있으며, 주소가 고정되어 있기 때문에 여러 센서를 사용하려면 I2C multiplexer 또는 추가 핀이 필요하다는 주석이 있다.
AHT20 데이터 구조는 온도와 습도 필드를 포함하고, UNIT0_DATA, UNIT1_DATA, UNIT2_DATA를 정의한다. 이는 세 개 보관 유닛 각각에 대한 환경 데이터를 다루려는 구조로 해석할 수 있다.
4.7 WIZnet W5500 Ethernet Controller
W5500은 유선 Ethernet 연결을 담당하는 칩이다. WIZnet 공식 설명 기준 W5500은 SPI로 외부 MCU와 연결되는 hardwired TCP/IP Ethernet controller이며, TCP/IP stack, 10/100 Ethernet MAC & PHY, 8개 hardware socket, 32KB internal memory를 제공한다.
PokeVault의 W5500 드라이버는 chip-select callback, SPI byte/burst callback을 등록하고, WIZchip reset, memory 초기화, version register 확인, PHY link 확인을 수행한다. 이후 DHCP를 실행하고, DHCP 실패 시 static IP를 적용하며, DNS를 초기화한다.
현재 코드 기준 W5500은 완성된 원격 서비스 계층이라기보다, Ethernet 동작을 위한 기반 계층에 가깝다. HTTP server, REST API, dashboard, event notification 같은 상위 흐름은 명확히 확인되지 않는다.
5. 동작 흐름
1. 사용자가 RFID keycard를 태그한다.
2. MFRC522가 카드를 감지하고 UID를 읽는다.
3. STM32F411이 UID를 등록된 값과 비교한다.
4. 접근이 허용되면 vault access 상태를 갱신한다.
5. IR line-break sensor가 각 vault의 open/closed 상태를 감지한다.
6. ADC + DMA가 IR sensor 신호를 반복적으로 수집한다.
7. AHT20이 온도와 습도를 측정한다.
8. STM32F411이 접근 상태, vault 상태, 환경 데이터를 통합한다.
9. W5500이 Ethernet link, DHCP, DNS 기반을 준비한다.
10. 장치는 sealed collectible의 접근·개폐·환경 상태를 감시한다.핵심은 단일 입력에 의존하지 않는다는 점이다. RFID는 사용자 접근을 확인하고, IR sensor는 실제 보관 유닛의 상태를 확인하며, AHT20은 환경 조건을 확인한다. W5500은 이 데이터를 외부 시스템으로 확장할 수 있는 네트워크 기반을 제공한다.
6. 설계 의미
PokeVault의 설계 의미는 물리 보안과 보존 환경 감시를 하나의 임베디드 장치 안에 결합했다는 점에 있다. sealed collectible은 개봉 여부와 보관 환경이 모두 중요할 수 있다. RFID만 있으면 접근 제어만 가능하고, 온습도 센서만 있으면 환경 감시만 가능하다. PokeVault는 이 둘에 IR line-break 감지를 추가해 실제 보관 유닛의 상태까지 확인하려 한다.
W5500 선택도 장치 성격과 잘 맞는다. 보관함이나 전시함은 대체로 고정 설치형 장치이므로, Wi-Fi보다 Ethernet이 안정적인 선택일 수 있다. 추론임: 이 프로젝트에서 W5500은 향후 원격 상태 확인, 알림, 이벤트 기록 같은 기능을 붙이기 위한 기반으로 해석할 수 있다. 단, 현재 저장소만 기준으로 보면 그 상위 기능은 아직 완성되어 있지 않다.
7. 중요한 한계
| 한계 | 의미 |
|---|---|
| UID 기반 quick verification | 빠르지만 강한 보안 인증으로 보기 어렵다 |
| Key 처리 TODO 존재 | 보안 로직이 완전히 안정화되지 않았다 |
| W5500 상위 기능 미완성 | Ethernet 초기화는 있으나 원격 서비스 흐름은 부족하다 |
| AHT20 고정 주소 문제 | 다중 센서 구성 시 I2C multiplexer 또는 추가 핀 필요 |
| SPI chip-select 충돌 가능성 | MFRC522와 W5500이 같은 GPIOA pin 10에 매핑되어 있다 |
| README 부족 | 코드 확인 없이는 시스템 의도를 파악하기 어렵다 |
특히 SPI chip-select 설정은 주의가 필요하다. io.c에서 IO_SPI_CS_MFRC와 IO_SPI_CS_W5500이 모두 GPIOA pin 10으로 설정되어 있다. 실제 회로에서 별도 선택 구조가 없다면 두 SPI 장치를 독립적으로 제어하기 어렵다.
AHT20도 마찬가지다. 주소가 고정되어 있기 때문에 세 개 보관 유닛에 각각 센서를 배치하려면 I2C multiplexer나 별도 I2C bus 설계가 필요하다. 이 문제를 무시하면 하드웨어 조립 후에 “왜 센서가 하나처럼 보이지?”라는 슬픈 의식을 치르게 된다.
8. 적용 가능성
| 적용 영역 | 설명 |
|---|---|
| 수집품 보관함 | 미개봉 카드팩, 한정판 굿즈, 소형 고가 수집품 보관 |
| 소형 전시 보안함 | 진열품의 접근 및 개폐 상태 감시 |
| 환경 감시 캐비닛 | 온습도에 민감한 물품의 보관 상태 확인 |
| STM32 학습 프로젝트 | RFID, ADC + DMA, I2C, SPI, Ethernet 통합 구조 학습 |
| W5500 적용 예제 | DHCP, DNS, PHY link 확인 기반 Ethernet 초기화 참고 |
PokeVault는 완성된 소비자 제품이라기보다는, STM32 기반 물리 보안 시스템의 구조 사례로 보는 것이 정확하다. 강점은 RFID, IR, AHT20, W5500을 하나의 장치 구조 안에 결합했다는 점이고, 약점은 보안 강도와 상위 애플리케이션 완성도다.
9. 핵심 설명문
PokeVault는 sealed collectible을 보호하기 위한 STM32 기반 보안 박스형 임베디드 시스템이다. RFID keycard를 통해 접근 권한을 확인하고, IR line-break sensor로 각 보관 유닛의 열림/닫힘 상태를 감지하며, AHT20으로 온도와 습도를 측정한다. WIZnet W5500은 Ethernet 연결 기반을 담당하며, DHCP, DNS, PHY link 확인을 통해 유선 네트워크 확장 가능성을 제공한다. 현재 구현은 완성 장치보다는 하드웨어 기능 검증과 펌웨어 구조 구축 단계에 가깝다.
10. 기술 판단
| 항목 | 판단 |
|---|---|
| 아이디어 명확성 | 높음. 수집품 보관, 접근 제어, 환경 감시라는 방향이 분명하다. |
| 하드웨어 구성 의미 | 높음. RFID, IR, AHT20, W5500 조합이 장치 목적과 잘 맞는다. |
| 펌웨어 구조 | 중간 이상. 드라이버 분리는 되어 있으나 앱 계층은 아직 약하다. |
| 보안 강도 | 낮음~중간. UID 기반 인증은 보완이 필요하다. |
| 네트워크 완성도 | 중간 이하. W5500 초기화 기반은 있으나 상위 통신 기능은 부족하다. |
| 확장 가능성 | 높음. 원격 알림, 상태 기록, 웹 대시보드, MQTT 전송 등으로 확장 가능하다. |
| 완제품성 | 낮음. 현재는 기능 검증과 기반 구축 단계에 가깝다. |
11. 최종 정리
PokeVault는 수집품 보안 장치라는 카테고리에 가장 잘 맞는다. 단순 보관함이 아니라 RFID 접근 제어, IR 개폐 감지, 온습도 측정, Ethernet 연결 기반을 포함하기 때문이다. W5500은 이 구조에서 원격 상태 확인과 알림 기능으로 확장될 수 있는 유선 네트워크 계층을 담당한다.
현재 단계에서는 완성 제품이라기보다 STM32 기반 물리 보안 시스템 프로토타입으로 보는 것이 정확하다. 강점은 구조적 방향성이고, 약점은 앱 계층 완성도와 보안 강도다. 다듬으면 수집품 보관함, 소형 전시 보안함, 환경 감시 캐비닛 같은 장치로 확장할 수 있다.
12. 저자 정보
저장소 소유자는 GitHub 사용자 HectorJardines다. GitHub 저장소는 HectorJardines/PokeVault 경로의 public repository이며, 확인 시점 기준 7 commits, 0 stars, 0 forks, no releases 상태로 표시된다. 저장소 언어 비율은 C 97.1%, Assembly 2.8%, Other 0.1%로 표시된다.
공개 저장소 정보만으로 저자의 소속, 직함, 경력, 전문 분야를 확정할 수는 없다. 확인 가능한 범위에서는 STM32 기반 C 펌웨어, RFID, 센서, W5500 Ethernet 같은 임베디드 구성요소를 사용한 개인 프로젝트로 판단된다. 추론임: 저자는 MCU 기반 장치 제어와 센서 통합을 실습하거나 개발 중인 임베디드 개발자로 보는 것이 자연스럽다.
