简 介: 文章摘要:本文介绍了基于ESP32的WiFi远程继电器开关设计。系统采用ESP32作为主控,通过12V-5V-3.3V电源转换电路供电,配合大功率继电器实现远程开关控制。电路采用单面PCB设计,经过两次改进后完成制作。焊接调试后,通过MicroPython编写控制程序,实现LED和继电器的周期性动作。网络功能部分实现了UDP通信协议,可通过发送"ON/OFF"指令控制继电器状态,并在路由器中为ESP32分配固定IP地址以方便管理。文章还提供了Python编写的PC端控制脚本,实现远程开关控制功能。

关键词 ESP32WiFi开关

WiFi开关控制

AD\Test\2025\July\RelayDelaySTC8G1K.SchDoc

 

01 WiFi 开关


一、设计背景

  近期需要对实验室中的一个电源开关进行控制, 由于它距离比较远,  下面设计一个通过WiFi控制的电源继电器模块。  这样便可以通过计算机方便控制这个远端的电源开关了。

GM00003624891_1920_1080.MP4|_-3

二、电路设计

AD\Test\2025\September\WiFISwitchESP32.SchDoc

  根据这两天前面的测试结果, 组装成开关控制电路。  控制芯片使用ESP32,  通过一个大功率继电器来控制外部开关。  使用 P2307将12V转换成5V,  然后再使用XC6206 转换成 3.3V, 为ESP32提供工作电源。  


  下面通过单面PCB,  铺设电路图, 可以在一分钟之内获得测试电路板,  第一块电路板存在瑕疵, 重新又制作了一块, 第二块制作的非常完美。
GM00008613088_1920_1080.MP4|_-8

三、焊接调试

  焊接电路, 使用水蒸气对电路板进行清晰。  提供电路板 12V的工作电源, 测量其中5V和3.3V的电压正常。  通过六芯弹簧夹子连接自制的下载电路模块,  可以下载测试程序, LED 以及 继电器可以周期的动作了。

GM00004616187_1920_1080.MP4|_-4

from machine import Pin
import time
LED     = Pin(21, Pin.OUT)
RELAY   = Pin(4,  Pin.OUT)
while True:
    LED.on()
    RELAY.on()
    time.sleep_ms(500)
    LED.off()
    RELAY.off()
    time.sleep_ms(500)

四、网络控制

  使用Python语言, 编写E SP32 联网功能,  当接收到 “ON” 字符串的时候, 打开继电器;  当接收到“OFF”字符串的时候, 关闭继电器。  这样, 通过网络便可以访问控制这个继电器了。
GM00004623612_1920_1080.MP4|_-4

from machine            import Pin
import machine,time,network,usocket

LED     = Pin(21, Pin.OUT)
RELAY   = Pin(4,  Pin.OUT)

LED.off()
RELAY.off()

wlan = network.WLAN(network.STA_IF)
wlan.active(False)
time.sleep_ms(500)

LED.on()
wlan.active(True)

time.sleep_ms(100)
wlan.scan()
wlan.connect('TENDA626A', 'gniqouhz')

while not wlan.isconnected():
    time.sleep_ms(100)

adstr = wlan.ifconfig()
print(adstr)

LED.off()

us = usocket.socket(usocket.AF_INET, usocket.SOCK_DGRAM)
sockaddr = usocket.getaddrinfo('0.0.0.0', 5678)[0][-1]
us.bind(sockaddr)

print(sockaddr)

while True:

    data,addr = us.recvfrom(1024)

    if len(data) > 0:
        print(data)
        print(addr)

        if data == b'on':
            RELAY.on()
            LED.on()
        elif data == b'off':
            RELAY.off()
            LED.off()

  在办公室无线网关配置中,   将这款ESP32的无线MAC地址 静态分配一个固定的 IP地址,  这样等这个ESP32重新联网的时候, 对应的IP地址是固定的。 由此可以方便WiFi控制命令的发送。

GM00003623700_1920_1080.MP4|_-3

#!/usr/local/bin/python
# -*- coding: gbk -*-
#============================================================
# RELAY.PY                     -- by Dr. ZhuoQing 2025-09-23
#
# Note:
#============================================================

from headm import *
import socket

#------------------------------------------------------------
UDP_HOST  = '192.168.0.123'
UDP_PORT  = 5678
UDP_BUFSIZE = 0x1000
relay = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
relay.setsockopt(socket.SOL_SOCKET, socket.SO_SNDBUF, UDP_BUFSIZE)
relay.settimeout(0.2)


def relaysend(data):
    ADDR = (UDP_HOST, UDP_PORT)
    if type(data) != str:
        data = str(data)
    data = bytes(data, 'gbk')
    relay.sendto(data, ADDR)

def relayrecv():
    try:
        data, ADDR = relay.recvfrom(UDP_BUFSIZE)
    except socket.timeout:
        printf('Meter time out.')
        data = ''
    if len(data) > 0:
        return data.decode('utf-8')
    else: return ''

def relayval():
    relaysend('MEMOS')
    splitstr = relayrecv().split(' ')
    data = []
    for val in splitstr:
        if len(val) > 0:
            data.append(eval(val))
    return data

#------------------------------------------------------------

if len(sys.argv) > 1:
    if sys.argv[1] == 'on':
        relaysend('on')
    else:
        relaysend('off')
else:
    relaysend('off')

#------------------------------------------------------------
'''
while True:
    relaysend('off')
    time.sleep(2)
    relaysend('on')
    time.sleep(2)

'''
#------------------------------------------------------------
printf("\a")

#------------------------------------------------------------
#        END OF FILE : RELAY.PY
#============================================================

 

  结 ※


  文设计了基于ESP32的开关控制电路。  后来在调试的时候, 发现了在原来设计中没有将GPIO0通过一个电阻接到高电平, 使得ESP32在启动的时候容易出现复位。  现在直接使用短路线将 GPIO0 连接到3.3V, ESP32启动联网正常了。

GM00003624769_1920_1080.MP4|_-3


■ 相关文献链接:

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