ESP01S怎么玩?如何花10块钱开心玩一个星期?
1204 字
6 分钟
注意

在进行本项目之前,确保你对强电和弱电有基本的了解。如果你不确定自己对这些知识的掌握程度,请务必提前学习一下基础电学知识。错误的操作可能导致电路短路、电气火灾,甚至可能对人身安全造成威胁。

  • 强电:通常指的是交流电(AC)或高压电,用于大功率的设备(如家庭照明、家用电器)。
  • 弱电:通常指低压电(如直流电DC,5V、12V等),广泛用于控制模块、传感器和小型设备等。

重要提醒:

  • 在接线时一定要断开电源,确保没有电流通过设备。
  • 如果你不确定如何接线,请咨询相关经验人士或查阅安全手册。
  • 跟着本教程操作,没有任何危险!我会尽量简化步骤,并详细说明每一部分,确保你安全完成这个项目。

介绍:#

此项目不仅可以让你学会使用esp01s控制家里的灯具,还可以让你学会如何将他们接入Home Assistant实现统一管理。

原理是当我们给esp01s刷上固件,它就可以自动连接家里的WiFi,然后通过家里的内网IP对模块进行控制,实现对设备的远程控制。

所需材料:#

  • ESP-01S模块 必须 各个电商渠道都有,买带继电器的那种。
  • 电烙铁 必须 除非不需要物理开关,建议备用。
  • 供电 必须 输出为5V1A电源,用于模块供电。手机充电器也行,注意看充电器贴纸说明。
  • 串口烧录工具 必须 CH340C仅作推荐
  • 5v LED发光二极管 可选 用于项目测试。
  • 杜邦线 可选 没用无所谓,随便拆一个报废的充电器线也行。

相关图片

webp

制作过程:#

  • 给ESP01S刷入固件,将模块与串口下载工具连接。用杜邦线短接GPIO0 和 GND,让 ESP-01S 进入烧录模式。固件编译工具esphome,可使用docker或者使用Home Assistant os版本在加载项商店安装即可。安装好后创建一个yml文件。填入固件代码(文章尾部)并编译代码。

  • 固件刷入工具下载The GitHub nodemcu 将固件打开插入烧录器选择编译好的bin文件烧录即可。

  • 将ESP-01S与继电器模块连接,注意看插口旁边的箭头方向,按照下图接线。

  • 刷好固件后esp01s与继电器模块连接后,通电WiFi会自动连接,如果路由器后台有地址,就能进入内网控制页面。安装有Home Assistant的话一般可以自动识别esphome设备,简单按要求接入就行。当然Mqtt也可以。

实现功能:#

  • 通过内网ip可控制开关。
  • 通过esphome可以控制开关,接入Home Assistant。
  • 加了物理开关,物理开关引脚GPIO2。

完善:#

  • 当你点亮灯的时候你欣喜若狂,但是发现同此通电都会抖动。根据查找资料,发现网上有很多大佬给出了解决办法,那就是用GPIO3(RX引脚)控制继电器,就不会抖动了,关于如何改,请自行在网上查找。

  • 如需接物理开关需要在GPIO2和GND之间接物理开关。即可实现WiFi开物理关。物理开,WiFi关。总之WiFi与物理开关是同步的。

注意

强烈建议使用弱点测试,如果已经测试成功,那么请务必注意!要对家里的220v家用电进行改装控制,请务必断电操作!请务必断电操作!请务必断电操作!尤其是模块供电设备、控制火线部分COM、NO口。

esphome配置文件:#


esphome:
  name: esp-v1  # 简化设备名称
  friendly_name: ESP01-v1  # 简化友好名称
  platform: ESP8266
  board: esp01_1m
  
substitutions:
  device_name: v1
  device_sensor: v0.01
  device_ip: 192.168.1.211  #esphome控制地址
  gateway_ip: 192.168.1.1  #网关


#如果需要开启请去掉注释

# mqtt:
#   broker: "10.10.10.3"
#   port: 1883
#   username: "123"
#   password: "123"
#   discovery: true
#   discovery_prefix: homeassistant
#   birth_message:
#     topic: 'homeassistant/status' # 状态主题
#     payload: "online"
#   will_message:
#     topic: 'homeassistant/status'  # 状态主题
#     payload: "offline"

logger:
  level: INFO  # 调试时保留详细日志 VERY_VERBOSE WARN ERROR

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
  manual_ip:
    static_ip: ${device_ip}  # 每个设备唯一
    gateway: ${gateway_ip} 
    subnet: 255.255.255.0
    dns1: 114.114.114.114
    dns2: 8.8.4.4
  fast_connect: true
  reboot_timeout: 15min
  ap:
    ssid: "ESPHome"
    password: "esphome123"

web_server:
  port: 80

switch:
  - platform: gpio
    name: "开关"
    pin: GPIO0  
    id: relay_${device_name}
    inverted: true  # 反转逻辑
    restore_mode: RESTORE_DEFAULT_OFF

binary_sensor:
  - platform: gpio
    pin:
      number: GPIO2
      mode: INPUT_PULLUP
    name: "物理开关"
    id: physical_relay_${device_name}
    filters:
      - delayed_on: 50ms
      - delayed_off: 50ms
      - invert
    on_press:
      - delay: 10ms
      - switch.toggle: relay_${device_name}
    on_release:
      - delay: 10ms
      - switch.toggle: relay_${device_name}

api:
  encryption:
    key: "IbWYFDrgJZj8n6narPhNHoWb0efQMbtFoxmZVEHm+Hm="
  reboot_timeout: 15min

ota:
  - platform: esphome
    password: "123"

text_sensor:
  - platform: template
    name: "固件-${device_sensor}"
    lambda: |-
      return std::string(ESPHOME_VERSION);