This library covers the complete set of serial commands for the HLK-LD2410x presence sensor. It has no external dependencies and will work on any Arduino and ESP32 board.
Modified by John Greenwell to adapt driver for custom HAL support, 2025.
For this modified version, the following hardware abstraction layer (HAL) requirements must be satisfied:
- A header file
hal.hproviding access to HAL namespace classes and methods. - A UART class within the HAL namespace with the following methods:
- Return true if UART data is available in the receive buffer: bool available()
- Read and return a single byte from the UART buffer: uint8_t read()
- Write n bytes from write buffer to UART device, return number of bytes written: uint32_t write(char *buf, uint32_t n)
- Flush the receive buffer of the UART device: void flush()
- A millis() function in the HAL namespace that returns an accurate milliseconds counter to be used for timing.
- A delay_ms() function in the HAL namespace that delays an accurate milliseconds to be used for timing.
Some further requirements may also be found. Typically, these will mirror the Arduino framework and should be added to hal.h.
-
It is recommended to install this library from the Arduino Library Manager (search for "MyLD2410"). However, if the Arduino Library Manager does not find it, or you prefer to install it yourself, download or clone this repository.
-
Unzip the downloaded archive in the Arduino/libraries folder.
-
Restart the Arduino IDE.
-
-
Include the header file:
#include <MyLD2410.h>in your sketch.
- Decide which hardware serial stream you'll be using for communication. For 5V Arduino boards you must use a voltage divider (1:2 or 2:3) on the TX line to protect the RX pin of the sensor, which operates at 3.3V.
#define sensorSerial Serial1
| Board | Serial | RX pin | Tx pin |
|---|---|---|---|
| ESP32 WROOM-32 | Serial1 | 16 | 17 |
| ESP32-S3 WROOM | Serial1 | 18 | 17 |
| Xiao-ESP32-c3 | Serial0 | D7 | D6 |
| Xiao-ESP32-c6 | Serial0 | D7 | D6 |
| Adruino Nano 33 IoT | Serial1 | D1 | D0 |
| Adruino Pro-Micro (Leonardo) | Serial1 | D0 | D1 |
- Create a global instance of the sensor object
MyLD2410 sensor(sensorSerial);
- In the
setup()function, begin serial communication with baud rateLD2420_BAUD_RATE(256000). On ESP32-WROOM: RX_PIN(16), TX_PIN(17). Check the exact pin numbers for your board. Then callsensor.begin()to begin communication with the sensor.
sensorSerial.begin(LD2410_BAUD_RATE, SERIAL_8N1, RX_PIN, TX_PIN);
if (!sensor.begin()) {
Serial.println("Failed to communicate with the sensor");
while (true);
}
-
In the
loop()function, call as often as possiblesensor.check(). This function returns:-
MyLD2410::DATAif a data frame is received -
MyLD2410::ACKif a command-response frame is received -
MyLD2410::FAILif no useful information was processed
-
-
Use the many convenience functions to extract/modify the sensor data (see the examples below).
-
Once the library is installed, navigate to:
File->Examples->MyLD2410to play with the examples. They are automatically configured for some popular boards (see the table above). For other boards, minor (trivial) modifications may be necessary.-
sensor_data- retrieves all data frames from the sensor and outputs useful information every second. Handles both basic and enhanced (engineering) modes. -
print_parameters- prints the current device parameters. -
modify_parameters- demonstrates how to modify various sensor parameters. At the end, the original state of the sensor is restored. -
factory_reset- restores the factory default values of the sensor parameters. -
set_bt_password- sets a new Bluetooth password, or resets the password to its default value "HiLink". Be careful not to get locked out of your sensor.-
The password must be 6 characters long. If you enter a longer password (on line 54), it will be truncated to 6 characters.
-
If you provide a shorter one, it will be padded with spaces (0x20).
-
To restore the default password, uncomment the line
#define RESET_PASSWORDand flash the sketch again.
-
-
set_baud_rate- sets and tests a new baud rate for communication with the sensor. Be careful not to get locked out of your sensor.
-

