Files
jdillenburg-esphome/components/adxl345
John Dillenburg 7dc846a6eb matthiazzz - The current adxl345 component in ESPHome relies on multiple external Adafruit libraries (Adafruit Unified Sensor, Adafruit BusIO, Adafruit ADXL345). This causes unnecessary dependencies, compilation overhead, and sometimes incompatibilities when used with tca9548a multiplexers.
I modified the component to remove all Adafruit library dependencies and instead use a lightweight, self-contained ESPHome driver for ADXL345. After these changes, multiple ADXL345 sensors can be used in combination with a TCA9548A I²C multiplexer without conflicts.
2025-09-06 15:38:59 -05:00
..
2025-03-02 20:07:36 -06:00
2025-03-14 15:36:55 -05:00
2025-03-02 20:07:36 -06:00

ADXL345 Component for ESPHome

This is a custom component for ESPHome that interfaces with the ADXL345 3-axis accelerometer.

Features

  • Supports all standard I2C configuration options including multiple I2C buses
  • Configurable measurement range (2G, 4G, 8G, 16G)
  • Provides raw acceleration values for X, Y, and Z axes
  • Calculates off-vertical angle (useful for bed/chair position tracking)
  • Calculates jitter (total movement across all axes)
  • Full Home Assistant integration with proper device classes and units

Installation

  1. Create a components directory in your ESPHome configuration directory if it doesn't exist
  2. Create an adxl345 directory inside the components directory
  3. Copy the following files into the adxl345 directory:
    • __init__.py
    • adxl345.h
    • adxl345.cpp
    • sensor.py

Dependencies

This component requires the following libraries:

  • Wire
  • SPI
  • Adafruit BusIO
  • Adafruit Unified Sensor
  • Adafruit ADXL345

Add these to your ESPHome configuration:

libraries:
  - "Wire"
  - "SPI"
  - "Adafruit BusIO"
  - "Adafruit Unified Sensor"
  - "Adafruit ADXL345"

Usage

Basic Configuration

# Define component and sensors for accel_x, accel_y and accel_z
adxl345:
  - id: my_adxl345
    address: 0x53
    update_interval: 100ms
    accel_x:
      name: "Acceleration X"
    accel_y:
      name: "Acceleration Y"
    accel_z:
      name: "Acceleration Z"

Advanced Configuration

# Define I2C bus
i2c:
  sda: GPIO21
  scl: GPIO22
  frequency: 400kHz

# Define component with all options
adxl345:
  - id: my_adxl345
    address: 0x53
    update_interval: 100ms
    range: 4G  # Options: 2G, 4G, 8G, 16G
    accel_x:
      name: "Acceleration X"
      filters:
        - median:
            window_size: 5
            send_every: 5
            send_first_at: 1
    accel_y:
      name: "Acceleration Y"
    accel_z:
      name: "Acceleration Z"
    off_vertical:
      name: "Tilt Angle"
      filters:
        - sliding_window_moving_average:
            window_size: 10
            send_every: 5
    jitter:
      name: "Movement Detection"
      filters:
        - threshold:
            above: 10.0
            then: ON
            below: 2.0
            then: OFF

Available Sensors

Sensor Description Unit
accel_x Raw X-axis acceleration m/s²
accel_y Raw Y-axis acceleration m/s²
accel_z Raw Z-axis acceleration m/s²
off_vertical Maximum angle from vertical (derived from pitch and roll) degrees
jitter Sum of absolute accelerations across all axes (movement detection) m/s²

Example Use Cases

  • Bed/chair incline monitoring
  • Movement detection
  • Vibration monitoring
  • Orientation sensing