prefixkit Ask an engineerAsk Support RU

ESPHome devices

Shelly Plus 1PM: ESPHome

Shelly Plus 1PM (relays, ESP32): GPIO pinout and a starter ESPHome config with relays, buttons, LED and power metering. Local Home Assistant control with no cloud.

Type
Relays
Chip
ESP32
Region standard
UK, US, EU

Pinout

PinFunction
GPIO0LED (Inverted), Shelly Plus Add-On: DATA (Output)
GPIO1Shelly Plus Add-On: DATA (Input)
GPIO3Shelly Plus Add-On: ANALOG IN
GPIO4Switch input
GPIO5BL0937 CF
GPIO18BL0937 CF1
GPIO19Shelly Plus Add-On: DIGITAL IN
GPIO23BL0937 SEL (Inverted)
GPIO25Button (Inverted, Pull-up)
GPIO26Relay
GPIO32NTC
GPIO33Relay supply voltage sensor

Find it in shops: AliExpress

Links open a search in the shop; some are affiliate links: buying through them costs you nothing extra and supports this site. We do not sell devices or get them from manufacturers.

Starter ESPHome config

Built from the pinout above. Keys and the Wi-Fi password come from secrets.yaml in ESPHome. Check the pins against your hardware revision before flashing: one model can ship with different boards.

substitutions:
  name: shelly-plus-1pm

esphome:
  name: ${name}
  friendly_name: "Shelly Plus 1PM"

esp32:
  board: esp32dev

logger:
api:
  encryption:
    key: !secret api_key
ota:
  - platform: esphome
    password: !secret ota_password
wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
  ap: {}
captive_portal:

switch:
  - platform: gpio
    pin: GPIO26
    id: relay1
    name: "Relay 1"  # Relay
    restore_mode: RESTORE_DEFAULT_OFF
  - platform: gpio
    pin: GPIO33
    id: relay2
    name: "Relay 2"  # Relay supply voltage sensor
    restore_mode: RESTORE_DEFAULT_OFF

binary_sensor:
  - platform: gpio
    pin:
      number: GPIO25
      mode: INPUT_PULLUP
      inverted: true
    name: "Button"  # Button (Inverted, Pull-up)
    on_press:
      - switch.toggle: relay1

status_led:
  pin:
    number: GPIO0
    inverted: true  # LED (Inverted), Shelly Plus Add-On: DATA (Output)

sensor:
  - platform: hlw8012
    model: BL0937
    sel_pin:
      number: GPIO23
      inverted: true
    cf_pin: GPIO5
    cf1_pin: GPIO18
    voltage:
      name: "Voltage"
    current:
      name: "Current"
    power:
      name: "Power"
    energy:
      name: "Energy"
    update_interval: 10s
    # calibrate voltage_divider and current_resistor against a known load

# Other pins from the pinout:
#   GPIO1: Shelly Plus Add-On: DATA (Input)
#   GPIO3: Shelly Plus Add-On: ANALOG IN
#   GPIO4: Switch input
#   GPIO19: Shelly Plus Add-On: DIGITAL IN
#   GPIO32: NTC

How to flash

  • Most devices are flashed over UART: a 3.3 V USB-TTL adapter to RX, TX, GND and 3V3, holding GPIO0 to ground at power-on (ESP8266/ESP32). Mains power disconnected.
  • Beken (BK72xx) and Realtek chips are flashed with ltchiptool, or with cloudcutter without opening the case if the firmware allows it.
  • Details and board photos: the device page in the ESPHome database.

A config from scratch: ESPHome generator. Which pins are safe: pinout.

Similar devices

Idea?