<< Click to Display Table of Contents >>

Navigation:  Bits and PCs Blog - 2025.11.19 >

MR24HPC1 mmWave Presence Sensor Lite - 2025.10.12

Previous pageReturn to chapter overviewNext page

mr24hpc1-1   micradar-r24d

NOTE! This board runs on 5V. Please take care if you are using a 3.3V microcontroller which does not have 5V-tolerant inputs! Like the Arduino Zero. See Disclaimer.

 

Blurb

Human (and Alien?) presents presence sensors, using millimetre-wave radar technology (Frequency Modulated Continuous Wave FMCW), are becoming more common and prices are falling. A cheap entry-level sensor is the "MR24HPC1 24GHz mmWave Sensor Human Static Presence Module Lite" from Seeed Studio, which has a detection range of up to 5m.

This board is also marketed directly by MicRadar (the Chinese manufacturer of the board's T15BT MCU chip), see References below. Have Seeed Studio just re-badged the MicRadar product, or is it a clone? The PCBs are not the same, the MicRadar version has many holes (vias?) in the ground plane.

Both boards use the ICLEGEND S3KM111L radar chip, but the Seeed Studio documentation says it uses an "Enhanced Infineon Doppler Radar" chip. I was unable to find a data sheet for the S3K111L chip, it's not from Infineon, but many mmWave boards are using this chip and it seems to work very well. If anyone knows what's going on, please let us know!

All mmWave sensor boards have an additional 32-bit microcontroller to interpret the data from the radar chip, and each has its own proprietary serial communications protocol. Some use text messages, some binary and some have I2C or SPI connections. The Seeed Studio board uses a simple 5V serial binary protocol, as described in the manual - but note that the protocol description in the manual has many errors and is not easy to understand. They should have used a veteran British/English SW/HW engineer to manage the documentation and translations.

To communicate with the board, you will need a USB-to-5V-TTL converter to make the USB connection look like a serial COM port. This can be done with the infamous FTDI USB-to-serial-converter (5V version), but if you don't have one of those you can use an old 5V Arduino Uno - details below.

One drawback is that this board's pin headers are 2mm pitch rather than the standard 2.54mm. This makes it difficult to connect to without bending the pins, even if you use single DuPont wires. And you can't use a PCB with 2.54mm holes. I recommend buying a few 2mm pitch female header connectors, 6 or 8-pin. (Actually, I recommend that Seeed Studio/MicRadar improve their design to use 2.54mm headers.)

 

Summary

Here's a "brief" summary from the documentation that I managed to understand, so you don't have to read it yourself...

The sensor transmits a complex 24GHz band millimetre-wave radar signal and receives the reflections. A powerful on-board microcontroller processes the reflected signal and determines human presence, distance and motion according to certain preset or configured parameters. It detects large movements (motion) and also the very small movements (static) made by a person standing, sitting or lying down. It detects the micro-motion of breathing and other tiny movements. More expensive modules can even detect heartbeats, but I suspect they can be confused if there's more than one person in the bed.

Because it's radar, it can "see through" some objects, clothes, thin walls and windows. For this reason it can be configured to reject signals below a certain intensity (energy level) or a certain distance (boundary). The module can be mounted inside a thin plastic enclosure, such as a surveillance camera enclosure which is transparent to the radar signals.

Metal objects are not transparent to the radar signals and are highly reflective. Vibrating metal objects such as fans and air conditioning units can cause the reflected signal to be misinterpreted. There are several configuration parameters which can be used to reduce the effects of this noise. People wearing clothes are less reflective than solid static objects, which is why motion is used to detect human presence. (There is no mention of its behaviour with people who are not wearing clothes, but it does have "Bedroom" and "Bathroom" presets, so I assume they have tested it.)

The radar signal is a cone, which means that it behaves best when mounted on the ceiling, with sensitivity varying from the edge to the centre of the cone. This reflected signal is a "radius" rather than a straight-line distance, and I suspect all the distances are actually radiuses too (or 'radii' if you speak Latin). It can be mounted under a chair or a bed because the radar signal passes through the cushions or mattress. Mounting on a wall is possible too, where it will be able to detect humans moving about on the ceiling, but if you don't need that feature then half of the radar's field-of-vision will not be usable.

For best results a good quality 5V power supply is needed with a ripple below 100mV peak-to-peak. The 5V supply from an FTDI USB cable or an Arduino Uno is fine.

The module has two digital (5V/0V on/off) outputs. Output S1 is high if "Occupied" when a person or persons are detected. Output S2 is high when motion is detected. There are also 4 general-purpose outputs GP1..GP4, but these are undocumented - it would have been nice if these were configurable.

The board has two configuration modes. "Standard Function Mode" uses a "Scene Preset" to select ranges and energy levels for four standard environments (rooms), along with a "Sensitivity" distance and an "Unoccupied Delay" (10s..60mins). "Advanced Mode", confusingly called "Underlying Open Function Mode" in the manual, allows a much more detailed configuration, with programmable energy thresholds, distance ranges and timing. The configuration parameters are described below.

Once configured, the module can be used stand-alone if the S1 (Occupied/Unoccupied) and S2 (Motion/No Motion) outputs are sufficient. Alternatively, the serial connection or USB can be used to supply real-time data, or it can be connected to a microcontroller to provide Bluetooth or WiFi communications with a server. The Seeed Studio XIAO is a good choice.

During normal operation, the sensor sends unsolicited "Report" messages on its TX line. In Standard Mode these are sent only when a state changes. In Advanced mode, an additional status message is sent twice-a-second, with extra data for logging or graphical traces.

 

Using an old Arduino Uno as a USB-to-Serial-5V-TTL converter

To use the Mattlabs or Seeed Studio configurators, you will need to convert the PC's USB communications to 5V TTL Serial.

The FTDI USB-to-serial-converter is quite expensive. But thankfully we all have old Arduinos in boxes under the bed, or in the shed. These contain the same FTDI chip, the FT232, so they do the same thing. To disable the Arduino controller, connect the Arduino's RESET pin to GND. This prevents the microcontroller from starting up, allowing the FT232 chip to be used for USB-to-TTL RX/TX communications.

Connect the Arduino's 5V and GND to power the sensor, the RX (pin 0) to the module's TX and TX (pin 1) to RX for communications.

Now run the Mattlabs or Seeed Studio configurator, select the COM port and press the "Connect" button.

 

Mattlabs MR24HPC1 mmWave Radar Configurator v1.0 for Windows

Seeed Studio has developed its own Windows application for configuring the sensor (Human-Radar-Open-Protocol_2.0.exe. This is 72MB!? What the hell is in there? And it has no Software Signing Certificate, which is unusual for a successful company.) Their app works, but it's not easy or intuitive to use and it has very little documentation apart from the notes in the Seeed Studio Wiki.

For this reason, and because it was the best way to test the communications code and learn about the product, a new configurator was developed. The MattLabs configurator has several advantages and is (slightly) easier to use. It is a simple Windows Forms app written in C# for the .NET framework. The C# source code is available on request from info@muman.ch. This version currently works only with the Seeed Studio MR24HPC1 Lite board, but it will be updated it to work with other boards in the future.

This application does not store or access any data on the PC or the Web, except that it opens this secure help page in the default browser when the 'Online Help' button is pressed. It does not have offline help.

 

mr24hpc1-app-1

 

Below is a secure download link to the .NET executable MR24HPC1.exe (82Kb). It runs on Windows 11, or Windows 10 with the .NET Framework 4.7.2 or later.

When you run it, you will hopefully see the encouraging "Windows has protected your PC" message. This is only because the program does not have a Software Signing Certificate yet, so you get 'Unknown Publisher' - but you know the publisher - it's muman.ch. Press 'More Info', then 'Run Anyway'.

Note that all the software you can download from the Chinese Seeed Studio Wiki is also unsigned. Why? (So far, I have not had any trouble with Chinese software, apart from the unusual English text and "eccentric" user-interfaces.)

As they say, Swiss software is "safe as a cuckoo clock" and sometimes it's even "faster than a cuckoo clock".

It does not need installation, just run the MR24HPC1.exe file directly, and delete it if you don't like it.

Download MR24HPC1.exe

 

Here's a brief description of the "MattLab's wmWave Radar Configurator v1.0" features:

 

Serial Port combo box, Connect/Disconnect button

When not connected, it polls for COM ports and automatically updates the 'Serial Port' list with the COM ports it finds. Choose the COM port of your adapter and press "Connect". With luck, it will connect and show the current operating mode of the sensor. If it doesn't connect, check the wiring - it's usually because the RX/TX wires are the wrong way round. If it's not that, maybe you have a version with very old firmware that only communicates at 9600 baud (the v1.5 manual says it's 9600, but my board uses 115200). In that case you must update the firmware, see details below. I think that older firmware does not support the full protocol, so you may need to update it anyway.

