/esphome-mmwave-sensors

ESPHome integration for mmWave Sensors from Seeed Studio

Primary LanguageC++MIT LicenseMIT

ESPHome integration for mmWave sensors

Collection of header files and esphome yaml configs to integrate some Seeed Studio mmWave sensors into Home Assistant.

Currently the following sensors are partially implemented

  • Seeed Studio
    • MR24HPB1 - 24 GHz Human Stationary Sensor
    • MR24HPC1 - 24 GHz Human Static Presence Lite
    • MR60BHA1 - 60 GHz Respiratory Heartbeat Sensor

Table of Contents

Roadmap

  • Implement missing SeeedStudio Sensors (MR24BSD1 & MR60FDA1)
  • Make documentation cleaner and enhance with screenshots and plots
  • Implement sensors as proper external components
    • Are there proper docs on how the config validation/generation part of esphome works?

Installation

Files

If you don't bother or use all the supported sensors just copy the header and packages directories into your Home Assistant config/esphome directory.

Otherwise these are the files needed for each sensor:

  • MR24HPB1
    • Headers
      • headers/mr24hpb1.h
      • headers/mr24hpb1_frame.h
    • Config
      • packages/mr24d.yaml
  • MR24HPC1
    • Headers
      • headers/mr24hpc1.h
      • headers/mrx_frame.h
    • Config
      • packages/mr24hpc1.yaml
  • MR60BHA1
    • Headers
      • headers/mr60bha1.h
      • headers/mrx_frame.h
    • Config
      • packages/mr60bha1.yaml

You can change the name of the headers directory in home assistant if it doesn't apply to your naming scheme. You can adjust the file locations via substitutions.

substitutions:
  header_frame: headers/mrx_frame.h
  header_sensor: headers/mr24hpc1.h

Hardware

MCU

The template assumes the use of a ESP32. I specifically used the AZDelivery ESP32 Devkit C, but any other ESP32 and ESP8266 should work I guess. But I have not tested this.

Wiring

The template assumes the following wiring:

MCU mmWave Sensor
5V 5V
GND GND
GPIO16 (UART RX) TX
GPIO17 (UART TX) RX

The uart pins can be changed in the ESPHome yaml via substitutions

substitutions:
  uart_rx_pin: "16"
  uart_tx_pin: "17"

ESPHome Device

Take a look at the yaml files in the examples directory, these should give you a basic understanding of what to do when you create a new device in ESPHome.

Basically the section substitutions and packages are relevant. When you create a new device the other user relevant section will be generated by ESPHome, the before mentions sections need to be added from the provided example yaml files.

Supported Functions

The MR24HPC1 and MR60BHA1 sensor also support multiple inputs to reset, change operation modes and query specific sensor states.

MR24HPB1 MR24HPC1 MR60BHA1 Info
presence x x x binary (detected/clear)
motion x x x binary (detected/clear)
body movement x x x measurement (0: unoccupied, 1: static presence, 2-100: activity level)
proximity x x measurement (<0: approaching, 0 none or stationary, >0 moving away)
distance x measurement (distance to object in cm)
x, y, z angle x measurements (relative position of object to sensor)
heartrate x measurement
breathing rate x measurement
breathing info x measurement (1: normal, 2: fast, 3: slow, 4: none)
radar out of bounds x measurement (0: out of range, 1: within range)

MR24HPC1

Sensor

MR24HPC1 Sensor

Device Website

MR24HPC1 Sensor

Home Assistant

MR24HPC1 Sensor

MR60HBA1

Sensor

MR60HBA1 Sensor

Device Website

MR60HBA1 Sensor

Home Assistant

MR60HBA1 Sensor

Contributing

Since C++ is not my strongest of languages and this is my first implementation which is interacting with ESPHome, Home Assistant and the uart protocol in general, there are probably a lot of things that can be done easier or cleaner.

Please feel free to dive in! Open an issue or submit PRs.

License

MIT © thefipster