Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
F-24: Problem using built-in 433MHz receiver with ESPHome (GPIO40 issue)
#1
Hello,
I'm using the Kincony F-24 controller and trying to get the built-in 433MHz receiver working under ESPHome.
I get the following error:

Code:
[15:27:57][C][remote_receiver.esp32:161]: Remote Receiver:
[15:27:57][C][remote_receiver.esp32:162]:   Pin: GPIO40
[15:27:57][C][remote_receiver.esp32:173]:   Channel: 0
[15:27:57][C][remote_receiver.esp32:174]:   RMT memory blocks: 3
[15:27:57][C][remote_receiver.esp32:175]:   Clock divider: 80
[15:27:57][C][remote_receiver.esp32:178]:   Tolerance: 25%
[15:27:57][C][remote_receiver.esp32:179]:   Filter out pulses shorter than: 50 us
[15:27:57][C][remote_receiver.esp32:180]:   Signal is done after 10000 us of no changes
[15:27:57][E][remote_receiver.esp32:183]: Configuring RMT driver failed: ESP_ERR_INVALID_ARG (in rmt_config)
[15:27:57][E][component:085]:   Component remote_receiver is marked FAILED


Below is part of my ESPHome YAML configuration:
Code:
esphome:
  name: f24
  friendly_name: "Kincony F24 Controller"
  project:
    name: kincony.f24-smart-home
    version: "1.0"
 
esp32:
  board: esp32-s3-devkitc-1
  framework:
    type: arduino

# Enable logging
logger:

# Enable Home Assistant API
api:
  id: ha_api
  encryption:
    key: !secret

ota:
  platform: esphome
  password: !secret

ethernet:
  type: W5500
  clk_pin: GPIO42
  mosi_pin: GPIO43
  miso_pin: GPIO44
  cs_pin: GPIO41
  interrupt_pin: GPIO2
  reset_pin: GPIO1
  domain: .local
  id: ethernet_interface


web_server:
  port: 80

i2c:
  - id: bus_a
    sda: GPIO8
    scl: GPIO18
    scan: true
    frequency: 400kHz

pcf8574:
  - id: 'pcf8574_outputs_9_24'
    i2c_id: bus_a
    address: 0x25
  - id: 'pcf8574_inputs_1_16'
    i2c_id: bus_a
    address: 0x24
  - id: 'pcf8574_outputs_1_8_inputs_17_24'
    i2c_id: bus_a
    address: 0x26

globals:
  - id: current_ip_address
    type: std::string
    restore_value: no
    initial_value: '"Booting..."'
  - id: ha_status_text
    type: std::string
    restore_value: no
    initial_value: '"Offline"'
  - id: rf_code_display
    type: std::string
    restore_value: no
    initial_value: '""'
  - id: click_counts
    type: int
    initial_value: '0'


# Sekcja definiująca fizyczne wyjścia (przekaźniki)
output:
  - platform: gpio
    id: output_wiatrolap
    pin: { pcf8574: pcf8574_outputs_1_8_inputs_17_24, number: 12, mode: OUTPUT, inverted: true }
  - platform: gpio
    id: output_salon
    pin: { pcf8574: pcf8574_outputs_1_8_inputs_17_24, number: 13, mode: OUTPUT, inverted: true }


binary_sensor:
  - platform: status
    name: "Kincony F24 Status"
    id: f24_status_ha
  - platform: template
    name: "Kincony F24 Ethernet Status"
    id: ethernet_connected_status
    lambda: |-
      return id(ethernet_interface).is_connected();
    on_press:
      then:
        - lambda: |-
            id(current_ip_address) = id(ethernet_interface).get_ip_addresses()[0].str();
            id(ha_status_text) = "ETH OK";
            ESP_LOGI("ethernet", "Ethernet connected. IP: %s", id(current_ip_address).c_str());
    on_release:
      then:
        - lambda: |-
            id(current_ip_address) = "AP Mode";
            id(ha_status_text) = "AP Mode";
            ESP_LOGW("ethernet", "Ethernet disconnected. Activating AP mode.");
  - platform: template
    id: wifi_ap_active
    name: "Kincony F24 WiFi AP Active"
    internal: true
    lambda: |-
      return !id(ethernet_interface).is_connected();


  - platform: gpio
    name: "Włącznik Wiatrołap"
    pin:
      pcf8574: pcf8574_inputs_1_16
      number: 0
      inverted: true
    filters:
      - delayed_on: 10ms
    on_press:
      then:
        - lambda: 'id(click_counts) = 0;'
    on_multi_click:
      - timing:
          - ON for at most 600ms
          - OFF for at most 600ms
          - ON for at most 600ms
          - OFF for at least 200ms
        then:
          - homeassistant.event:
              event: esphome.wiatrolap_double_click
              data:
                input: "1"
          - logger.log: "Włącznik Wiatrołap: Dwuklik"
      - timing:
          - ON for at most 600ms
          - OFF for at least 351ms
        then:
          - light.toggle: light_wiatrolap
          - logger.log: "Wlacznik Wiatrołap: Pojedynczy klik"

  - platform: gpio
    name: "Włącznik Salon"
    pin:
      pcf8574: pcf8574_inputs_1_16
      number: 1
      inverted: true
    filters:
      - delayed_on: 10ms
    on_press:
      then:
        - lambda: 'id(click_counts) = 0;'
    on_multi_click:
      - timing:
          - ON for at most 600ms
          - OFF for at most 600ms
          - ON for at most 600ms
          - OFF for at least 200ms
        then:
          - homeassistant.event:
              event: esphome.salon_double_click
          - logger.log: "Włącznik Salon: Dwuklik"
      - timing:
          - ON for at most 600ms
          - OFF for at least 351ms
        then:
          - light.toggle: light_salon
          - logger.log: "Wlacznik Salon: Pojedynczy klik"

 