You can open the Window's 'Device Manager' to see the COM ports in the 'Ports (COM & LPT)' branch, which shows you the assigned COMxx numbers.

Online Data group

Once connected, it reads the 'Online Data'. The first window shows the hardware and firmware details. I re-programmed my board with the latest firmware version from the Seeed Studio Wiki page, G24VD1SYV001006.

The window below that shows the online real-time "Report" data that's sent regularly by the module, either once or twice a second, or when the state changes.

Standard Mode sends a "presence report" whenever it changes from occupied to unoccupied, a "motion direction report" whenever the motion direction changes, and a "motion amplitude report" when the motion amplitude changes. This is why the graphical view of Standard Mode shows only the occupied/unoccupied state and the motion amplitude.

Advanced Mode sends a more detailed report twice a second. This contains everything in one message and the graphical view can show all the traces.

Mode

Here you can select Standard Mode or Advanced Mode. In Advanced Mode, you must also choose which of the four Custom Mode settings is to be accessed. The sensor can store up to four different configurations, which are known as Custom Modes 1..4. This is useful when commissioning - you can pre-configure the settings for up to four common locations into all the sensors, and then just select the mode 1..4 according to the sensor's location when it is installed.

In Standard Mode only the Scene, Sensitivity and Unoccupied Delay can be configured.

In Advanced Mode, you can configure seven custom parameters to fine-tune the operation.

If you select Advanced Mode, then the Standard Mode configuration will be lost. If you switch back to Standard Mode, the  'Scene Preset' and 'Sensitivity' values will be shown as '<not set>'.

Configuration group

The meaning of each configuration value is described in the Configuration Parameters section below.

The Configuration window is an editable list box. You can click in the right-hand 'values' column to edit the data. The first click selects the item, the second click - or the first key press - starts the editing. Press Enter or click outside the edit field to end the editing. Press Escape to abort without changes. There are two field types, a simple decimal number or a drop-down list (combo box).

After editing the values you must press the 'Write Changes' button to write the changed data into the sensor. Validation is done first, and if any of the values are invalid you'll see an annoying error message which tells you what's wrong. If you do not press 'Write Changes' then the edited values will be lost if you change the mode, press Reset, Set Defaults, Disconnect or close the app.

To undo your changes if not written, press 'Refresh' to upload and display the current values from the sensor. Or press 'Set Defaults' to restore the factory default values - you will need to press 'Write Changes' to write these default values into the sensor.

(At this time it does not indicate which values have been changed but not written, e.g. by showing them in bold text, but maybe I'll add that later.)

Set Defaults button

This fills the configuration values with the factory default settings. You must press 'Write Changes' to write these default values into the sensor.

Refresh button

The re-reads the configuration from the sensor and displays the current values. You can use this to 'undo' any changes you have made which have not yet been downloaded.

Write Changes button

This writes the edited changes into the sensor either for Standard Mode or for the selected Custom Mode 1..4.

All values are validated before they are written, and you'll see a cheerful error message if it finds something wrong.

View Parameters button

Press this to view all the sensor's parameter values for the current mode. This data is just for information. It's a modal dialog box, so you'll have to press 'Close' before you can do anything else.

The 'MaxRangeOfMovingObject' and 'MaxRangeOfStaticObject' values are read-only, these messages are defined in a later version of the manual.

mr24hpc1-app-2

 

View Messages button

This opens a window which shows all the binary messages sent to (>>>) and received from (<<<) the sensor. This will be useful if unknown messages are returned by later versions of the firmware.

It's a modeless dialog box, so you can keep it open and continue to use the application. Reposition it and resize it anywhere on the screen.

Press the 'Pause' button to stop the update so you can view the messages without them scrolling. When paused, you can mark the messages with the standard Shift+Click or Shift+Up/Down arrow, and press Ctrl+C to copy the marked messages to the clipboard for pasting into a text document. When paused, all messages are lost - they are not buffered.

The messages are stored in a circular buffer that holds the last 512 messages.

In Standard Mode you will see that Report messages are only sent when something changes. In Advanced Mode it receives detailed Report messages twice a second in addition to the on-changed messages.

mr24hpc1-app-3

 

Graph Zoom (1..10) combo box

The graphical display has ten speeds which select the scrolling speed and the time duration of the display. Setting 1 is the slowest, setting 10 is the fastest. The scale at the bottom shows the elapsed time in seconds. The maximum duration shown depends on the width of the window. On my PC, a maximized window provides up to 360 seconds at setting 1 and about 35 seconds at setting 10.

Reset button

This sends a Reset command to the sensor. It just resets the sensor's operation and runtime data, it does not do a factory reset. The Configuration settings are re-read after the reset, so parameter changes will be lost if you didn't press 'Write Changes'.

Online Help button

Opens this help window in the default browser. Offline help is not available.

Graphical View

Unlike the Seeed Studio configurator, this graphical view does not attempt to smooth the digital states to give nice analogue-looking curves. Instead, it shows the digital states as they really are, making it much easier to see the interactions between the digital state changes. It's a digital output, not analogue. However, the rise and fall of the signals is shown with a slight slope that varies according to the amplitude, making overlapping states easier to see. The circular sample buffer stores up to 5000 snapshots, taken at 100ms intervals - just over 8 minutes of readings. The graphical view window is resized according to the main window size.

Several colour-coded scrolling traces of the device's data are shown. The top trace, in black, is the Occupied/Unoccupied trace, with a small text on the top right to indicate the state, Occupied or Unoccupied. Other traces are colour-coded according to the indicators. Each trace has a check box so it can be shown or hidden.

mr24hpc1-app-4

In Advanced Mode all the traces can be seen, but in Standard Mode only the black 'Occupied/Unoccupied' and magenta 'Motion Amplitude' signals are available.

Two of the configuration settings are displayed as dashed lines, the 'Motion Energy Threshold' (blue) and the 'Static Energy Threshold' (orange). These levels are set from the Configuration window. They can be compared to the Motion Energy and Static Energy traces, to observe the effects of the reading crossing the threshold value.

The cyan/turquoise 'Motion Speed' trace is in the centre of the window because it also shows the direction of movement. If it moves upwards (+ve) the direction is towards the sensor (approaching). If it moves downwards (-ve), the direction is away from the sensor (receding). The scale of this trace is -500..0..+500 centimetres-per-second, but to test the full range must move at 18km-per-hour!

The scale on the left shows 0..250, this is the 'Energy' scale used for Motion Energy, Static Energy and the two dashed Energy Threshold lines. For Advanced Mode, the scale on the right shows the 'Distance' in metres for the Motion Distance and Static Distance. In Standard Mode, the scale on the right shows the Motion Amplitude, 0..100, where 0 = unoccupied, 1 = occupied but static, 2..100 = motion amplitude. I'm not sure how the Motion Amplitude relates to the Motion Energy - you can see both in the Advanced Mode plot, but I can't see the relationship.

Main Window Resizing

The main window can be resized by dragging the window edge or by clicking the Maximize button. The graph and scales are resized to fit the new window size. Increasing the window size increases the time scale of the graphical view. You can resize it to span two screens if you want a really wide plot.

TODO?

Add a file load/save feature so parameter sets can be saved in files.
Add a longer-term logging/graphical feature, for days and weeks, so long-term evaluations can be done.

 

Configuration Parameters

The names and descriptions of the parameters in the Seeed Studio manual can be rather confusing, perhaps due to translation problems, and the terminology varies throughout the manual and varies significantly between different versions of the manual. Here I have attempted to give a consistent description - assuming I have understood what it says in the manual. I have changed the names of some parameters to make them easier [for me] to understand.

 

Standard Mode Parameters

Scene Preset

Four preset scenarios are available from the drop-down list:

mr24hpc1-app-5

These presets select the maximum distance for motion detection (the boundary distance) and optimal energy levels for the space. This setting is lost if you switch to Advanced Mode, and will be shown as '<not set>' if you go back to Standard Mode.

Sensitivity (2.5m, 3m, 4m)

This fine-tunes the maximum detection distance for a [hopefully] human body in the static (stationary) state. The 'Scene Preset' is used for the active (moving) state.

Unoccupied Delay (10s..60min)

The manual calls this the 'Time for entering no person state'. When in the 'Occupied' state and the sensor determines there are no longer any [living] human bodies present (moving or static), it waits for this period before switching to the 'Unoccupied' state. This controls the minimum duration that the S1 output signal is on, so it can be used to directly control lighting, etc.

 

Advanced Mode Parameters

In Advanced Mode you can store four different configurations called 'Custom Modes'. Select the Custom Mode 1..4 using the the 'Custom Mode' radio buttons.

Static Energy Threshold (0..250)

The documentation calls this the 'Threshold of presence perception' and the 'Existence judgement threshold'. It sets the static energy level to distinguish static (stationary) human presence from the background noise.

Tiny movements of the human body are used to detect slightly-moving/stationary/static people. There may be objects in the vicinity that make similar micro-movements, such as fans or air conditioning units. This setting is used to filter these out. It should be selected to be just above the 'static background noise' when the room is empty. Use the 'Static Energy' reading to set the threshold.

The graphical display shows the Static Energy Threshold setting as a dashed orange line. The orange Static Energy reading trace can be compared with this line.

Enter a decimal value between 0 and 250. The default setting is 33.

Static Boundary (0.5m..5.0m)

This is called the 'Existence perception boundary' or 'Detection range of presence' in the manual. It sets the maximum detection range for static (slightly moving) objects to reduce false alarms and minimize interference from outside the detection range, through partitions or windows or from non-human sources.

Select the distance from the drop-down combo box.

Motion Energy Threshold (0..250)

This is called the 'Motion trigger threshold setting' in the manual. It sets the motion energy threshold level for motion detection. The motion energy must be above this level to detect motion. Use this to adjust the motion sensitivity to small or large body movements, or to reduce false alarms from outside the detection area.

It can be set by using the graphical view to observe the motion energy for relevant situations. The dashed blue line in the graphical shows the Motion Energy Threshold setting.

For example:

0..5

Empty space

7..9

Detects small movements

15..20

Detects small movements at a distance

60..80

Detects only large movements at close range

200..250

Detects the Incredible Hulk at close range, perhaps

The default is 4, but 10..14 may be optimal.

Motion Boundary (0.5m..5.0m)

Sets the maximum distance at which motion will be detected. This limits the detection range, and can be used to reduce interference from high motion sources like continuously rotating fans.

Motion Duration (1..1000ms)

Also known as the 'Motion trigger time' or 'Motion valid time'. This is the time period used to determine whether the state should be changed from Unoccupied to Occupied. The motion energy threshold and motion range conditions must remain active for this duration for the state to be changed to Occupied.

The value is entered in milliseconds (1..1000), the default is 3000 (3 seconds).

Motion To Static Delay (1..60s)

Also known as the 'Motion to still time setting' or 'Set stationary valid time'. It sets the time period used to determine whether the state should be changed from moving to static (active to stationary).

It is entered in seconds, 1..60. The default is 30 seconds.

Unoccupied Delay (0..3600s)

Also known as the 'Time for entering no person state setting' or 'Absence valid time'.

The occupied state is retained for this minimum period. This is useful if the 'Occupied' output S1 is used to turn on lighting etc, so lights remain on for a minimum duration.

The range is 0..3600 seconds (up to 1 hour), the default is 30 seconds.

 

How the Occupied/Unoccupied state is detected

The microcontroller does many mysterious things, which boil down to the simple 'Occupied' and 'Unoccupied' states. This is how the documentation describes it (I think)...

The state is 'Occupied' when motion (a moving person) or static presence (a stationary person) is detected.

1) To detect motion, the following conditions must be satisfied:
 

