81 lines
2.6 KiB
Python
81 lines
2.6 KiB
Python
import esphome.codegen as cg
|
|
import esphome.config_validation as cv
|
|
from esphome import pins
|
|
from esphome.components import spi
|
|
from esphome.const import CONF_ID #, CONF_MODE
|
|
|
|
# Import ThreadModel enum
|
|
#from esphome.core import ThreadModel
|
|
|
|
MULTI_CONF = True
|
|
|
|
CONF_DRDY_PIN = "drdy_pin"
|
|
CONF_SYNC_RESET_PIN = "sync_reset_pin"
|
|
CONF_REFERENCE_VOLTAGE = "reference_voltage"
|
|
CONF_CLOCK_FREQUENCY = "clock_frequency"
|
|
CONF_ADS131M08_ID = "_ads131m08_id"
|
|
CONF_OSR = "oversampling_ratio"
|
|
|
|
DEPENDENCIES = ["spi"]
|
|
|
|
ads131m08_ns = cg.esphome_ns.namespace("ads131m08")
|
|
ADS131M08Hub = ads131m08_ns.class_("ADS131M08Hub", cg.Component, spi.SPIDevice)
|
|
|
|
OSR = ads131m08_ns.enum("ADS131M08_OVERSAMPLING_RATIO")
|
|
ALLOWED_OSRS = {
|
|
128: OSR.OSR_128,
|
|
256: OSR.OSR_256,
|
|
512: OSR.OSR_512,
|
|
1024: OSR.OSR_1024,
|
|
2048: OSR.OSR_2048,
|
|
4096: OSR.OSR_4096,
|
|
8192: OSR.OSR_8192,
|
|
16256: OSR.OSR_16256,
|
|
}
|
|
|
|
ALLOWED_CLOCK_FREQUENCIES = {
|
|
2048000: 2048000,
|
|
4096000: 4096000,
|
|
8192000: 8192000,
|
|
"2048kHz": 2048000,
|
|
"4096kHz": 4096000,
|
|
"8192kHz": 8192000,
|
|
"2.048MHz": 2048000,
|
|
"4.096MHz": 4096000,
|
|
"8.192MHz": 8192000,
|
|
}
|
|
|
|
CONFIG_SCHEMA = (
|
|
cv.Schema(
|
|
{
|
|
cv.GenerateID(): cv.declare_id(ADS131M08Hub),
|
|
cv.Required(CONF_DRDY_PIN): pins.internal_gpio_input_pin_schema,
|
|
cv.Optional(CONF_SYNC_RESET_PIN): pins.internal_gpio_input_pin_schema,
|
|
cv.Optional(CONF_CLOCK_FREQUENCY, default="8192kHz"): cv.All(cv.frequency, cv.one_of(*ALLOWED_CLOCK_FREQUENCIES.keys())),
|
|
cv.Optional(CONF_OSR, default=1024): cv.enum(ALLOWED_OSRS, int=True),
|
|
cv.Optional(CONF_REFERENCE_VOLTAGE, default=1.2): cv.float_range(min=1.1, max=1.3),
|
|
}
|
|
)
|
|
.extend(cv.COMPONENT_SCHEMA)
|
|
.extend(spi.spi_device_schema(cs_pin_required=True, default_data_rate="10MHz"))
|
|
)
|
|
|
|
async def to_code(config):
|
|
var = cg.new_Pvariable(config[CONF_ID])
|
|
await cg.register_component(var, config)
|
|
await spi.register_spi_device(var, config)
|
|
drdy = await cg.gpio_pin_expression(config[CONF_DRDY_PIN])
|
|
if CONF_SYNC_RESET_PIN in config:
|
|
sync_reset = await cg.gpio_pin_expression(config[CONF_SYNC_RESET_PIN])
|
|
cg.add(var.set_sync_reset_pin(sync_reset))
|
|
clock_frequency = ALLOWED_CLOCK_FREQUENCIES[config[CONF_CLOCK_FREQUENCY]]
|
|
cg.add(var.set_clock_frequency(clock_frequency))
|
|
osr = config[CONF_OSR]
|
|
cg.add(var.set_osr(osr))
|
|
reference_voltage = config[CONF_REFERENCE_VOLTAGE]
|
|
cg.add(var.set_reference_voltage(reference_voltage))
|
|
cg.add(var.set_drdy_pin(drdy))
|
|
#cg.add(var.set_thread_model(ThreadModel.MULTI_ATOMICS))
|
|
|
|
|