# Sekcja definiująca logiczne encje świateł
light:
  - platform: binary
    name: "Wiatrołap"
    id: light_wiatrolap
    output: output_wiatrolap
  - platform: binary
    name: "Salon"
    id: light_salon
    output: output_salon

#normal version for RF receiver - not working
#remote_receiver:
#  pin:
#    number: GPIO40
#    inverted: true
#  dump:
#    - rc_switch
#  tolerance: 50%
#  filter: 250us
#  idle: 4ms
#  buffer_size: 2kb

#  on_rc_switch:
#    then:
#     - logger.log:
#         format: "RC Switch received. Code: %u"
#         args: [ 'x.code' ]
#    - lambda: |-
#        id(rf_code_display) = "RC: " + to_string(x.code);
#    - homeassistant.event:
#         event: esphome.f24_rf_received
#         data:
#          code: !lambda 'return x.code;'

# Minimal version for testing - not working
remote_receiver:
  pin:
    number: GPIO40
    inverted: true
  dump: rc_switch
 
button:
  - platform: restart
    name: "Kincony F24 Restart"

font:
  - file: "gfonts://Roboto"
    id: roboto_12
    size: 12
  - file: "gfonts://Roboto"
    id: roboto_10
    size: 10

display:
  - platform: ssd1306_i2c
    id: oled_display
    model: "SSD1306 128x64"
    address: 0x3C
    i2c_id: bus_a
    update_interval: 2s
    pages:
      - id: page1
        lambda: |-
          it.strftime(0, 0, id(roboto_10), "%H:%M:%S", id(homeassistant_time).now());
          it.print(0, 12, id(roboto_12), id(current_ip_address).c_str());
          it.print(0, 28, id(roboto_12), id(ha_status_text).c_str());
          if (!id(rf_code_display).empty()) {
            it.print(0, 44, id(roboto_12), id(rf_code_display).c_str());
          }
          it.horizontal_line(0, 57, 128);
          it.printf(0, 58, id(roboto_10), "F24 Controller");;
         
time:
  - platform: homeassistant
    id: homeassistant_time
    on_time:
      - seconds: 0
        minutes: 0
        then:
          - logger.log: "Synchronizing time with Home Assistant."

interval:
  - interval: 5s
    then:
      - lambda: |-
          if (id(ethernet_interface).is_connected()) {
            id(current_ip_address) = id(ethernet_interface).get_ip_addresses()[0].str();
            if (id(f24_status_ha).state) {
               id(ha_status_text) = "ETH HA OK";
            } else {
               id(ha_status_text) = "ETH OK";
            }
          } else if (id(wifi_ap_active).state) {
            id(current_ip_address) = "AP: 192.168.4.1";
            id(ha_status_text) = "AP Mode";
          } else {
            id(current_ip_address) = "No Network";
            id(ha_status_text) = "Offline";
          }
 

sensor:
  - platform: adc
    pin: GPIO5
    name: "F24 A1 Voltage"
    update_interval: 60s
    attenuation: 12db
  - platform: adc
    pin: GPIO7
    name: "F24 A2 Voltage"
    update_interval: 60s
    attenuation: 12db
  - platform: adc
    pin: GPIO6
    name: "F24 A3 Current"
    update_interval: 60s
    unit_of_measurement: mA
    attenuation: 12db
    filters:
      - multiply: 6.66666666
  - platform: adc
    pin: GPIO4
    name: "F24 A4 Current"
    update_interval: 60s
    unit_of_measurement: mA
    attenuation: 12db
    filters:
      - multiply: 6.66666666

My questions:
  1. Is the 433MHz receiver really connected to native GPIO40 of the ESP32?
  2. Is this GPIO compatible with the RMT hardware required by remote_receiver in ESPHome?
  3. Could the RF receiver be connected via an I²C expander (like PCF8574), or is it mapped internally in another way?

Thanks for your support!
Reply
#2
Code:
remote_receiver:
  pin: 40
  rmt_channel: 4 
  dump: rc_switch

if you use ESP32-S3, you should add "rmt_channel: 4"
Reply
#3
Thank you very much for your assistance.
I have set up a minimal configuration and added rmt_channel: 4 as you suggested. Now the logs no longer show any errors related to the RMT driver.
I also set dump: all, and idle: 30ms because without it the logs were flooded with Pronto code messages.

Code:
remote_receiver:
  pin:
    number: GPIO40
    inverted: true
  dump: all
  rmt_channel: 4
  idle: 30ms


Unfortunately, no signals are being received. I have tried multiple times with several different remotes, but still nothing.
I also changed the log level to DEBUG to capture all details.
Reply
#4
why not use KCS v3 firmware, it's very easy to use RF function.
Reply


Forum Jump:


Users browsing this thread:
1 Guest(s)