The 'Motion Energy' reading must be greater than the 'Motion Energy Threshold' setting.

The 'Motion Distance' reading must be within the 'Motion Boundary' setting.

If these two conditions are not met, the 'moving' state will lapse after the 'Motion To Static Delay' period and it will switch to 'static presence' detection.

2) To detect static presence, these conditions must be satisfied:
 

The 'Static Energy' reading must be greater than the 'Static Energy Threshold' value.

The 'Static Distance' must be within the 'Static Boundary' setting.

If these conditions are not met, the 'Occupied' state will revert to 'Unoccupied' after the 'Unoccupied Delay' period.

When 'Unoccupied', if motion or static presence is again detected, it goes to step 1 or 2.

>>> But I must admit that it does not behave in exactly this way when I observe the states in the graphical view. Let me know what you think.

 

Updating the Firmware

The Seeed Studio Wiki contains a detailed section on updating the firmware via the SWD/J-TAG pins, but this requires the very expensive "J-Link Programmer" to do the job, which can only be afforded by professionals. However, I managed to upgrade the firmware using the far cheaper "J-Link EDU Mini" version with the free "SEGGER J-Flash Lite" application, see the link in the References section below. At CHF60.-, the J-Link EDU Mini version is about one-tenth the cost of the professional version.

First I had to download the "Pack_Segger_AT32F4xx_v1.3.3.zip" file and run "Segger_AT32F4xx_AddOn.exe" to add the AT32F4xx devices to the J-Link database for J-Flash to use. Device 'AT32F403ARGT7' must be selected as the target.

