espwol.ino 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  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" + WiFi.macAddress();
  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. updateFrontPanelLEDStatus();
  80. }