mirror of
https://github.com/esphome/esphome.git
synced 2025-02-24 13:58:14 +00:00
59 lines
1.9 KiB
C++
59 lines
1.9 KiB
C++
#pragma once
|
|
|
|
#include "esphome/core/component.h"
|
|
#include "esphome/components/sensor/sensor.h"
|
|
#include "esphome/components/spi/spi.h"
|
|
|
|
namespace esphome {
|
|
namespace max31865 {
|
|
|
|
enum MAX31865RegisterMasks { SPI_WRITE_M = 0x80 };
|
|
enum MAX31865Registers {
|
|
CONFIGURATION_REG = 0x00,
|
|
RTD_RESISTANCE_MSB_REG = 0x01,
|
|
RTD_RESISTANCE_LSB_REG = 0x02,
|
|
FAULT_THRESHOLD_H_MSB_REG = 0x03,
|
|
FAULT_THRESHOLD_H_LSB_REG = 0x04,
|
|
FAULT_THRESHOLD_L_MSB_REG = 0x05,
|
|
FAULT_THRESHOLD_L_LSB_REG = 0x06,
|
|
FAULT_STATUS_REG = 0x07,
|
|
};
|
|
enum MAX31865ConfigFilter {
|
|
FILTER_60HZ = 0,
|
|
FILTER_50HZ = 1,
|
|
};
|
|
|
|
class MAX31865Sensor : public sensor::Sensor,
|
|
public PollingComponent,
|
|
public spi::SPIDevice<spi::BIT_ORDER_MSB_FIRST, spi::CLOCK_POLARITY_LOW,
|
|
spi::CLOCK_PHASE_TRAILING, spi::DATA_RATE_4MHZ> {
|
|
public:
|
|
void set_reference_resistance(float reference_resistance) { reference_resistance_ = reference_resistance; }
|
|
void set_nominal_resistance(float nominal_resistance) { rtd_nominal_resistance_ = nominal_resistance; }
|
|
void set_filter(MAX31865ConfigFilter filter) { filter_ = filter; }
|
|
void set_num_rtd_wires(uint8_t rtd_wires) { rtd_wires_ = rtd_wires; }
|
|
void setup() override;
|
|
void dump_config() override;
|
|
float get_setup_priority() const override;
|
|
|
|
void update() override;
|
|
|
|
protected:
|
|
float reference_resistance_;
|
|
float rtd_nominal_resistance_;
|
|
MAX31865ConfigFilter filter_;
|
|
uint8_t rtd_wires_;
|
|
uint8_t base_config_;
|
|
bool has_fault_ = false;
|
|
bool has_warn_ = false;
|
|
void read_data_();
|
|
void write_config_(uint8_t mask, uint8_t bits, uint8_t start_position = 0);
|
|
void write_register_(uint8_t reg, uint8_t value);
|
|
const uint8_t read_register_(uint8_t reg);
|
|
const uint16_t read_register_16_(uint8_t reg);
|
|
float calc_temperature_(const float &rtd_ratio);
|
|
};
|
|
|
|
} // namespace max31865
|
|
} // namespace esphome
|