It's also possible to update the firmware via the serial port using their own "PackageMake" application (download "PackageMake-v1.1.1.zip"), but that only works for later versions of the firmware. I have not tried this.

I must say that I'm always very dubious about running unsigned Chinese applications on my computer. Why don't they 'Sign' their software? Are they unable to get a Software Signing Certificate?

The firmware version I am using is now G24VD1SYV001006, from file "Jlink_MR24HPC1-20230302.bin" which was downloaded from the wiki page. They have not released a new version since March 2023, so they have probably stopped further development of this product.

 

j-flash-lite-1

 

Mattlabs Source Code

This C++ source code and example sketch was developed on an STM32-Nucleo F103RB. It was also tested on an Arduino Zero - but take care! Unlike the Nucleo board, the Zero does not have 5V-tolerant inputs, so you must put a 10K current-limiting resistor between the sensor's TX output and the Zero's RX input.

The code decodes "Report" messages and allows full configuration and data access to the device. A HardwareSerial port must be used because SoftwareSerial will not run at 115200 Baud. The code uses Serial1 for talking to the senors, and Serial for data output via USB to PuTTY. It won't run on an Arduino Uno because there's not enough RAM.

For simplicity, all methods use uint (unsigned int) as the method parameter's data type, rather than bool, int8_t, int16_t etc. The int is the native data type of the microcontroller (16 or 32 bits, the code is the same). This makes the code far more efficient, reducing code size and complexity.

