diff --git a/intern/docker_esphome/templates/config/esphome_popcorn.yaml b/intern/docker_esphome/templates/config/esphome_popcorn.yaml index 2e1da231e6c819852e2ab2824a02e95f7a977036..465104cb7dec8959d357085e2413e80641348584 100644 --- a/intern/docker_esphome/templates/config/esphome_popcorn.yaml +++ b/intern/docker_esphome/templates/config/esphome_popcorn.yaml @@ -1,44 +1,168 @@ {% set devicename = "esphome_popcorn" %} {% include "/includes/ansible.inc.yaml" %} -{% include "/includes/board.d1_mini.inc.yaml" %} +{% include "/includes/board.esp32-doit-devkit-v1.inc.yaml" %} + + on_boot: + priority: 250 + then: + - climate.control: + id: pid_heater + mode: "OFF" {% include "/includes/common.inc.yaml" %} spi: - miso_pin: GPIO12 - clk_pin: GPIO14 + miso_pin: GPIO19 + mosi_pin: GPIO23 + clk_pin: GPIO18 climate: - platform: pid - id: pid_climate - name: "PID Climate Controller" + id: pid_heater + name: "PID Heater Controller" sensor: pot_sensor - default_target_temperature: 21°C - heat_output: heater + default_target_temperature: 264 + heat_output: pot_heater control_parameters: kp: 0.0 ki: 0.0 kd: 0.0 + visual: + min_temperature: 0 + max_temperature: 275 + temperature_step: 1 button: - platform: template - name: "PID Climate Autotune" + name: "PID Heater Autotune" on_press: - - climate.pid.autotune: pid_climate + - climate.pid.autotune: pid_heater sensor: - - platform: pid - name: "PID Climate Result" - type: RESULT - platform: max31855 name: "Pot Temperature" id: pot_sensor cs_pin: GPIO15 update_interval: 30s + - platform: pid + name: "PID Heater Result" + type: RESULT + - platform: pid + name: "PID PROPORTIONAL Result" + type: PROPORTIONAL + - platform: pid + name: "PID INTEGRAL Result" + type: INTEGRAL + - platform: pid + name: "PID DERIVATIVE Result" + type: DERIVATIVE + - platform: pid + name: "PID HEAT Result" + type: HEAT output: - platform: slow_pwm pin: GPIO0 - id: heater - period: 15s \ No newline at end of file + id: pot_heater + period: 15s + - platform: ledc + pin: GPIO4 + id: gpio_4_backlight_pwm + +binary_sensor: +- platform: gpio + pin: + number: GPIO32 + inverted: true + mode: + input: true + pullup: true + name: "Heat Button" + id: heat_button + on_release: + then: + - climate.control: + id: pid_heater + mode: "OFF" + on_press: + then: + - climate.control: + id: pid_heater + mode: HEAT + target_temperature: 264 + +font: + - file: "gfonts://Roboto" + id: temp + size: 115 + - file: "gfonts://Roboto" + id: text + size: 40 + +color: + - id: my_red + red: 100% + green: 0% + blue: 0% + - id: my_green + red: 0% + green: 100% + blue: 0% + - id: my_blue + red: 0% + green: 0% + blue: 100% + - id: my_yellow + red: 100% + green: 100% + blue: 0% + +display: + - platform: ili9341 + model: TFT 2.4 + cs_pin: GPIO5 + dc_pin: GPIO16 + reset_pin: GPIO17 + rotation: 90° + + lambda: |- + it.printf(160,120,id(temp),TextAlign::CENTER,"%.1f°C",id(pid_heater).current_temperature); + if ((id(pid_heater).action) == 0) { + it.printf(0,10,id(text),TextAlign::TOP_LEFT,"PID: OFF"); + } + else if ((id(pid_heater).action) == 4) { + it.printf(0,10,id(text),TextAlign::TOP_LEFT,"PID: IDLE"); + } + else { + it.printf(0,10,id(text),TextAlign::TOP_LEFT,"PID: ERROR"); + }; + it.printf(0,230,id(text),TextAlign::BOTTOM_LEFT,"Target: %.1f°C",id(pid_heater).target_temperature); + +time: + - platform: sntp + id: ntp_time + timezone: 'Europe/Berlin' + +light: + - platform: monochromatic + output: gpio_4_backlight_pwm + name: "ILI9341 Display Backlight" + id: back_light + restore_mode: ALWAYS_ON + +text_sensor: + - platform: template + name: "PID State" + id: pid_state + lambda: |- + if ((id(pid_heater).action) == 0) { + return {"OFF"}; + } + else if ((id(pid_heater).action) == 4) { + return {"IDLE"}; + } + else { + return {"NaN"}; + } + update_interval: 5s