Menu

QuinLED-An-Penta DIY ESPhome Example configuration

Back to QuinLED-An-Penta-DIY index page

The QuinLED-An-Penta board is fully compatible with ESPhome. With the 5 channels available, SPI OLED header, 3 switch inputs, I2C temperature sensor and screw terminals there is a lot going on and that can be configured. Below will be some example configurations of how I use the board, please use these as a basis to develop your own configuration!

Index

[table]

WiFi, 5x White LED strips, 3x button input, I2C onboard temperature sensor, SPI OLED connected
Ethernet, RGBCCT LED strip, 3x button input, I2C onboard temperature sensor

 

Configurations

WiFi, 5x White LED strips, 3x button input, I2C onboard temperature sensor, SPI OLED connected

substitutions:
  esphome_name: test_anpenta

esphome:
  name: ${esphome_name}
  platform: ESP32
  board: mhetesp32devkit
  
wifi:
  ssid: !secret esphome_wifi_ssid
  password: !secret esphome_wifi_pass
  
#Disable logging/UART
logger:
#  level: NONE
  baud_rate: 0

api:
  reboot_timeout: 60min
  password: !secret esphome_api_pass

ota:
  password: !secret esphome_ota_pass

web_server:
  port: 80
  
time:
  - platform: homeassistant
    id: homeassistant_time

i2c:
  sda: 1
  scl: 3
  scan: true

spi:
  clk_pin: GPIO15
  mosi_pin: GPIO16

switch:
  - platform: restart
    name: ${esphome_name}-restart
    id: restart_switch
    
binary_sensor:
  - platform: gpio
    pin: 34
    id: pin_34
    filters:
      - invert:
#    on_press:
#    - light.toggle:
#        id: LED1

  - platform: gpio
    pin: 35
    id: pin_35
    filters:
      - invert:
#    on_press:
#    - light.toggle:
#        id: LED2
      
  - platform: gpio
    pin: 39
    id: pin_39
    filters:
      - invert:
#    on_press:
#    - light.toggle:
#        id: LED3
        
output:
  - platform: ledc
    pin: 14
    frequency: 20000Hz
    id: LED_channel_1

  - platform: ledc
    pin: 13
    frequency: 20000Hz
    id: LED_channel_2

  - platform: ledc
    pin: 12
    frequency: 20000Hz
    id: LED_channel_3

  - platform: ledc
    pin: 4
    frequency: 20000Hz
    id: LED_channel_4

  - platform: ledc
    pin: 2
    frequency: 20000Hz
    id: LED_channel_5


light:
  - platform: monochromatic
    name: "${esphome_name}-1"
    gamma_correct: 2.0
    default_transition_length: 3s
    id: LED1
    output: LED_channel_1

  - platform: monochromatic
    name: "${esphome_name}-2"
    gamma_correct: 2.0
    default_transition_length: 3s
    id: LED2
    output: LED_channel_2

  - platform: monochromatic
    name: "${esphome_name}-3"
    gamma_correct: 2.0
    default_transition_length: 3s
    id: LED3
    output: LED_channel_3

  - platform: monochromatic
    name: "${esphome_name}-4"
    gamma_correct: 2.0
    default_transition_length: 3s
    id: LED4
    output: LED_channel_4
    
  - platform: monochromatic
    name: "${esphome_name}-5"
    gamma_correct: 2.0
    default_transition_length: 3s
    id: LED5
    output: LED_channel_5
    
sensor:
  - platform: sht3xd
    temperature:
      name: "${esphome_name}_Temperature"
      id: esptemp
    humidity:
      name: "${esphome_name}_Humidity"
    address: 0x44
    update_interval: 15s

  - platform: uptime
    name: "${esphome_name}_Uptime Sensor"
    
  - platform: wifi_signal
    name: "${esphome_name} WiFi Signal"
    update_interval: 60s


  - platform: template
    name: "LED1 readout"
    id: LED1_value
    internal: true
    update_interval: 10ms
    filters:
      delta: 0.8
    lambda: |-
      if (id(LED1).current_values.is_on()) {
        return (int(id(LED1).current_values.get_brightness() * 100));
      }
      else {
        return 0;
      }

  - platform: template
    name: "LED2 readout"
    id: LED2_value
    internal: true
    update_interval: 10ms
    filters:
      delta: 0.8
    lambda: |-
      if (id(LED2).current_values.is_on()) {
        return (int(id(LED2).current_values.get_brightness() * 100));
      }
      else {
        return 0;
      }
      
  - platform: template
    name: "LED3 readout"
    id: LED3_value
    internal: true
    update_interval: 10ms
    filters:
      delta: 0.8
    lambda: |-
      if (id(LED3).current_values.is_on()) {
        return (int(id(LED3).current_values.get_brightness() * 100));
      }
      else {
        return 0;
      }

  - platform: template
    name: "LED4 readout"
    id: LED4_value
    internal: true
    update_interval: 10ms
    filters:
      delta: 0.8
    lambda: |-
      if (id(LED4).current_values.is_on()) {
        return (int(id(LED4).current_values.get_brightness() * 100));
      }
      else {
        return 0;
      }    

  - platform: template
    name: "LED5 readout"
    id: LED5_value
    internal: true
    update_interval: 10ms
    filters:
      delta: 0.8
    lambda: |-
      if (id(LED5).current_values.is_on()) {
        return (int(id(LED5).current_values.get_brightness() * 100));
      }
      else {
        return 0;
      }     
      
text_sensor:
  - platform: wifi_info
    ip_address:
      name: ESP IP Address
      id: espip
    ssid:
      name: ESP Connected SSID
      id: espssid
    mac_address:
      name: ESP Mac Wifi Address
      id: espmac

