LINUX.ORG.RU

История изменений

Исправление futurama, (текущая версия) :

esphome удобная штука, она хоть и заточена для работы homeassistant, но можно и без него и без wifi

Не знаю о каком ide говорил товарищ выше, но это консольная вещь основанная на platformio

vim myesp1.yaml

esphome compile myesp1.yaml

esphome upload myesp1.yaml

Когда-то делал цифровое упр. блоком питания. Измерение через ina226, display 16x2, rotary encoder, 2 ЦАП – установка напряжения и тока.

substitutions:
  devicename: power-supply

esphome:
  name: $devicename
  platform: ESP32
  board: esp-wrover-kit
  on_boot:
     priority: -100
     then:
        - lambda: |-
              id(volt_output).set_level((float)(id(volt_set_int)/255.0));
              id(curr_output).set_level((float)(id(curr_set_int)/255.0));

globals:
   - id: volt_set_int
     type: uint8_t
     restore_value: yes
     initial_value: '49'
   - id: curr_set_int
     type: uint8_t
     restore_value: yes
     initial_value: '128'
   - id: mode_int
     type: uint8_t
     restore_value: no
     initial_value: '0' # 0 normal; 1 set U; 2 set I



logger:
  level: INFO
#  level: DEBUG

display:
  - platform: lcd_gpio
    dimensions: 16x2
    data_pins:
      - 27
      - 14
      - 32
      - 33
    enable_pin: 12
    rs_pin: 13
    update_interval: 1s
    lambda: |-
      if (id(mode_int)) {
          it.printf(0, 0, "U:%03d", id(volt_set_int));
          it.printf(0, 1, "I=%03d", id(curr_set_int));
       } else {
          it.printf(0, 0, "U=%03d", id(volt_set_int));
          it.printf(0, 1, "I:%03d", id(curr_set_int));
       }
      it.printf(8, 0, "U:%06.3f", id(ina226_bus_voltage).state - id(ina226_shunt_voltage).state);
      it.printf(8, 1, "I:%06.3f", id(ina226_current).state);


sensor:
  - platform: rotary_encoder
    id: "rotary_enc"
    pin_a: 19
    pin_b: 18
    on_clockwise:
       then:
         - lambda: |-
                if (id(mode_int)) {
                    if (id(curr_set_int)<255) id(curr_set_int)+=1;
                    id(curr_output).set_level((float)(id(curr_set_int)/255.0));
                } else {
                    if (id(volt_set_int)<255) id(volt_set_int)+=1;
                    id(volt_output).set_level((float)(id(volt_set_int)/255.0));
                }
    on_anticlockwise:
       then:
         - lambda: |-
                if (id(mode_int)) {
                    if (id(curr_set_int)>0) id(curr_set_int)-=1;
                    id(curr_output).set_level((float)(id(curr_set_int)/255.0));
                } else {
                    if (id(volt_set_int)>0) id(volt_set_int)-=1;
                    id(volt_output).set_level((float)(id(volt_set_int)/255.0));
                }
  - platform: ina226
    address: 0x40
    shunt_resistance: 0.025 ohm
    #shunt_resistance: 0.029 ohm
    update_interval: 1s
    current:
      id: "ina226_current"
    bus_voltage:
      id: "ina226_bus_voltage"
    shunt_voltage:
      id: "ina226_shunt_voltage"

binary_sensor:
  - platform: gpio
    pin:
      number: 5
      mode:
        input: true
        pullup: true
      inverted: true
    id: "rotary_switch"
    on_click:
      min_length: 50ms
      max_length: 350ms
      then:
        - globals.set:
            id: mode_int
            value: !lambda 'if (id(mode_int) == 0) return 1; else return 0;'

output:
  - platform: esp32_dac
    pin: 25
    id: volt_output
  - platform: esp32_dac
    pin: 26
    id: curr_output

i2c:
  sda: 21
  scl: 22
  scan: true
  id: bus_a

Исправление futurama, :

esphome удобная штука, она хоть и заточена для работы homeassistant, но можно и без него и без wifi

Не знаю о каком ide говорил товарищ выше, но это консольная вещь основанная на platformio

vim myesp1.yaml

esphome compile myesp1.yaml

esphome upload myesp1.yaml

substitutions:
  devicename: power-supply

esphome:
  name: $devicename
  platform: ESP32
  board: esp-wrover-kit
  on_boot:
     priority: -100
     then:
        - lambda: |-
              id(volt_output).set_level((float)(id(volt_set_int)/255.0));
              id(curr_output).set_level((float)(id(curr_set_int)/255.0));

globals:
   - id: volt_set_int
     type: uint8_t
     restore_value: yes
     initial_value: '49'
   - id: curr_set_int
     type: uint8_t
     restore_value: yes
     initial_value: '128'
   - id: mode_int
     type: uint8_t
     restore_value: no
     initial_value: '0' # 0 normal; 1 set U; 2 set I



logger:
  level: INFO
#  level: DEBUG

display:
  - platform: lcd_gpio
    dimensions: 16x2
    data_pins:
      - 27
      - 14
      - 32
      - 33
    enable_pin: 12
    rs_pin: 13
    update_interval: 1s
    lambda: |-
      if (id(mode_int)) {
          it.printf(0, 0, "U:%03d", id(volt_set_int));
          it.printf(0, 1, "I=%03d", id(curr_set_int));
       } else {
          it.printf(0, 0, "U=%03d", id(volt_set_int));
          it.printf(0, 1, "I:%03d", id(curr_set_int));
       }
      it.printf(8, 0, "U:%06.3f", id(ina226_bus_voltage).state - id(ina226_shunt_voltage).state);
      it.printf(8, 1, "I:%06.3f", id(ina226_current).state);


sensor:
  - platform: rotary_encoder
    id: "rotary_enc"
    pin_a: 19
    pin_b: 18
    on_clockwise:
       then:
         - lambda: |-
                if (id(mode_int)) {
                    if (id(curr_set_int)<255) id(curr_set_int)+=1;
                    id(curr_output).set_level((float)(id(curr_set_int)/255.0));
                } else {
                    if (id(volt_set_int)<255) id(volt_set_int)+=1;
                    id(volt_output).set_level((float)(id(volt_set_int)/255.0));
                }
    on_anticlockwise:
       then:
         - lambda: |-
                if (id(mode_int)) {
                    if (id(curr_set_int)>0) id(curr_set_int)-=1;
                    id(curr_output).set_level((float)(id(curr_set_int)/255.0));
                } else {
                    if (id(volt_set_int)>0) id(volt_set_int)-=1;
                    id(volt_output).set_level((float)(id(volt_set_int)/255.0));
                }
  - platform: ina226
    address: 0x40
    shunt_resistance: 0.025 ohm
    #shunt_resistance: 0.029 ohm
    update_interval: 1s
    current:
      id: "ina226_current"
    bus_voltage:
      id: "ina226_bus_voltage"
    shunt_voltage:
      id: "ina226_shunt_voltage"

binary_sensor:
  - platform: gpio
    pin:
      number: 5
      mode:
        input: true
        pullup: true
      inverted: true
    id: "rotary_switch"
    on_click:
      min_length: 50ms
      max_length: 350ms
      then:
        - globals.set:
            id: mode_int
            value: !lambda 'if (id(mode_int) == 0) return 1; else return 0;'

output:
  - platform: esp32_dac
    pin: 25
    id: volt_output
  - platform: esp32_dac
    pin: 26
    id: curr_output

i2c:
  sda: 21
  scl: 22
  scan: true
  id: bus_a

Исходная версия futurama, :

esphome удобная штука, она хоть и заточена для работы homeassistant, но можно и без него и без wifi

Не знаю о каком ide говорил товарищ выше, но это консольная вещь основанная на platformio

vim myesp1.yaml

esphome compile myesp1.yaml

esphome upload myesp1.yaml