espwol.ino 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. /*
  2. * RESTful Wake On Lan
  3. * Author: Toby Chui
  4. *
  5. * This firmware provide a web interface / RESTFUL API
  6. * request for remote power-on / off or reset your computer
  7. * by emulating button press on the front-panel headers
  8. *
  9. * The following firmware config are recommended
  10. * Board: Wemos D1 Mini
  11. * CPU clockspeed: 160Mhz
  12. * IwIP Varient: v2 Higher Bandwidth
  13. *
  14. */
  15. #include <ESP8266WiFi.h>
  16. #include <WiFiManager.h>
  17. #include <ArduinoJson.h>
  18. #include <LittleFS.h>
  19. /* Pin Definations */
  20. //On-board Programmable Button
  21. #define BTN_INPUT D0 //LOW = Pressed, HIGH = Released
  22. #define BTN_LED D7 //LED active low
  23. //ATX
  24. #define PWR_BTN D6
  25. #define RST_BTN D5
  26. #define HDD_LED D2
  27. #define PWR_LED D1
  28. /* WiFi & Web Server Related */
  29. WiFiManager wifiManager;
  30. ESP8266WebServer server(80);
  31. /* Discovery */
  32. #include <ESP8266mDNS.h>
  33. String MDNS_NAME = "espwol";
  34. /* Global Variables */
  35. bool hddLedState = 0;
  36. bool pwrLedState = 0;
  37. bool customBtnPressed = true;
  38. int val = 0;
  39. /* Function Prototypes */
  40. void handleRoot();
  41. void handleNotFound();
  42. void registerServeEndpoints();
  43. void handleCustomButtonEvents();
  44. void setup() {
  45. Serial.begin(115200);
  46. delay(100);
  47. /* Setup WiFi */
  48. wifiManager.setClass("invert");
  49. wifiManager.autoConnect("ESP-WakeOnLan");
  50. Serial.println("[INFO] Connected to WiFi!");
  51. /* Setup Pins */
  52. pinMode(PWR_LED, INPUT);
  53. pinMode(HDD_LED, INPUT);
  54. pinMode(PWR_BTN, OUTPUT);
  55. pinMode(RST_BTN, OUTPUT);
  56. pinMode(BTN_INPUT, INPUT);
  57. pinMode(BTN_LED, OUTPUT);
  58. /* Start LittleFS */
  59. if(!LittleFS.begin()){
  60. Serial.println("[ERROR] An Error has occurred while mounting LittleFS");
  61. return;
  62. }
  63. Serial.println("[INFO] LittleFS started");
  64. /* Start mDNS Discovery Service */
  65. if (!MDNS.begin(MDNS_NAME)){
  66. Serial.println("[ERROR] mDNS start failed. Skipping.");
  67. }else{
  68. Serial.println("[INFO] mDNS started. Connect to your webstick using http://" + MDNS_NAME + ".local");
  69. MDNS.addService("http", "tcp", 80);
  70. }
  71. /* Bind web listener */
  72. registerServeEndpoints();
  73. server.begin();
  74. Serial.println("[INFO] HTTP server started");
  75. }
  76. void loop() {
  77. server.handleClient();
  78. handleCustomButtonEvents();
  79. Serial.print(hddLedState);
  80. Serial.print(",");
  81. Serial.println(pwrLedState);
  82. }