一、实现功能
通过米家APP或小爱同学即可唤醒电脑,不改电脑接线
二、物料准备
1.ESP32开发板
2.充电头+数据线(用于给ESP32供电)
3.米家智能插座(在米家APP里添加好插座,可将设备名称修改为“电脑”,方便用小爱同学语音控制)
三、下载ESP32代码
import socket
import struct
import network
# ESP32连接的WIFI信息
SSID = "你的2.4G的WIFI名称(与要唤醒电脑属于同一局域网)"
PASSWORD = "你的WIFI密码"
# 改成要唤醒电脑的 MAC 地址(大写,冒号分隔)
TARGET_MAC = "6F:5F:4F:3F:1F:1F"
# 广播地址和端口(改为你的路由器局域网的IP网段,最后一个保持为255,端口保持为9)
BROADCAST_IP = "192.168.31.255"
PORT = 9
def mac_to_bytes(mac):
"""
将 MAC 地址转换为字节格式
"""
return bytes.fromhex(mac.replace(":", ""))
def create_magic_packet(mac):
"""
创建 WoL 魔术包
"""
mac_bytes = mac_to_bytes(mac)
return b"\xFF" * 6 + mac_bytes * 16
def send_wake_on_lan(mac):
"""
通过 UDP 广播发送魔术包
"""
magic_packet = create_magic_packet(mac)
# 初始化网络(确保 ESP32 已连接到 WiFi)
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(SSID, PASSWORD)
while not wlan.isconnected():
pass
print('network config:', wlan.ifconfig())
if not wlan.isconnected():
print("WiFi 未连接")
return
# 创建 UDP 套接字
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
try:
sock.sendto(magic_packet, (BROADCAST_IP, PORT))
print(f"魔术包已发送到 {BROADCAST_IP}:{PORT}")
finally:
sock.close()
#主函数
if __name__ == "__main__":
send_wake_on_lan(TARGET_MAC)
四、电脑网口设置
设置插网线的网口启用网络唤醒(有些主板也可以在BIOS里改)
五、连接说明
ESP32开发板→数据线→充电头→插在米家智能插座上
六、创建自动化任务
在米家APP上创建一个智能插座的自动化任务用于打开电脑后自动关闭插座。
当以下情况发生:插座状态为开
且满足全部状态:插座状态为开
将设备调整到:延时30秒后、关闭插座
七、测试
1、在米家APP上打开智能插座,ESP32上电自动执行一次连接WiFi+广播发送唤醒魔术包过程,此时电脑收到唤醒包则会自动开机,30秒后插座自动关闭。
2、用小爱同学语言控制:“小爱同学,打开电脑”,效果同上。