mirror of
https://github.com/Threnklyn/esphome-dev.git
synced 2026-06-01 18:48:28 +02:00
71 lines
2.0 KiB
C++
71 lines
2.0 KiB
C++
/*
|
|
* Adds support for Qwiic PIR motion sensors that communicate over an I2C bus.
|
|
* These sensors use Sharp PIR motion sensors to detect motion. A firmware running on an ATTiny84 translates the digital
|
|
* output to I2C communications.
|
|
* ATTiny84 firmware: https://github.com/sparkfun/Qwiic_PIR (acccessed July 2023)
|
|
* SparkFun's Arduino library: https://github.com/sparkfun/SparkFun_Qwiic_PIR_Arduino_Library (accessed July 2023)
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include "esphome/core/component.h"
|
|
#include "esphome/components/binary_sensor/binary_sensor.h"
|
|
#include "esphome/components/i2c/i2c.h"
|
|
|
|
namespace esphome {
|
|
namespace qwiic_pir {
|
|
|
|
// Qwiic PIR I2C Register Addresses
|
|
enum {
|
|
QWIIC_PIR_CHIP_ID = 0x00,
|
|
QWIIC_PIR_EVENT_STATUS = 0x03,
|
|
QWIIC_PIR_DEBOUNCE_TIME = 0x05, // uint16_t debounce time in milliseconds
|
|
};
|
|
|
|
enum DebounceMode {
|
|
RAW_DEBOUNCE_MODE,
|
|
NATIVE_DEBOUNCE_MODE,
|
|
HYBRID_DEBOUNCE_MODE,
|
|
};
|
|
|
|
static const uint8_t QWIIC_PIR_DEVICE_ID = 0x72;
|
|
|
|
class QwiicPIRComponent : public Component, public i2c::I2CDevice, public binary_sensor::BinarySensor {
|
|
public:
|
|
void setup() override;
|
|
void loop() override;
|
|
|
|
void dump_config() override;
|
|
float get_setup_priority() const override { return setup_priority::DATA; }
|
|
|
|
void set_debounce_time(uint16_t debounce_time) { this->debounce_time_ = debounce_time; }
|
|
void set_debounce_mode(DebounceMode mode) { this->debounce_mode_ = mode; }
|
|
|
|
protected:
|
|
uint16_t debounce_time_{};
|
|
|
|
DebounceMode debounce_mode_{};
|
|
|
|
enum ErrorCode {
|
|
NONE = 0,
|
|
ERROR_COMMUNICATION_FAILED,
|
|
ERROR_WRONG_CHIP_ID,
|
|
} error_code_{NONE};
|
|
|
|
union {
|
|
struct {
|
|
bool raw_reading : 1; // raw state of PIR sensor
|
|
bool event_available : 1; // a debounced object has been detected or removed
|
|
bool object_removed : 1; // a debounced object is no longer detected
|
|
bool object_detected : 1; // a debounced object has been detected
|
|
bool : 4;
|
|
};
|
|
uint8_t reg;
|
|
} event_register_ = {.reg = 0};
|
|
|
|
void clear_events_();
|
|
};
|
|
|
|
} // namespace qwiic_pir
|
|
} // namespace esphome
|