font:
  - file: "Roboto-Regular.ttf"
    id: my_font
    size: 9

globals:
  - id: display_page
    type: int
    restore_value: no
    initial_value: '0' # On first boot, value=0 initiates display.turn_on() command. Can't run as on_boot command
    
interval:
  - interval: 60s
    then:
      - display.page.show_next: my_display
      - delay: 6s
      - display.page.show_next: my_display

display:
  - platform: ssd1306_spi
    model: "SSD1306 128x64"
    rotation: 180
    cs_pin: 27
    dc_pin: 32
    reset_pin: 33
    id: my_display
    update_interval : 10ms
    pages:
      - id: "page1"
        lambda: |-
         it.printf(0, 0, id(my_font), TextAlign::TOP_LEFT, "${esphome_name}");
         it.strftime(128, 0, id(my_font), TextAlign::TOP_RIGHT, "%H:%M:%S", id(homeassistant_time).now());
         it.line(0, 12, 128, 12);
           
         it.rectangle(0, 16, 80, 8);
         it.rectangle(0, 26, 80, 8);
         it.rectangle(0, 36, 80, 8);
         it.rectangle(0, 46, 80, 8);
         it.rectangle(0, 56, 80, 8);
         it.filled_rectangle(0, 16, id(LED1_value).state /100 * 80, 8);
         it.filled_rectangle(0, 26, id(LED2_value).state /100 * 80, 8);
         it.filled_rectangle(0, 36, id(LED3_value).state /100 * 80, 8);
         it.filled_rectangle(0, 46, id(LED4_value).state /100 * 80, 8);
         it.filled_rectangle(0, 56, id(LED5_value).state /100 * 80, 8);
             
         it.printf(128, 13, id(my_font), TextAlign::TOP_RIGHT, "L1 %3.0f %%", id(LED1_value).state);
         it.printf(128, 23, id(my_font), TextAlign::TOP_RIGHT, "L2 %3.0f %%", id(LED2_value).state);
         it.printf(128, 33, id(my_font), TextAlign::TOP_RIGHT, "L3 %3.0f %%", id(LED3_value).state);
         it.printf(128, 43, id(my_font), TextAlign::TOP_RIGHT, "L4 %3.0f %%", id(LED4_value).state);
         it.printf(128, 53, id(my_font), TextAlign::TOP_RIGHT, "L5 %3.0f %%", id(LED5_value).state);
         
      - id: "page2"
        lambda: |-
         it.printf(0, 0, id(my_font), TextAlign::TOP_LEFT, "${esphome_name}");
         it.strftime(128, 0, id(my_font), TextAlign::TOP_RIGHT, "%H:%M:%S", id(homeassistant_time).now());
         it.line(0, 12, 128, 12);
         it.printf(0, 23, id(my_font), TextAlign::TOP_LEFT, "SSID: %s", id(espssid).state.c_str());
         it.printf(0, 33, id(my_font), TextAlign::TOP_LEFT, "MAC: %s", id(espmac).state.c_str());
         it.printf(0, 43, id(my_font), TextAlign::TOP_LEFT, "IP: %s", id(espip).state.c_str());
         it.printf(0, 53, id(my_font), TextAlign::TOP_LEFT, "BoardT: %.1f°C", id(esptemp).state);

Ethernet, RGBCCT LED strip, 3x button input, I2C onboard temperature sensor

substitutions:
  esphome_name: test_anpentalan

esphome:
  name: ${esphome_name}
  platform: ESP32
  board: mhetesp32devkit
  
ethernet:
  type: LAN8720
  mdc_pin: GPIO23
  mdio_pin: GPIO18
  clk_mode: GPIO17_OUT
  phy_addr: 0
  power_pin: GPIO5

#Disable logging/UART
logger:
# level: NONE
  baud_rate: 0

api:
  reboot_timeout: 60min
  password: nohackinghere

ota:
  password: nohackinghere

web_server:
  port: 80
  
time:
  - platform: homeassistant
    id: homeassistant_time

i2c:
  sda: 1
  scl: 3
  #frequency: 1Mhz
  scan: true


switch:
  - platform: restart
    name: ${esphome_name}-restart
    id: restart_switch

binary_sensor:
  - platform: gpio
    pin: 34
    id: pin_34
#    on_press:
#    - light.toggle:
#        id: LED1

  - platform: gpio
    pin: 35
    id: pin_35
#    on_press:
#    - light.toggle:
#        id: LED2
        
  - platform: gpio
    pin: 39
    id: pin_39
#    on_press:
#    - light.toggle:
#        id: LED3
        
output:
  - platform: ledc
    pin: 14
    frequency: 20000Hz
    id: LED_channel_1

  - platform: ledc
    pin: 13
    frequency: 20000Hz
    id: LED_channel_2

  - platform: ledc
    pin: 12
    frequency: 20000Hz
    id: LED_channel_3

  - platform: ledc
    pin: 4
    frequency: 20000Hz
    id: LED_channel_4

  - platform: ledc
    pin: 2
    frequency: 20000Hz
    id: LED_channel_5


light:
  - platform: rgbww
    name: "RGBCCT strip"
    red: LED_channel_1
    green: LED_channel_2
    blue: LED_channel_3
    cold_white: LED_channel_4
    warm_white: LED_channel_5
    cold_white_color_temperature: 5500 K
    warm_white_color_temperature: 3200 K
    constant_brightness: true
    
sensor:
  - platform: sht3xd
    temperature:
      name: "${esphome_name}_Temperature"
    humidity:
      name: "${esphome_name}_Room Humidity"
    address: 0x44
    update_interval: 30s

  - platform: uptime
    name: "${esphome_name}_Uptime Sensor"