MR60FDA Radar

May 27, 2026 · View on GitHub

Flipper Zero application for the MicRadar R60AFD1 / R60AFD2 60 GHz mmWave radar (also sold as Seeed MR60FDA1 / MR60FDA2).

Displays in real time: presence, motion, fall alarm, distance, breathing rate, heart rate, and body movement level.

Hardware

Flipper pinRadar pinSignal
Pin 1 (+5V)VCCpower
Pin 8 (GND)GNDground
Pin 13 (TX, PB6)RXUART TX→RX
Pin 14 (RX, PB7)TXUART RX←TX

Note: TX and RX are crossed. Before launching enable Settings → Power → 5V on GPIO: ON — otherwise the radar gets no power.

Screen

MR60FDA Radar (live indicator)

Left column: HR (bpm), Resp (/min), Dist (cm), BSign

Right column: PRESENT/absent box, Motion state, Fall alarm, Residence time

Footer: body movement signal bars, frame counter, Back button

When a fall is detected, the Fall field inverts to ! FALL !.

Protocol

Frame format: 53 59 {CTRL} {CMD} {LEN_H} {LEN_L} {DATA...} {CHKSUM} 54 43

Checksum = sum of all bytes from 53 through last data byte, & 0xFF.

CTRLCMDDataDescription
0x800x011 BPresence push: 0=no, 1=yes
0x800x811 BPresence response (reply to query)
0x800x021 BMotion: 0=none 1=static 2=active
0x800x031 BBody Sign energy 0–100
0x800x042 B BEDistance to person, cm
0x800x056 BXY position (2B x, 2B y, 2B z), bit15=sign
0x800x0E6 BHeight zones: total(2B) + 4 × 50 cm bands
0x810x021 BBreathing rate, /min
0x830x011 BFall alarm: 0=no, 1=fall
0x830x044 B BEResidence time, seconds
0x850x021 BHeart rate, bpm
0x010x011 BSystem heartbeat
0x070x071 BFunction status flag

Note: On startup the app sends a presence query (53 59 80 81 00 01 0F BD 54 43) so the display is correct immediately — even if the radar already detected someone before the app opened.

Build & flash

Install uFBT once: python3 -m pip install ufbt --break-system-packages

Then in the project directory run ufbt to build, ufbt launch to flash.

The app appears at Apps → GPIO → MR60FDA Radar.

The Flipper SDK is downloaded automatically to ~/.ufbt/ on first run.

PC sniffer

Requires pyserial (pip install pyserial).

Put Flipper into UART Bridge mode (Apps → GPIO → UART Bridge, baud 115200), then run: python3 sniffer.py /dev/ttyACM0 --raw

Prints every decoded frame with a timestamp and hex dump.

File structure

  • application.fam — FAP manifest (GPIO, 4 KB stack)
  • mr60fda_app.c — main loop, UART ISR, GUI, input
  • mr60fda_parser.h — protocol types and parser API
  • mr60fda_parser.c — state machine, auto-resync, CRC
  • sniffer.py — PC-side debug sniffer
  • icon.png — 10×10 px monochrome app icon
  • flipper_zero_r60afd1_wiring.svg — wiring diagram

Firmware compatibility

Requires OFW ≥ 1.0 (API 87+). Tested on OFW 1.4.3.

Possible extensions

  • TX commands — change scene (living room / bedroom / bathroom), adjust sensitivity via furi_hal_serial_tx()
  • Settings menu — variable_item_list for scene and threshold config
  • SD logging — storage_file_write to record frames for offline analysis