Add support for ESP8266 (serial 0 or 1)

This commit is contained in:
Andreas Böhler
2022-01-11 15:41:14 +01:00
parent 8eadc3ca3b
commit 506e7526bc
4 changed files with 25 additions and 25 deletions

View File

@@ -9,7 +9,8 @@ DEPENDENCIES = ['uart']
MULTI_CONF = True
dmx512_ns = cg.esphome_ns.namespace('dmx512')
DMX512 = dmx512_ns.class_('DMX512', cg.Component)
DMX512ESP32 = dmx512_ns.class_('DMX512ESP32', cg.Component)
DMX512ESP8266 = dmx512_ns.class_('DMX512ESP8266', cg.Component)
CONF_DMX512_ID = 'dmx512_id'
CONF_ENABLE_PIN = 'enable_pin'
@@ -20,17 +21,26 @@ CONF_CUSTOM_BREAK_LEN = 'custom_break_len'
CONF_CUSTOM_MAB_LEN = 'custom_mab_len'
CONF_UPDATE_INTERVAL = 'update_interval'
UART_MAX = 2
if CORE.is_esp32:
UART_MAX = 2
elif CORE.is_esp8266:
UART_MAX = 1
def _declare_type(value):
if CORE.is_esp32:
if CORE.using_arduino:
return cv.declare_id(DMX512)(value)
return cv.declare_id(DMX512ESP32)(value)
elif CORE.is_esp8266:
return cv.declare_id(DMX512ESP8266)(value)
raise NotImplementedError
CONFIG_SCHEMA = cv.Schema({
cv.GenerateID(): _declare_type,
cv.Optional(CONF_ENABLE_PIN): pins.gpio_output_pin_schema,
cv.Optional(CONF_TX_PIN, default=5): cv.int_range(min=0,max=39),
cv.Optional(CONF_UART_NUM, default=1): cv.int_range(min=0, max=2),
cv.Optional(CONF_UART_NUM, default=1): cv.int_range(min=0, max=UART_MAX),
cv.Optional(CONF_PERIODIC_UPDATE, default=True): cv.boolean,
cv.Optional(CONF_FORCE_FULL_FRAMES, default=False): cv.boolean,
cv.Optional(CONF_CUSTOM_MAB_LEN, default=12): cv.int_range(min=12,max=1000),

View File

@@ -22,16 +22,6 @@ void DMX512::loop() {
}
}
void DMX512::sendBreak() {
pinMatrixOutDetach(this->tx_pin_, false, false);
pinMode(this->tx_pin_, OUTPUT);
digitalWrite(this->tx_pin_, LOW);
delayMicroseconds(this->break_len_);
digitalWrite(this->tx_pin_, HIGH);
delayMicroseconds(this->mab_len_);
pinMatrixOutAttach(this->tx_pin_, this->uart_idx_, false, false);
}
void DMX512::dump_config() {
ESP_LOGCONFIG(TAG, "Setting up DMX512...");
}

View File

@@ -3,7 +3,6 @@
#include "esphome/core/component.h"
#include "esphome/components/uart/uart.h"
#include "esphome/components/output/float_output.h"
#include "esp32-hal-matrix.h"
#define UPDATE_INTERVAL_MS 500
#define DMX_MAX_CHANNEL 512
@@ -27,7 +26,7 @@ class DMX512 : public Component {
void dump_config() override;
void sendBreak();
virtual void sendBreak() = 0;
void set_enable_pin(GPIOPin *pin_enable) { pin_enable_ = pin_enable; }
@@ -45,15 +44,7 @@ class DMX512 : public Component {
void set_update_interval(int intvl) { update_interval_ = intvl; }
void set_uart_num(int num) {
if(num == 0) {
this->uart_idx_ = U0TXD_OUT_IDX;
} else if(num == 1) {
this->uart_idx_ = U1TXD_OUT_IDX;
} else if(num == 2) {
this->uart_idx_ = U2TXD_OUT_IDX;
}
}
virtual void set_uart_num(int num) = 0;
float get_setup_priority() const override { return setup_priority::BUS; }

View File

@@ -4,6 +4,7 @@ import esphome.config_validation as cv
import esphome.codegen as cg
from esphome.const import CONF_FREQUENCY, CONF_ID, CONF_NUMBER, CONF_PIN
from esphome.components import dmx512
from esphome.core import CORE, coroutine
dmx512_ns = cg.esphome_ns.namespace('dmx512')
DMX512Output = dmx512_ns.class_('DMX512Output', output.FloatOutput, cg.Component)
@@ -17,10 +18,18 @@ def validate_channel(channel):
else:
return False
def _declare_type(value):
if CORE.is_esp32:
if CORE.using_arduino:
return cv.use_id(dmx512.DMX512ESP32)(value)
elif CORE.is_esp8266:
return cv.use_id(dmx512.DMX512ESP8266)(value)
raise NotImplementedError
CONFIG_SCHEMA = output.FLOAT_OUTPUT_SCHEMA.extend({
cv.Required(CONF_ID): cv.declare_id(DMX512Output),
cv.Required(CONF_CHANNEL): cv.int_range(min=1, max=512),
cv.GenerateID(CONF_UNIVERSE_ID): cv.use_id(dmx512.DMX512),
cv.GenerateID(CONF_UNIVERSE_ID): _declare_type,
}).extend(cv.COMPONENT_SCHEMA)