Maker and IoT Ideas
Published © SHL

Build your own ESP8266 based IoT Controller

Build a custom ESP12-E based (ESP8266) IoT controller, with a custom-designed PCB.

IntermediateFull instructions provided847
Build your own ESP8266 based IoT Controller

Things used in this project

Hardware components

PCBWay Custom PCB
PCBWay Custom PCB
×1
PCB WAY Shared project
×1

Software apps and online services

Home Assistant
Home Assistant
EspHome

Hand tools and fabrication machines

Soldering iron (generic)
Soldering iron (generic)
Generic SMD Rework Station

Story

Read more

Schematics

Relay Driver Schematic

The Relay Driver schematic in .png format

IO Expander

IO Exander schematic in .png format

Usb to Serial Schematic

USB to Serial Schematic in .png format

MCU and Power Supply

Code

The initial ESPHome code

YAML
This is the initial ESPHome code, as used on the prototype.
esphome:
  name: iot-con-prototype
  platform: ESP8266
  board: nodemcuv2

# Enable logging
logger:

# Enable Home Assistant API
api:

ota:
  password: "3f132fc270315361e4d2393a50c2bac5"

wifi:
  ssid: "<your ssid here>"
  password: "<your password here>"

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Iot-Con-Prototype"
    password: "4uSytyPTx1TO"

captive_portal:
#DO NOT COPY ANYTHING ABOVE THIS LINE -------- 
i2c:
  sda: GPIO4
  scl: GPIO5
  scan: true
  id: i2c_bus_a
  
pcf8574:
  - id: 'pcf8574_hub'
    address: 0x22
    pcf8575: false


output:
 - platform: gpio
   id: relay_1
   pin: 
      pcf8574: pcf8574_hub
      number: 0
      mode: OUTPUT
      inverted: true
 - platform: gpio
   id: relay_2
   pin: 
      pcf8574: pcf8574_hub
      number: 1
      mode: OUTPUT
      inverted: true
 - platform: gpio
   id: led_status_1
   pin: 
      pcf8574: pcf8574_hub
      number: 2
      mode: OUTPUT
      inverted: true
 - platform: gpio
   id: led_status_2
   pin: 
      pcf8574: pcf8574_hub
      number: 3
      mode: OUTPUT
      inverted: true

binary_sensor:
  -  platform: gpio
     id: push_button_1
     name: 'Relay1 Pushbutton'
     device_class: ''
     pin:
        pcf8574:  pcf8574_hub
        number: 4
        mode: INPUT
        inverted: true
     on_press:
      then:
        - switch.toggle: switch_relay1
     filters:
       -  delayed_on_off: 50ms
       
  -  platform: gpio
     id: push_button_2
     name: 'Relay2 Pushbutton'
     device_class: ''
     pin:
        pcf8574:  pcf8574_hub
        number: 5
        mode: INPUT
        inverted: true
     on_press:
      #min_length: 50ms
      #max_length: 500ms
      then:
        - switch.toggle: switch_relay2
     filters:
       -  delayed_on_off: 50ms    
switch:
  - platform: output 
    id: switch_relay1
    name: "Relay No. 1 (#0)"
    output: relay_1
    on_turn_on:
    - output.turn_on: led_status_1
    on_turn_off:
    - output.turn_off: led_status_1
  - platform: output 
    id: switch_relay2
    name: "Relay No. 2 (#1)"
    output: relay_2
    on_turn_on:
    - output.turn_on: led_status_2
    on_turn_off:
    - output.turn_off: led_status_2

Credits

Maker and IoT Ideas
97 projects • 26 followers
I design custom PCB solutions, usually with an IoT or Automation twist, to solve problems in my daily life. Sometimes also for other people.

Comments