It's in a single include file (.h) containing both the class definition and the code. Separate .h and .cpp files are not needed if you only use it in one source file.

  MR24HPC1mmWaveSensor.h   [Click to show/hide the code]

  MR24HPC1mmWaveSensor.ino   [Click to show/hide the code]

The C# source code for the Windows Configurator is available on request (for non-commercial use), from info@muman.ch.

 

References

Seeed Studio MR24HPC1 mmWave Sensor Human Static Presence Module Lite - User Manual V1.5
This contains details of the communications protocol.
https://files.seeedstudio.com/wiki/mmWave-radar/MR24HPC1_User_Manual-V1.5.pdf

A more recent manual?
This version has a slightly different summary of the communications protocol, with some additional messages.
https://files.seeedstudio.com/wiki/mmWave-radar/24GHz_mmWave_Sensor-Human_Static_Presence_Module_Lite_User_Manual.pdf

Seeed Studio Data Sheet
https://files.seeedstudio.com/wiki/mmWave-radar/24GHz_mmWave_Sensor-Human_Static_Presence_Module_Lite_Datasheet.pdf

Seeed Studio Wiki
Essential reading...
https://wiki.seeedstudio.com/Radar_MR24HPC1/

More sensitive version (more expensive too)
Seeed Studio also has a more sensitive version, which should work with the communications software, but I haven't tested it yet.
I think the Configurator (and some validation checks) may need updating because the ranges are different.
It works up to 12m distance instead of 5m.
https://wiki.seeedstudio.com/Radar_MR24HPB1/

