Driver for HLK LD2410C
I've been playing with the tiny HiLink HLK-LD2410C human presence sensor and an ESP32C3 and decided to write a fairly complete driver for it as I couldn't find one apart from a partial implementation in c++ for the Arduino platform.
Below is snippet of an example of how to use it.
#include "esp-ld2410.h" ... // Initialise device on UART 1 using // Default factory baudrate (256000) // GPIO_NUM_1 for txd (connected to module rxd), // GPIO_NUM_0 for rxd (connected to module txd), // No digital signal ld2410_driver_install(UART_NUM_1, LD2410_BAUDRATE_DEFAULT, GPIO_NUM_1, GPIO_NUM_0, GPIO_NUM_NC); // enable full-data (engineering) mode ld2410_set_full_mode(UART_NUM_1); // Retrieve and print data. // It may take a little while for data to be valid. while (1) { const struct ld2410_full_t *data = ld2410_get_full_data(UART_NUM_1); printf(" detected: %s %s\n", data->status & LD2410_STATUS_MOVE ? "moving" : "", data->status & LD2410_STATUS_REST ? "resting" : ""); vTaskDelay(pdMS_TO_TICKS(1000)); }
Pretty much every feature is supported apart from anything bluetooth related but that isn't difficult to add.
Internally it uses a daemon task to monitor the serial port and manage communications with the device. For example most settings and queries must be performed after switching to 'command mode' - this is handled automatically and efficiently by the daemon task.
This is my first attempt at anything sophisticated with FreeRTOS so my choices of IPC primitives and so on may not be those I'd choose with experience.
I'm not really sure what I'm going to do with the sensor but at least I have a platform for experimentation with it.
There is some more information and links on the esp-ld2410 project page.