mirror of
https://github.com/esphome/esphome.git
synced 2024-12-02 19:54:14 +01:00
Add a one wire option to the transmitter
This commit is contained in:
parent
25ce0ab4f3
commit
0b305eabe5
3 changed files with 13 additions and 3 deletions
|
@ -8,6 +8,7 @@ AUTO_LOAD = ["remote_base"]
|
||||||
|
|
||||||
CONF_ON_TRANSMIT = "on_transmit"
|
CONF_ON_TRANSMIT = "on_transmit"
|
||||||
CONF_ON_COMPLETE = "on_complete"
|
CONF_ON_COMPLETE = "on_complete"
|
||||||
|
CONF_ONE_WIRE = "one_wire"
|
||||||
|
|
||||||
remote_transmitter_ns = cg.esphome_ns.namespace("remote_transmitter")
|
remote_transmitter_ns = cg.esphome_ns.namespace("remote_transmitter")
|
||||||
RemoteTransmitterComponent = remote_transmitter_ns.class_(
|
RemoteTransmitterComponent = remote_transmitter_ns.class_(
|
||||||
|
@ -22,6 +23,7 @@ CONFIG_SCHEMA = cv.Schema(
|
||||||
cv.Required(CONF_CARRIER_DUTY_PERCENT): cv.All(
|
cv.Required(CONF_CARRIER_DUTY_PERCENT): cv.All(
|
||||||
cv.percentage_int, cv.Range(min=1, max=100)
|
cv.percentage_int, cv.Range(min=1, max=100)
|
||||||
),
|
),
|
||||||
|
cv.Optional(CONF_ONE_WIRE): cv.boolean,
|
||||||
cv.Optional(CONF_RMT_CHANNEL): esp32_rmt.validate_rmt_channel(tx=True),
|
cv.Optional(CONF_RMT_CHANNEL): esp32_rmt.validate_rmt_channel(tx=True),
|
||||||
cv.Optional(CONF_ON_TRANSMIT): automation.validate_automation(single=True),
|
cv.Optional(CONF_ON_TRANSMIT): automation.validate_automation(single=True),
|
||||||
cv.Optional(CONF_ON_COMPLETE): automation.validate_automation(single=True),
|
cv.Optional(CONF_ON_COMPLETE): automation.validate_automation(single=True),
|
||||||
|
@ -36,6 +38,9 @@ async def to_code(config):
|
||||||
|
|
||||||
cg.add(var.set_carrier_duty_percent(config[CONF_CARRIER_DUTY_PERCENT]))
|
cg.add(var.set_carrier_duty_percent(config[CONF_CARRIER_DUTY_PERCENT]))
|
||||||
|
|
||||||
|
if one_wite_config := config.get(CONF_ONE_WIRE):
|
||||||
|
cg.add(var.set_one_wire(one_wite_config))
|
||||||
|
|
||||||
if on_transmit_config := config.get(CONF_ON_TRANSMIT):
|
if on_transmit_config := config.get(CONF_ON_TRANSMIT):
|
||||||
await automation.build_automation(
|
await automation.build_automation(
|
||||||
var.get_transmit_trigger(), [], on_transmit_config
|
var.get_transmit_trigger(), [], on_transmit_config
|
||||||
|
|
|
@ -34,6 +34,8 @@ class RemoteTransmitterComponent : public remote_base::RemoteTransmitterBase,
|
||||||
|
|
||||||
void set_carrier_duty_percent(uint8_t carrier_duty_percent) { this->carrier_duty_percent_ = carrier_duty_percent; }
|
void set_carrier_duty_percent(uint8_t carrier_duty_percent) { this->carrier_duty_percent_ = carrier_duty_percent; }
|
||||||
|
|
||||||
|
void set_one_wire(bool one_wire) { this->one_wire_ = one_wire; }
|
||||||
|
|
||||||
Trigger<> *get_transmit_trigger() const { return this->transmit_trigger_; };
|
Trigger<> *get_transmit_trigger() const { return this->transmit_trigger_; };
|
||||||
Trigger<> *get_complete_trigger() const { return this->complete_trigger_; };
|
Trigger<> *get_complete_trigger() const { return this->complete_trigger_; };
|
||||||
|
|
||||||
|
@ -55,6 +57,7 @@ class RemoteTransmitterComponent : public remote_base::RemoteTransmitterBase,
|
||||||
|
|
||||||
uint32_t current_carrier_frequency_{38000};
|
uint32_t current_carrier_frequency_{38000};
|
||||||
bool initialized_{false};
|
bool initialized_{false};
|
||||||
|
bool one_wire_{false};
|
||||||
rmt_channel_handle_t channel_{NULL};
|
rmt_channel_handle_t channel_{NULL};
|
||||||
rmt_encoder_handle_t encoder_{NULL};
|
rmt_encoder_handle_t encoder_{NULL};
|
||||||
std::vector<rmt_symbol_word_t> rmt_temp_;
|
std::vector<rmt_symbol_word_t> rmt_temp_;
|
||||||
|
|
|
@ -18,6 +18,7 @@ void RemoteTransmitterComponent::dump_config() {
|
||||||
ESP_LOGCONFIG(TAG, "Remote Transmitter...");
|
ESP_LOGCONFIG(TAG, "Remote Transmitter...");
|
||||||
ESP_LOGCONFIG(TAG, " RMT memory blocks: %d", this->mem_block_num_);
|
ESP_LOGCONFIG(TAG, " RMT memory blocks: %d", this->mem_block_num_);
|
||||||
ESP_LOGCONFIG(TAG, " Clock divider: %u", this->clock_divider_);
|
ESP_LOGCONFIG(TAG, " Clock divider: %u", this->clock_divider_);
|
||||||
|
ESP_LOGCONFIG(TAG, " One wire: %s", this->one_wire_ ? "true" : "false");
|
||||||
LOG_PIN(" Pin: ", this->pin_);
|
LOG_PIN(" Pin: ", this->pin_);
|
||||||
|
|
||||||
if (this->current_carrier_frequency_ != 0 && this->carrier_duty_percent_ != 100) {
|
if (this->current_carrier_frequency_ != 0 && this->carrier_duty_percent_ != 100) {
|
||||||
|
@ -37,9 +38,10 @@ void RemoteTransmitterComponent::configure_rmt_() {
|
||||||
channel.gpio_num = gpio_num_t(this->pin_->get_pin());
|
channel.gpio_num = gpio_num_t(this->pin_->get_pin());
|
||||||
channel.mem_block_symbols = 64 * this->mem_block_num_;
|
channel.mem_block_symbols = 64 * this->mem_block_num_;
|
||||||
channel.trans_queue_depth = 1;
|
channel.trans_queue_depth = 1;
|
||||||
// TODO: add support for a rx/tx 1-wire gpio
|
if (this->one_wire_) {
|
||||||
// channel.flags.io_loop_back = 1;
|
channel.flags.io_loop_back = 1;
|
||||||
// channel.flags.io_od_mode = 1;
|
channel.flags.io_od_mode = 1;
|
||||||
|
}
|
||||||
esp_err_t error = rmt_new_tx_channel(&channel, &this->channel_);
|
esp_err_t error = rmt_new_tx_channel(&channel, &this->channel_);
|
||||||
if (error != ESP_OK) {
|
if (error != ESP_OK) {
|
||||||
this->error_code_ = error;
|
this->error_code_ = error;
|
||||||
|
|
Loading…
Reference in a new issue