本站改版新增arduino频道
#include <WiFi.h> #include <WiFiUdp.h> // WiFi 网络配置 const char* ssid = "你的WiFi名称"; // WiFi SSID const char* password = "你的WiFi密码"; // WiFi 密码 // 广播地址和端口 const char* broadcastIP = "255.255.255.255"; // 广播地址 const int port = 9; // WOL 默认端口 WiFiUDP udp; void setup() { Serial.begin(115200); // 连接到 WiFi Serial.println("正在连接到 WiFi..."); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.print("."); } Serial.println("\nWiFi 已连接"); Serial.print("IP 地址: "); Serial.println(WiFi.localIP()); // 调用封装的 WOL 函数 String macAddress = "C8-4D-44-23-30-20"; // 替换为目标电脑的 MAC 地址 sendWOL(macAddress); } void loop() { // 空循环 } // 函数:发送 WOL 魔术包 void sendWOL(String macAddress) { byte mac[6]; // 存储解析后的 MAC 地址 // 解析 MAC 地址字符串 if (!parseMacAddress(macAddress, mac)) { Serial.println("MAC 地址解析失败"); return; } byte magicPacket[102]; // 魔术包大小为 102 字节 // 前 6 字节填充为 0xFF for (int i = 0; i < 6; i++) { magicPacket[i] = 0xFF; } // 接下来 16 次重复目标 MAC 地址 for (int i = 1; i <= 16; i++) { for (int j = 0; j < 6; j++) { magicPacket[i * 6 + j] = mac[j]; } } // 开始广播魔术包 udp.beginPacket(broadcastIP, port); udp.write(magicPacket, sizeof(magicPacket)); udp.endPacket(); Serial.println("WOL 魔术包已发送"); } // 函数:解析 MAC 地址字符串 bool parseMacAddress(String macAddress, byte* mac) { if (macAddress.length() != 17) { return false; // MAC 地址长度不正确 } for (int i = 0; i < 6; i++) { // 提取每个字节的字符串 String byteString = macAddress.substring(i * 3, i * 3 + 2); mac[i] = (byte) strtol(byteString.c_str(), NULL, 16); // 转换为十六进制字节 } return true; }
Copyright © 2014 ESP56.com All Rights Reserved
晋ICP备14006235号-22 晋公网安备14108102001165号
执行时间: 0.0096220970153809 seconds