ESPHome - конфигурация JetHub E1-CPU

Конфигурация процессорного модуля JetHub E1-CPU (без материнской платы) для ESPHome.

Примечание

Конфигурация использует синтаксис ESPHome 2024.6.0 или более новых версий (секция ota с platform: esphome).

Конфигурация

В данной конфигурации реализованы:
  • Настройка Ethernet с автоматическим определением IP-адреса.

  • Интеграция с Home Assistant.

  • Настройка светодиодов STAT (красный и зеленый).

  • Настройка кнопки FN.

  • Настройка интерфейсов: I2C, UART, SPI, CAN.

Примечание

После загрузки контроллера и получения IP-адреса контроллер будет автоматически доступен в Home Assistant, работающем в этой же сети.

jethub_e1_cpu.yaml
  1esphome:
  2  name: e1-cpu-basic
  3  name_add_mac_suffix: true # This option adds MAC address to the end of the device name
  4
  5esp32:
  6  board: nodemcu-32s
  7  framework:
  8    type: esp-idf
  9
 10## WARNING: Disable WiFi and captive_portal if Ethernet enabled
 11#wifi:
 12#  ssid: "***"
 13#  password: "***"
 14#
 15#  # Enable fallback hotspot (captive portal) in case wifi connection fails
 16#  ap:
 17#    ssid: "JetHub E1 Fallback Hotspot"
 18#    password: "***"
 19#
 20#captive_portal:
 21
 22# Enable Ethernet
 23ethernet:
 24  type: LAN8720
 25  mdc_pin: GPIO23
 26  mdio_pin: GPIO18
 27  clk_mode: GPIO17_OUT
 28  phy_addr: 1
 29
 30# Enable logging
 31logger:
 32
 33# Enable Home Assistant API
 34api:
 35
 36# Enable OTA firmware update
 37ota:
 38  - platform: esphome
 39
 40# Enable I2C bus
 41i2c:
 42  sda: 5
 43  scl: 4
 44  frequency: 400kHz
 45  scan: true
 46  id: i2c1
 47
 48# Enable UART1, UART2
 49uart:
 50  - tx_pin: 33
 51    rx_pin: 34
 52    baud_rate: 115200
 53    id: uart_1
 54  - tx_pin: 2
 55    rx_pin: 39
 56    baud_rate: 115200
 57    id: uart_2
 58
 59# Enable SPI bus
 60spi:
 61  clk_pin: 14
 62  mosi_pin: 13
 63  miso_pin: 12
 64  id: spi_bus
 65
 66# Enable CAN bus
 67canbus:
 68  - platform: esp32_can
 69    id: can1
 70    tx_pin: 32
 71    rx_pin: 15
 72    can_id: 1
 73    bit_rate: 125KBPS
 74
 75# Enable I2C GPIO expanders
 76pcf8574:
 77  - id: cpu_gpio_exp
 78    address: 0x20
 79    pcf8575: true
 80
 81# Enable LEDs
 82switch:
 83  - platform: gpio
 84    name: "Red LED"
 85    id: red_led
 86    pin:
 87      pcf8574: cpu_gpio_exp
 88      number: 0
 89      mode: OUTPUT
 90      inverted: true
 91  - platform: gpio
 92    name: "Green LED"
 93    id: green_led
 94    pin:
 95      pcf8574: cpu_gpio_exp
 96      number: 1
 97      mode: OUTPUT
 98      inverted: true
 99
100# Enable button
101binary_sensor:
102  - platform: gpio
103    name: "FN button"
104    pin:
105      number: 0
106      inverted: true
107  - platform: gpio
108    name: "USER button"
109    pin:
110      pcf8574: cpu_gpio_exp
111      number: 2
112      inverted: true

Разъяснения

Базовые настройки

Задают имя контроллера и тип аппаратной платформы (плата и framework вынесены в отдельный блок esp32):

esphome:
  name: e1-cpu-basic
esp32:
  board: nodemcu-32s
  framework:
    type: esp-idf

Автоматический суффикс имени

Предупреждение

В одной сети не должно быть двух устройств с одинаковым именем.

Опция добавляет в имя устройства суффикс на основе MAC-адреса:

  name_add_mac_suffix: true # This option adds MAC address to the end of the device name

Сетевые настройки

Предупреждение

Из-за ограничений ESPHome Ethernet и Wi-Fi не могут работать одновременно.

Поэтому при задействовании порта Ethernet необходимо отключить в конфигурационном файле секции wifi и captive_portal.

Ethernet

# Enable Ethernet
ethernet:
  type: LAN8720
  mdc_pin: GPIO23
  mdio_pin: GPIO18
  clk_mode: GPIO17_OUT
  phy_addr: 1

Wi-Fi

Примечание

ssid и password необходимо заменить на свои.

wifi:
  ssid: "***"
  password: "***"

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "JetHub E1 Fallback Hotspot"
    password: "***"

Интеграция с Home Assistant

Для интеграции контроллера в систему Home Assistant достаточно включить в файле конфигурации секцию api:

# Enable Home Assistant API
api:

Порты UART

Два порта UART, подключены к разъему расширения:

# Enable UART1, UART2
uart:
  - tx_pin: 33
    rx_pin: 34
    baud_rate: 115200
    id: uart_1
  - tx_pin: 2
    rx_pin: 39
    baud_rate: 115200
    id: uart_2

Шина I2C

1# Enable I2C bus
2i2c:
3  sda: 5
4  scl: 4
5  frequency: 400kHz
6  scan: true
7  id: i2c1

К данной шине подключены:

  • Расширитель портов GPIO:

    # Enable I2C GPIO expanders
    pcf8574:
      - id: cpu_gpio_exp
        address: 0x20
        pcf8575: true
    
  • EEPROM:

    План

    Добавить описание

  • RTC:

    План

    Добавить описание

Шина SPI

Шина SPI подключена к разъему расширения:

# Enable SPI bus
spi:
  clk_pin: 14
  mosi_pin: 13
  miso_pin: 12
  id: spi_bus

Шина CAN

Предусмотрена возможность вывести шину CAN на разъем расширения, для этого рекомендуется использовать выводы 32 и 15 ESP32:

# Enable CAN bus
canbus:
  - platform: esp32_can
    id: can1
    tx_pin: 32
    rx_pin: 15
    can_id: 1
    bit_rate: 125KBPS

Расширитель портов GPIO

Примечание

Часть периферии подключена к расширителю портов GPIO, установленному на процессорной плате. Поэтому, предварительно должен быть настроен расширитель GPIO PCF8575 (адрес на шине I2C - 0x20).

# Enable I2C GPIO expanders
pcf8574:
  - id: cpu_gpio_exp
    address: 0x20
    pcf8575: true

Светодиоды

Для управления светодиодами используется инверсная логика:

# Enable LEDs
switch:
  - platform: gpio
    name: "Red LED"
    id: red_led
    pin:
      pcf8574: cpu_gpio_exp
      number: 0
      mode: OUTPUT
      inverted: true
  - platform: gpio
    name: "Green LED"
    id: green_led
    pin:
      pcf8574: cpu_gpio_exp
      number: 1
      mode: OUTPUT
      inverted: true

Примечание

При изменении состояния выходов, через некоторое время (~40 сек) ESPHome по-умолчанию автоматически сохраняет их состояние и после перезагрузки восстанавливает состояния выходов на сохраненные ранее.

Если данный функционал не нужен, то необходимо изменить эту функцию, задав состояние выхода при загрузке с помощью опции restore_mode, например:

switch:
  - platform: gpio
    ...
    restore_mode: ALWAYS_OFF
    ...

Кнопки

Кнопки FN (подключена к выводам ESP32) и USER (подключена через расширитель GPIO).

# Enable button
binary_sensor:
  - platform: gpio
    name: "FN button"
    pin:
      number: 0
      inverted: true
  - platform: gpio
    name: "USER button"
    pin:
      pcf8574: cpu_gpio_exp
      number: 2
      inverted: true

В следующем примере при нажатие кнопки FN будет приводить к включению/отключению зеленого светодиода:

binary_sensor:
  - platform: gpio
    name: "FN button"
    pin:
      number: 0
      inverted: true
    on_press:
      then:
        - switch.toggle: green_led