The MicRadar Product
This is the same as the Seeed Studio product. MicRadar makes the MCU chip.
https://www.micradar.cn/en/prodetails-21.html
https://www.micradar.cn/uploads/soft/20230801/1690870595.pdf

 

The 'Official' Seeed Studio Arduino Library :-(

This is the library from the Seeed Studio wiki page. It is a bare-bones library, so you'll need to add a lot of your own code to implement all the features. I would not recommend it. There are (still) two major bugs and it directly calls Serial.print() all over the place, making it unusable unless you are just experimenting.

Bug 1: Line 14, readBytesUntil(0x43, Msg, 20) is used to detect the end of the message. This will fail if the message contains the byte 0x43 (unnecessarily defined somewhere else as MESSAGE_END2) in the data section or as the checksum byte.

Bug 2: Line 206, the decodeVal_func() returns the wrong value if 'val < 0x0A', see 'else if(val < 0x0A) return (val) * SEEED_HUMAN_UNIT;' It should be 'return (10-val) * SEEED_HUMAN_UNIT;'.

Style guide: There's no need to obscure the very important SEEED_HUMAN_UNIT value, and others, by hiding their definitions in an include file - just use 0.5f directly - it's not used anywhere else. You could say the same for almost all the constants defined in the include file.

Using the inefficient float data type is unnecessary - just use 'cm' instead of 'm'. Multiply by 50 instead of 0.5f. Maybe using 'mm' would be better.

https://github.com/limengdu/Seeed_24GHz_Human_Static_Presence_Module_Lite

 

J-Link EDU Mini (CHF60.-)
This is a cheaper solution for updating the firmware. You can use it for many other things too, of course.
https://www.segger.com/products/debug-probes/j-link/models/j-link-edu-mini/

 

Radar FMCW Signal Processing :-o
If you are interested in what the MCU is doing with the radar signals, these Infineon training documents reveal it all in hideous scary detail...
https://www.infineon.com/assets/row/public/documents/24/56/infineon-radar-basics-fmcw-handout-training-en.pdf
https://www.infineon.com/assets/row/public/documents/24/56/infineon-fmcw-radar-digital-signal-processing-handout-training-en.pdf

 

PuTTY, for Serial port logging, and more
https://www.chiark.greenend.org.uk/~sgtatham/putty/