1
0
mirror of https://github.com/esphome/esphome.git synced 2025-03-13 22:28:14 +00:00

Add SM16716 support.

This commit is contained in:
Kevin Lewis 2019-04-03 00:52:45 -04:00
parent cb9f36a153
commit 6b397a9ea5
4 changed files with 95 additions and 0 deletions

View File

@ -0,0 +1,36 @@
import voluptuous as vol
from esphome.components import output
from esphome.components.sm16716 import SM16716OutputComponent
import esphome.config_validation as cv
from esphome.const import CONF_CHANNEL, CONF_ID, CONF_SM16716_ID, CONF_POWER_SUPPLY
from esphome.cpp_generator import Pvariable, get_variable
from esphome.cpp_helpers import setup_component
DEPENDENCIES = ['sm16716']
Channel = SM16716OutputComponent.class_('Channel', output.FloatOutput)
PLATFORM_SCHEMA = output.FLOAT_OUTPUT_PLATFORM_SCHEMA.extend({
vol.Required(CONF_ID): cv.declare_variable_id(Channel),
vol.Required(CONF_CHANNEL): vol.All(vol.Coerce(int),
vol.Range(min=0, max=65535)),
cv.GenerateID(CONF_SM16716_ID): cv.use_variable_id(SM16716OutputComponent),
}).extend(cv.COMPONENT_SCHEMA.schema)
def to_code(config):
power_supply = None
if CONF_POWER_SUPPLY in config:
for power_supply in get_variable(config[CONF_POWER_SUPPLY]):
yield
sm16716 = None
for sm16716 in get_variable(config[CONF_SM16716_ID]):
yield
rhs = sm16716.create_channel(config[CONF_CHANNEL], power_supply)
out = Pvariable(config[CONF_ID], rhs)
output.setup_output_platform(out, config, skip_power_supply=True)
setup_component(out, config)
BUILD_FLAGS = '-DUSE_SM16716_OUTPUT'

View File

@ -0,0 +1,43 @@
import voluptuous as vol
from esphome import pins
from esphome.components import output
import esphome.config_validation as cv
from esphome.const import (CONF_CLOCK_PIN, CONF_DATA_PIN, CONF_ID,
CONF_NUM_CHANNELS, CONF_NUM_CHIPS, CONF_UPDATE_ON_BOOT)
from esphome.cpp_generator import Pvariable, add
from esphome.cpp_helpers import gpio_output_pin_expression, setup_component
from esphome.cpp_types import App, Component
SM16716OutputComponent = output.output_ns.class_('SM16716OutputComponent', Component)
MULTI_CONF = True
CONFIG_SCHEMA = cv.Schema({
cv.GenerateID(): cv.declare_variable_id(SM16716OutputComponent),
vol.Required(CONF_DATA_PIN): pins.gpio_output_pin_schema,
vol.Required(CONF_CLOCK_PIN): pins.gpio_output_pin_schema,
vol.Optional(CONF_NUM_CHANNELS): vol.All(vol.Coerce(int),
vol.Range(3, 255)),
vol.Optional(CONF_NUM_CHIPS): vol.All(vol.Coerce(int),
vol.Range(1, 85)),
vol.Optional(CONF_UPDATE_ON_BOOT): vol.Coerce(bool),
}).extend(cv.COMPONENT_SCHEMA.schema)
def to_code(config):
for mosi in gpio_output_pin_expression(config[CONF_DATA_PIN]):
yield
for sclk in gpio_output_pin_expression(config[CONF_CLOCK_PIN]):
yield
rhs = App.make_sm16716_component(mosi, sclk)
sm16716 = Pvariable(config[CONF_ID], rhs)
if CONF_NUM_CHANNELS in config:
add(sm16716.set_num_channels(config[CONF_NUM_CHANNELS]))
if CONF_NUM_CHIPS in config:
add(sm16716.set_num_chips(config[CONF_NUM_CHIPS]))
if CONF_UPDATE_ON_BOOT in config:
add(sm16716.set_update(config[CONF_UPDATE_ON_BOOT]))
setup_component(sm16716, config)
BUILD_FLAGS = '-DUSE_SM16716_OUTPUT'

View File

@ -384,6 +384,7 @@ CONF_RESTORE_STATE = 'restore_state'
CONF_TIMING = 'timing'
CONF_INVALID_COOLDOWN = 'invalid_cooldown'
CONF_MY9231_ID = 'my9231_id'
CONF_SM16716_ID = 'sm16716_id'
CONF_NUM_CHANNELS = 'num_channels'
CONF_UPDATE_ON_BOOT = 'update_on_boot'
CONF_INITIAL_VALUE = 'initial_value'

View File

@ -640,6 +640,12 @@ my9231:
num_chips: 2
bit_depth: 16
sm16716:
data_pin: GPIO14
clock_pin: GPIO4
num_channels: 3
num_chips: 1
output:
- platform: gpio
pin: GPIO26
@ -709,6 +715,15 @@ output:
- platform: my9231
id: my_5
channel: 5
- platform: sm16716
id: sm_0
channel: 0
- platform: sm16716
id: sm_1
channel: 1
- platform: sm16716
id: sm_2
channel: 2
- platform: copy
id: my_copy1
outputs: