Advertisement
arushear

WOL ESP Watchdog

Jul 29th, 2024
34
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.18 KB | None | 0 0
  1. Aby zrealizować watchdoga na urządzeniu z układem ESP, który po 5 minutach działania wysyła sygnał Wake-on-LAN (WoL), można wykorzystać ESP8266 lub ESP32. Oto kroki, które należy podjąć:
  2.  
  3. ### Wymagania sprzętowe i programowe:
  4. 1. **Moduł ESP8266 lub ESP32**
  5. 2. **Arduino IDE** (lub inny kompatybilny środowisko programistyczne)
  6. 3. **Biblioteka ESPAsyncTCP** (dla ESP32) lub **ESP8266WiFi** (dla ESP8266)
  7. 4. **Biblioteka WiFiUDP** (dla wysyłania pakietu WoL)
  8.  
  9. ### Krok po kroku:
  10.  
  11. #### 1. Konfiguracja Arduino IDE:
  12. - Zainstaluj Arduino IDE.
  13. - Dodaj wsparcie dla ESP8266 lub ESP32 w Arduino IDE (w ustawieniach menedżera płytki).
  14.  
  15. #### 2. Instalacja bibliotek:
  16. - Zainstaluj biblioteki **ESPAsyncTCP** (dla ESP32) lub **ESP8266WiFi** (dla ESP8266) oraz **WiFiUDP**.
  17.  
  18. #### 3. Skrypt:
  19. Poniżej znajduje się przykładowy skrypt, który uruchamia timer na 5 minut i po tym czasie wysyła pakiet Wake-on-LAN.
  20.  
  21. ```cpp
  22. #include <ESP8266WiFi.h> // dla ESP8266
  23. //#include <WiFi.h> // dla ESP32
  24. #include <WiFiUdp.h>
  25.  
  26. const char* ssid = "Twoja_SSID";
  27. const char* password = "Twoje_Haslo";
  28.  
  29. WiFiUDP UDP;
  30.  
  31. unsigned long previousMillis = 0; // Zmienna do przechowywania poprzedniego czasu
  32. const long interval = 300000; // Interwał 5 minut w milisekundach
  33.  
  34. // MAC address urządzenia docelowego
  35. byte mac[6] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
  36.  
  37. void setup() {
  38. Serial.begin(115200);
  39. WiFi.begin(ssid, password);
  40.  
  41. while (WiFi.status() != WL_CONNECTED) {
  42. delay(1000);
  43. Serial.println("Łączenie...");
  44. }
  45. Serial.println("Połączono z WiFi");
  46. }
  47.  
  48. void loop() {
  49. unsigned long currentMillis = millis();
  50. if (currentMillis - previousMillis >= interval) {
  51. previousMillis = currentMillis;
  52. sendWakeOnLan();
  53. }
  54. }
  55.  
  56. void sendWakeOnLan() {
  57. const int port = 9; // standardowy port WoL
  58. byte payload[102]; // Magic packet ma 102 bajty
  59.  
  60. // Pierwsze 6 bajtów ustawione na 0xFF
  61. for (int i = 0; i < 6; i++) {
  62. payload[i] = 0xFF;
  63. }
  64.  
  65. // Kolejne 16 razy MAC address
  66. for (int i = 1; i <= 16; i++) {
  67. for (int j = 0; j < 6; j++) {
  68. payload[i * 6 + j] = mac[j];
  69. }
  70. }
  71.  
  72. // Wysyłanie pakietu UDP
  73. UDP.beginPacket("255.255.255.255", port); // Adres broadcast
  74. UDP.write(payload, sizeof(payload));
  75. UDP.endPacket();
  76. Serial.println("Wysłano sygnał Wake-on-LAN");
  77. }
  78. ```
  79.  
  80. ### Wyjaśnienie skryptu:
  81. 1. **Konfiguracja WiFi**:
  82. - Podłącz ESP do sieci WiFi, używając SSID i hasła.
  83. 2. **Timer**:
  84. - Używając funkcji `millis()`, ustawiamy timer na 5 minut (300000 milisekund).
  85. 3. **Wysłanie WoL**:
  86. - Przygotowujemy magic packet (102 bajty), który składa się z 6 bajtów 0xFF i 16 powtórzeń adresu MAC.
  87. - Używamy `WiFiUDP` do wysłania pakietu UDP na adres broadcast (`255.255.255.255`) na standardowy port WoL (9).
  88.  
  89. Po uruchomieniu skryptu ESP będzie czekać 5 minut, a następnie wyśle pakiet WoL do urządzenia z określonym adresem MAC.
  90.  
  91. --------
  92. Lub
  93. Korzystanie z ESPHome lub ESPEasy do konfiguracji watchdog, który po 5 minutach działania wysyła sygnał Wake-on-LAN, jest możliwe, ale wymaga nieco innego podejścia. Oba te narzędzia pozwalają na konfigurację urządzeń ESP bez potrzeby programowania niskopoziomowego, wykorzystując konfigurację w plikach YAML.
  94.  
  95. ### ESPHome
  96.  
  97. #### 1. Instalacja ESPHome:
  98. - Zainstaluj ESPHome zgodnie z oficjalnymi instrukcjami na [stronie ESPHome](https://esphome.io/guides/getting_started_command_line.html).
  99.  
  100. #### 2. Konfiguracja YAML:
  101.  
  102. Plik YAML konfiguracji dla ESPHome może wyglądać następująco:
  103.  
  104. ```yaml
  105. esphome:
  106. name: my_esp_device
  107. platform: ESP8266
  108. board: nodemcuv2 # lub odpowiednia płytka dla twojego ESP
  109.  
  110. wifi:
  111. ssid: "Twoja_SSID"
  112. password: "Twoje_Haslo"
  113.  
  114. logger:
  115. api:
  116. ota:
  117.  
  118. time:
  119. - platform: sntp
  120. id: my_time
  121.  
  122. switch:
  123. - platform: restart
  124. name: "Restart ESP"
  125.  
  126. interval:
  127. - interval: 5min
  128. then:
  129. - wake_on_lan.send_magic_packet:
  130. mac_address: DE:AD:BE:EF:FE:ED
  131. broadcast_address: 255.255.255.255
  132.  
  133. wake_on_lan:
  134. ```
  135.  
  136. #### Wyjaśnienie:
  137. - **esphome**: Definiuje nazwę i platformę dla urządzenia.
  138. - **wifi**: Konfiguracja połączenia WiFi.
  139. - **logger**, **api**, **ota**: Standardowe komponenty ESPHome do logowania, interfejsu API i aktualizacji OTA.
  140. - **time**: Używamy SNTP do synchronizacji czasu.
  141. - **switch**: Dodano opcjonalny przełącznik do restartowania ESP.
  142. - **interval**: Definiuje, że co 5 minut wysyłany jest sygnał Wake-on-LAN do podanego adresu MAC.
  143. - **wake_on_lan**: Deklaracja komponentu Wake-on-LAN.
  144.  
  145. #### 3. Wgranie konfiguracji:
  146. Wgraj konfigurację na ESP za pomocą komendy:
  147.  
  148. ```sh
  149. esphome run my_esp_device.yaml
  150. ```
  151.  
  152. ### ESPEasy
  153.  
  154. #### 1. Instalacja ESPEasy:
  155. - Pobierz i zainstaluj ESPEasy zgodnie z instrukcjami na [stronie ESPEasy](https://www.letscontrolit.com/wiki/index.php/ESPEasy).
  156.  
  157. #### 2. Konfiguracja:
  158.  
  159. Po zainstalowaniu ESPEasy, dostęp do konfiguracji odbywa się przez przeglądarkę. ESPEasy używa interfejsu webowego, który pozwala na konfigurację urządzenia.
  160.  
  161. 1. **Dodanie modułu Wake-on-LAN**:
  162. - Przejdź do zakładki `Devices` i dodaj nowe urządzenie, wybierając typ `Generic - MQTT Import` (dla komunikacji MQTT) lub inny odpowiedni typ.
  163.  
  164. 2. **Skrypt Rules**:
  165. - W ESPEasy można użyć zakładki `Tools -> Advanced -> Rules` do dodania skryptu.
  166.  
  167. Przykładowy skrypt Rules dla wysyłania Wake-on-LAN co 5 minut:
  168.  
  169. ```ini
  170. on System#Boot do
  171. timerSet,1,300 // Ustawia timer na 300 sekund (5 minut)
  172. endon
  173.  
  174. on Rules#Timer=1 do
  175. SendToHTTP 192.168.1.255,80,/wol?mac=DEADBEFEED // Wysyła pakiet WoL
  176. timerSet,1,300 // Resetuje timer
  177. endon
  178. ```
  179.  
  180. #### Wyjaśnienie:
  181. - **System#Boot**: Ustawia timer na 5 minut po starcie urządzenia.
  182. - **Rules#Timer=1**: Po upływie 5 minut wysyła pakiet WoL na adres broadcastowy (musisz upewnić się, że Twój router pozwala na takie żądania HTTP).
  183. - **SendToHTTP**: Wysyła żądanie HTTP, które powoduje wysłanie pakietu WoL (możesz dostosować adres IP i port do swojego środowiska).
  184.  
  185. Te metody pozwalają na prostsze zarządzanie i konfigurację urządzeń ESP z wykorzystaniem ESPHome lub ESPEasy, bez konieczności pisania kodu w Arduino IDE.
  186.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement