Identification / RFID
Interfacing Fingerprint Sensor (R307) Identification / RFID with Raspberry Pi
What is the Fingerprint Sensor (R307)?
Fingerprint Sensor (R307) practical reference
The R307 is an optical fingerprint reader module from Hangzhou GROW Technology, built around an integrated optical sensor and an onboard DSP that handles image capture, feature extraction, and fingerprint template matching entirely on-module. Rather than sending raw images to your microcontroller, it does the heavy lifting itself and returns simple pass/fail match results over a UART packet protocol (0xEF01 header, 4-byte address, checksum), making it a popular choice for DIY smart locks, biometric attendance systems, and secure-access add-ons for existing projects. Per the manufacturer's manual it draws a modest 50mA typical, images a finger in under 0.5s, and can store up to 1000 templates with sub-1s 1:N search across the full library.
Key specifications
- Sensor type: Optical fingerprint sensor with onboard DSP/processor — handles image capture, feature extraction, template generation and matching entirely on-module
- Operating voltage: DC 4.2V–6.0V (5V typical) — per Hangzhou GROW R307 datasheet
- Operating current: Typical 50 mA (datasheet-rated; some resellers list higher figures — 50 mA is what GROW's own manual specifies)
- Interface: UART, TTL logic level, default 57600 bps (configurable 9600–115200 bps in 9600 bps steps) — or USB 2.0 on modules that break out D+/D-
- Image acquiring time: < 0.5 s
- Matching modes: 1:1 verification (match against one specified template) and 1:N search (match against the whole library)
- Template / library storage: Up to 1000 fingerprint templates in onboard flash; 512-byte template size, 256-byte character file size
- Security level: 5 grades, set via SetSysPara (1 = lowest FRR / highest FAR, 5 = highest FRR / lowest FAR)
- False Accept Rate (FAR): < 0.001%
- False Reject Rate (FRR): < 0.1%
- Average search time: < 1 s across a 1000-template library (1:1000)
- Sensing window: 19mm x 21mm
- Operating / storage environment: Operating: -10℃ to +40℃, 20%-85% RH; Storage: -40℃ to +85℃, <85% RH
- Dimensions: Module: 44.1 x 20 x 23.5mm, split-type optical housing
Pinout and connection notes
The module ships with a 6-pin JST connector carrying VCC, GND, TXD, RXD, TOUCH and 3.3V (the last two power and read the capacitive touch/wake circuit, not the main module). Per GROW's datasheet the module needs 4.2V-6V on pin 1 to operate reliably — running it purely off a 3.3V rail is under spec even though the UART lines themselves are TTL level. On 5V boards like the Arduino Uno you can wire directly; on 3.3V-only boards (ESP32, STM32) power the module from a 5V rail but consider a level-shifter or divider on the module's TX line feeding back into the MCU's 3.3V-only RX pin.
- VCC (5V): Power input, DC 4.2V–6.0V (5V typical)
- GND: Ground, common with power ground
- TXD: UART data output, TTL logic level — connect to microcontroller RX
- RXD: UART data input, TTL logic level — connect to microcontroller TX
- TOUCH: Finger-detect output signal (max 50mA drive) — goes active when a finger touches the sensor window, useful for waking a sleeping MCU
- 3.3V: Power input for the touch/finger-detection circuit only (DC 3.3V–5V, ~5µA) — separate from the main VCC supply on pin 1
Integration checklist
- Confirm the exact part number and breakout-board revision.
- Verify supply voltage, current demand, logic levels, and signal direction against the datasheet.
- Check controller pin assignments and bus address or interface mode against the example code.
- Power up with external loads disconnected, then test signals before full integration.
- If readings or communication fail, check power and ground first, then pin mapping, interface settings, and library initialization.
Troubleshooting and reproducibility
Record the board used, wiring, library/version, supply arrangement, and measured behavior. Use the selected board-specific wiring example as the source of truth. Never assume visually similar modules share identical voltage tolerance or pin order.
Setting Up Fingerprint Sensor (R307) with Raspberry Pi
Library
pyfingerprint by bastianraschke
pip3 install pyfingerprint, then enable the hardware UART (raspi-config → Interface Options → Serial Port → login shell: No, hardware: Yes)
Wiring
| Component pin | Raspberry Pi pin | Note |
|---|---|---|
| VCC | 5V (physical pin 2) | Pi's 5V rail is within the module's 4.2-6V range |
| GND | GND (physical pin 6) | |
| TX | GPIO15 / RXD (physical pin 10) | UART RX |
| RX | GPIO14 / TXD (physical pin 8) | UART TX — the Pi's 3.3V logic level is accepted by the module's RX |
Swipe sideways to see every column →
Disable the Pi's serial console first so /dev/serial0 is free for the sensor — leaving the login shell enabled on the UART will fight with the fingerprint library for the port.
Related Components
Related Guides & Projects
Raspberry Pi Pico W and Pico 2 W: Install MicroPython with Thonny or UF2
Hold BOOTSEL, drag the correct UF2 file, open the REPL and blink the onboard LED. Includes the Pico vs Pico W vs Pico 2 W firmware differences and what to do when the drive does not appear.
Raspberry Pi Pico W Web Server in MicroPython: Control an LED and Read a Sensor
Connect the Pico W to WiFi, serve a responsive control page, switch an LED and display the onboard temperature or an external sensor, with timeouts and reconnect handling.
Raspberry Pi Pico Oscilloscope with MicroPython
Convert a Raspberry Pi Pico into a basic 500 kSPS oscilloscope using its 12-bit ADC and MicroPython. Displays waveforms on an SSD1306 OLED or streams samples over USB serial to a Python plotter on your PC.
Self-Hosted Nextcloud NAS on Raspberry Pi 4
Build a private, durable Nextcloud NAS on a Raspberry Pi 4 -- SSD boot instead of a failure-prone SD card, Docker Compose with Redis caching, Tailscale for remote access with zero ports forwarded, and an automated backup strategy that actually runs.