DIY fertilizer mixer and plant watering machine https://www.xythobuz.de/giessomat.html
Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

WifiStuff.cpp 6.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227
  1. #include <Arduino.h>
  2. #ifdef PLATFORM_ESP
  3. #if defined(ARDUINO_ARCH_ESP8266)
  4. #include <ESP8266WiFi.h>
  5. #include <ESP8266WebServer.h>
  6. #include <ESP8266mDNS.h>
  7. #elif defined(ARDUINO_ARCH_ESP32)
  8. #include <WiFi.h>
  9. #include <WebServer.h>
  10. #include <ESPmDNS.h>
  11. #endif
  12. #include "wifi.h"
  13. #include "config.h"
  14. #include "config_pins.h"
  15. #include "SimpleUpdater.h"
  16. #include "WifiStuff.h"
  17. UPDATE_WEB_SERVER server(80);
  18. SimpleUpdater updater;
  19. unsigned long last_server_handle_time = 0;
  20. String message_buffer_a;
  21. String message_buffer_b;
  22. String message_buffer_c;
  23. String message_buffer_d;
  24. void wifi_set_message_buffer(String a, String b, String c, String d) {
  25. message_buffer_a = a;
  26. message_buffer_b = b;
  27. message_buffer_c = c;
  28. message_buffer_d = d;
  29. }
  30. void handleRoot() {
  31. String message = F("<html><head>\n");
  32. message += F("<title>Giess-o-mat</title>\n");
  33. message += F("</head><body>\n");
  34. message += F("<h1>Giess-o-mat</h1>\n");
  35. message += F("\n<pre>\n");
  36. message += F(" ----------------------\n");
  37. message += F("| ");
  38. message += message_buffer_a;
  39. for (int i = 0; i < (20 - message_buffer_a.length()); i++) {
  40. message += ' ';
  41. }
  42. message += F(" |\n");
  43. message += F("| ");
  44. message += message_buffer_b;
  45. for (int i = 0; i < (20 - message_buffer_b.length()); i++) {
  46. message += ' ';
  47. }
  48. message += F(" |\n");
  49. message += F("| ");
  50. message += message_buffer_c;
  51. for (int i = 0; i < (20 - message_buffer_c.length()); i++) {
  52. message += ' ';
  53. }
  54. message += F(" |\n");
  55. message += F("| ");
  56. message += message_buffer_d;
  57. for (int i = 0; i < (20 - message_buffer_d.length()); i++) {
  58. message += ' ';
  59. }
  60. message += F(" |\n");
  61. message += F(" ----------------------\n");
  62. message += F("</pre>\n");
  63. message += F("\n<p>\n");
  64. message += F("State: ");
  65. // TODO
  66. message += F("\n</p>\n");
  67. message += F("\n<p>\n");
  68. message += F("Version: ");
  69. message += FIRMWARE_VERSION;
  70. message += F("\n<br>\n");
  71. message += F("MAC: ");
  72. message += WiFi.macAddress();
  73. message += F("\n</p>\n");
  74. #if defined(ARDUINO_ARCH_ESP8266)
  75. message += F("\n<p>\n");
  76. message += F("Reset reason: ");
  77. message += ESP.getResetReason();
  78. message += F("\n<br>\n");
  79. message += F("Free heap: ");
  80. message += String(ESP.getFreeHeap());
  81. message += F(" (");
  82. message += String(ESP.getHeapFragmentation());
  83. message += F("% fragmentation)");
  84. message += F("\n<br>\n");
  85. message += F("Free sketch space: ");
  86. message += String(ESP.getFreeSketchSpace());
  87. message += F("\n<br>\n");
  88. message += F("Flash chip real size: ");
  89. message += String(ESP.getFlashChipRealSize());
  90. if (ESP.getFlashChipSize() != ESP.getFlashChipRealSize()) {
  91. message += F("\n<br>\n");
  92. message += F("WARNING: sdk chip size (");
  93. message += (ESP.getFlashChipSize());
  94. message += F(") does not match!");
  95. }
  96. message += F("\n</p>\n");
  97. #elif defined(ARDUINO_ARCH_ESP32)
  98. message += F("\n<p>\n");
  99. message += F("Free heap: ");
  100. message += String(ESP.getFreeHeap() / 1024.0);
  101. message += F("k\n<br>\n");
  102. message += F("Free sketch space: ");
  103. message += String(ESP.getFreeSketchSpace() / 1024.0);
  104. message += F("k\n<br>\n");
  105. message += F("Flash chip size: ");
  106. message += String(ESP.getFlashChipSize() / 1024.0);
  107. message += F("k\n</p>\n");
  108. #endif
  109. message += F("<p>\n");
  110. message += F("Try <a href=\"/update\">/update</a> for OTA firmware updates!\n");
  111. message += F("</p>\n");
  112. message += F("</body></html>\n");
  113. server.send(200, "text/html", message);
  114. }
  115. void wifi_setup() {
  116. // Build hostname string
  117. String hostname = "giess-o-mat";
  118. #if defined(ARDUINO_ARCH_ESP8266)
  119. // Connect to WiFi AP
  120. Serial.println("WiFi: initializing");
  121. WiFi.hostname(hostname);
  122. WiFi.mode(WIFI_STA);
  123. Serial.print("WiFi: connecting");
  124. WiFi.begin(WIFI_SSID, WIFI_PW);
  125. while (WiFi.status() != WL_CONNECTED) {
  126. Serial.print(".");
  127. delay(LED_CONNECT_BLINK_INTERVAL);
  128. digitalWrite(BUILTIN_LED_PIN, !digitalRead(BUILTIN_LED_PIN));
  129. }
  130. Serial.println();
  131. #elif defined(ARDUINO_ARCH_ESP32)
  132. // Set hostname workaround
  133. Serial.println("WiFi: set hostname");
  134. WiFi.config(INADDR_NONE, INADDR_NONE, INADDR_NONE);
  135. WiFi.setHostname(hostname.c_str());
  136. // Workaround for WiFi connecting only every 2nd reset
  137. // https://github.com/espressif/arduino-esp32/issues/2501#issuecomment-513602522
  138. Serial.println("WiFi: connection work-around");
  139. WiFi.onEvent([](WiFiEvent_t event, WiFiEventInfo_t info) {
  140. if (info.disconnected.reason == 202) {
  141. esp_sleep_enable_timer_wakeup(10);
  142. esp_deep_sleep_start();
  143. delay(100);
  144. }
  145. }, WiFiEvent_t::SYSTEM_EVENT_STA_DISCONNECTED);
  146. // Connect to WiFi AP
  147. Serial.println("WiFi: SSID=" WIFI_SSID);
  148. Serial.print("WiFi: connecting");
  149. WiFi.mode(WIFI_STA);
  150. WiFi.begin(WIFI_SSID, WIFI_PW);
  151. while (WiFi.status() != WL_CONNECTED) {
  152. Serial.print(".");
  153. delay(LED_CONNECT_BLINK_INTERVAL);
  154. digitalWrite(BUILTIN_LED_PIN, !digitalRead(BUILTIN_LED_PIN));
  155. }
  156. Serial.println();
  157. // Set hostname workaround
  158. Serial.println("WiFi: set hostname work-around");
  159. WiFi.setHostname(hostname.c_str());
  160. #endif
  161. // Setup HTTP Server
  162. Serial.println("WiFi: initializing HTTP server");
  163. MDNS.begin(hostname.c_str());
  164. updater.setup(&server);
  165. server.on("/", handleRoot);
  166. server.begin();
  167. MDNS.addService("http", "tcp", 80);
  168. Serial.println("WiFi: setup done");
  169. }
  170. void wifi_run() {
  171. if ((millis() - last_server_handle_time) >= SERVER_HANDLE_INTERVAL) {
  172. last_server_handle_time = millis();
  173. server.handleClient();
  174. #ifdef ARDUINO_ARCH_ESP8266
  175. MDNS.update();
  176. #endif // ARDUINO_ARCH_ESP8266
  177. }
  178. // reset ESP every 6h to be safe
  179. if (millis() >= (6 * 60 * 60 * 1000)) {
  180. ESP.restart();
  181. }
  182. }
  183. #endif // PLATFORM_ESP