注意在进行本项目之前,确保你对强电和弱电有基本的了解。如果你不确定自己对这些知识的掌握程度,请务必提前学习一下基础电学知识。错误的操作可能导致电路短路、电气火灾,甚至可能对人身安全造成威胁。
- 强电:通常指的是交流电(AC)或高压电,用于大功率的设备(如家庭照明、家用电器)。
- 弱电:通常指低压电(如直流电DC,5V、12V等),广泛用于控制模块、传感器和小型设备等。
重要提醒:
- 在接线时一定要断开电源,确保没有电流通过设备。
- 如果你不确定如何接线,请咨询相关经验人士或查阅安全手册。
- 跟着本教程操作,没有任何危险!我会尽量简化步骤,并详细说明每一部分,确保你安全完成这个项目。
介绍:
此项目不仅可以让你学会使用esp01s控制家里的灯具,还可以让你学会如何将他们接入Home Assistant实现统一管理。
原理是当我们给esp01s刷上固件,它就可以自动连接家里的WiFi,然后通过家里的内网IP对模块进行控制,实现对设备的远程控制。
所需材料:
- ESP-01S模块 必须 各个电商渠道都有,买带继电器的那种。
- 电烙铁 必须 除非不需要物理开关,建议备用。
- 供电 必须 输出为5V1A电源,用于模块供电。手机充电器也行,注意看充电器贴纸说明。
- 串口烧录工具 必须 CH340C仅作推荐
- 5v LED发光二极管 可选 用于项目测试。
- 杜邦线 可选 没用无所谓,随便拆一个报废的充电器线也行。
相关图片
制作过程:
给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);