Advertisement
RuiViana

MeshServerV10.ino

Dec 12th, 2018
305
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 9.38 KB | None | 0 0
  1. //=============================( INCLUINDO DEFININDO E CONFIGURANDO BIBLIOTECAS )=============================
  2. #define Debug
  3. #include "setting.h"
  4. #include "IPAddress.h"
  5. #include "painlessMesh.h"
  6.  
  7. #ifdef ESP8266
  8. #include "Hash.h"
  9. #include <ESPAsyncTCP.h>
  10. #else
  11. #include "SPIFFS.h"
  12. #include <AsyncTCP.h>
  13. #endif
  14. #include <ESPAsyncWebServer.h>
  15.  
  16. //------------( CONFIGURANDO SSID, PASSWORD E PORT DA REDE MESH )-----------//
  17. #define   MESH_PREFIX     "whateverYouLike"
  18. #define   MESH_PASSWORD   "somethingSneaky"
  19. #define   MESH_PORT       5555
  20.  
  21. //--------( CONFIGURANDO SSID, PASSWORD E NOME DO HOST DA REDE WIFI )-------//
  22. #define   STATION_SSID     ssid
  23. #define   STATION_PASSWORD password
  24. #define   HOSTNAME "HTTP_BRIDGE"
  25.  
  26.  
  27. void receivedCallback( const uint32_t &from, const String &msg );
  28. IPAddress getlocalIP();
  29.  
  30. painlessMesh  mesh;
  31. AsyncWebServer server(80);
  32. IPAddress myIP(0, 0, 0, 0);
  33. IPAddress myAPIP(0, 0, 0, 0);
  34.  
  35. //==============================(     DECLARA VARIAVEIS GLOBAIS DE SISTEMA      )=============================
  36. String payLoad = "";                  // String de js
  37. String nodID = "";                    // Identificacao do no da rede mesh
  38. String nodMAC[16][12];                // Matriz para guardar os MACs em HEX e parametros
  39. bool existe = 0;                      // Controle de no na matriz
  40. int qtdeNos = 0;                      // Nos identificados na rede
  41. //=============================(   VOID SETUP CONFIGURANDO SOFTWARE E HARDWARE  )=============================
  42. void setup() {
  43.   for (int i = 0; i < 16; i++)        // Carrega vago em toda a matriz dos nos
  44.   {
  45.     nodMAC[i][0] = "vago";
  46.   }
  47.   Serial.begin(115200);
  48.  
  49.   if (!SPIFFS.begin()) {
  50.     Serial.println("An Error has occurred while mounting SPIFFS");
  51.     return;
  52.   }
  53.   //---------------( CONFIGURANDO E INICIALIZANDO A REDE MESH )---------------//
  54.   mesh.init( MESH_PREFIX, MESH_PASSWORD, MESH_PORT, WIFI_AP_STA, 6 );
  55.   mesh.onReceive(&receivedCallback);
  56.   mesh.stationManual(STATION_SSID, STATION_PASSWORD);
  57.   mesh.onChangedConnections(&changedConnectionCallback);
  58.   mesh.setHostname(HOSTNAME);
  59.   myAPIP = IPAddress(mesh.getAPIP());
  60.  
  61.   Serial.println("My AP IP is " + myAPIP.toString());
  62.  
  63.   uint32_t  myID =  mesh.getNodeId();
  64. //  Serial.println(myID);
  65.  
  66.   String msg = "|1|";       // ESP model ESP8266 = 0 ESP32 = 1
  67.   msg += "1|";              // status ESP
  68.   msg += "1|";              // Bot
  69.   msg += "0";               // Status LED
  70.   msg += "|";               // Sepaarador
  71.   msg += "1020";    // Valor analogico
  72.   msg += "*";               // EOM
  73.  
  74.   qtdeNos++;
  75.  
  76.   extraiDados(myID, msg);
  77.  
  78.   carregaPagina();
  79. }
  80. //=============================(      VOID LOOP ROTINA PRINCIPAL DO SISTEMA     )=============================
  81. void loop() {
  82.   mesh.update();
  83.   if (myIP != getlocalIP()) {
  84.     myIP = getlocalIP();
  85.     Serial.println("My IP is " + myIP.toString());
  86.   }
  87. }
  88. //===============( VOID receivedCallback RETORNA O ID E A MENSSAGEM DO NÓ ENVIADA PARA O ROOT )==============
  89. void receivedCallback( const uint32_t &from, const String &msg ) {
  90.   extraiDados(from, msg);
  91. }
  92. //------------------------------------------------------------------
  93. void extraiDados(uint32_t from, String msg)
  94. {
  95.   nodID = String(from, HEX);                          // Transfor from em Strinf no formato HEX
  96.   nodID.toUpperCase();                                // Maiusculas
  97.   String b0, b1, b2, b3 = " " ;                       // variaveis de trabalho
  98.   b0 = nodID.substring(0, 2);                         // Separa os bytes
  99.   b1 = nodID.substring(2, 4);
  100.   b2 = nodID.substring(4, 6);
  101.   b3 = nodID.substring(6, 8);
  102.   nodID = b0 + ": " + b1 + ": " + b2 + ": " + b3;     // Junta no formato  XX:XX:XX:XX
  103.  
  104.   for (int i = 0; i < 16; i++) {                      // Matriz de 0 a 15
  105.     if (nodID == nodMAC[i][0]) {                      // Verifica se ja registrou o MAC do no
  106.       existe = 1;                                     // Se tiver, indica
  107.       refresh(msg, i);                                // Refresh nos parametros
  108.       break;                                          // Sai do for
  109.     }
  110.   }
  111.  
  112.   if (existe == 0) {                                  // Se nao existe
  113.     for (int i = 0; i < 16; i++) {                    // Procura uma celula não ocupada = 0xFFFFFFFF
  114.       if (nodMAC[i][0] == "vago")                     // Se encontrou
  115.       {
  116.         selectMAC(from, msg, i);                      // Chama rotina pra transformar valor em HEX
  117.         existe = 1;                                   // Indica que existe
  118.         qtdeNos++;                                    // Invrementa numero de nos
  119.         break;                                        // Sai do for
  120.       }
  121.       else
  122.         Serial.print("Buffer cheio");
  123.     }
  124.   }
  125.   existe = 0;                                         // Desabilita existe pra permitir proxima pesquisa
  126. }
  127. //===============================(   FUNÇÃO QUE REQUISITA O IP MESH DO ROOT   )==============================
  128. IPAddress getlocalIP() {
  129.   return IPAddress(mesh.getStationIP());
  130. }
  131. //===========( VOID carregaPagina SERVE AS FOLHAS HTML JQUERY BOOTSTRAP E JAVASCRIPT PARA O CLIENT )==========
  132. void carregaPagina() {
  133.   //--------------------(   SERVE O ARQUIVO index.htm    )--------------------//
  134.   server.on("/htm", HTTP_GET, [](AsyncWebServerRequest * request) {
  135.     request->send(SPIFFS, "/index.htm", "text/html");
  136.   });
  137.  
  138.   //--------------------(  SERVE O ARQUIVO javascript.js )--------------------//
  139.   server.on("/javascript.js", HTTP_GET, [](AsyncWebServerRequest * request) {
  140.     request->send(SPIFFS, "/javascript.js", "application/javascript.js");
  141.   });
  142.  
  143.   //------------------( SERVE O ARQUIVO jquery-3.3.1.min.js )-----------------//
  144.   server.on("/jquery-3.3.1.min.js", HTTP_GET, [](AsyncWebServerRequest * request) {
  145.     request->send(SPIFFS, "/jquery-3.3.1.min.js", "application/javascript.js");
  146.   });
  147.  
  148.   //------------------(   SERVE O ARQUIVO bootstrap.min.js  )-----------------//
  149.   server.on("/bootstrap.min.js", HTTP_GET, [](AsyncWebServerRequest * request) {
  150.     request->send(SPIFFS, "/bootstrap.min.js", "application/javascript.js");
  151.   });
  152.  
  153.   //-----------------(   SERVE O ARQUIVO bootstrap.min.css  )-----------------//
  154.   server.on("/bootstrap.min.css", HTTP_GET, [](AsyncWebServerRequest * request) {
  155.     request->send(SPIFFS, "/bootstrap.min.css", "text/css");
  156.   });
  157.  
  158.   //---------------------(      SERVE O ARQUIVO teste      )------------------//
  159.   server.on("/teste", HTTP_GET, [](AsyncWebServerRequest * request) {
  160.     payLoad = "";                                     // Limpa a mensagem da tela
  161.     for ( int i = 0; i <= qtdeNos; i++) {
  162.       payLoad += nodMAC[i][0];
  163.       payLoad += "|";
  164.       payLoad += nodMAC[i][1];
  165.       payLoad += "|1|0|";
  166.       payLoad += nodMAC[i][4];
  167.       payLoad += "|";
  168.       payLoad += nodMAC[i][5];
  169.       if (i < qtdeNos)
  170.         payLoad += "*";
  171.     }
  172.     request->send(200, "text / plain", payLoad);
  173.   });
  174.   //--------------------(      SERVE O ARQUIVO ligarLed      )----------------//
  175.   server.on("/ligarLed", HTTP_GET, [](AsyncWebServerRequest * request) {
  176.     if (request->hasArg("btnRoot")) {
  177.     }
  178.     if (request->hasArg("btnNode1")) {
  179.       String msg = request->arg("btnNode1");
  180.       msg += mesh.getNodeId();
  181.       msg += " 1";
  182.       uint32_t node = nodMAC[1][11].toInt();
  183.       mesh.sendSingle(node, msg);
  184.     }
  185.     if (request->hasArg("btnNode2")) {
  186.       String msg = request->arg("btnNode2");
  187.       msg += mesh.getNodeId();
  188.       msg += " 1";
  189.       uint32_t node = nodMAC[2][11].toInt();
  190.       mesh.sendSingle(node, msg);
  191.     }
  192.  
  193.     request->send(200, "text / plain", payLoad);
  194.   });
  195.   server.begin();
  196. }
  197. //------------------------------------------------------------------
  198. void selectMAC( uint32_t from, String msg, uint8_t i)
  199. {
  200.   nodMAC[i][0] = nodID;
  201.   nodMAC[i][4] = msg.substring(7, 8);                 // Separa o valor do status do LED
  202.   nodMAC[i][5] = msg.substring(9, 13);                // Separa o valor analog
  203.   nodMAC[i][5] = nodMAC[i][5].toInt();                // Remove o * do final se for mmeno que 4 digitos
  204.   nodMAC[i][1] = msg.substring(1, 2);                 // Separa o valor do modelo do ESP
  205.   if (nodMAC[i][1] == "0")                            // Se for 0 é ESP3266
  206.     nodMAC[i][1] = "ESP8266";
  207.   else                                                // Se for 1 é ESP32
  208.     nodMAC[i][1] =  "ESP32";
  209.   nodMAC[i][11] = String(from);
  210.   listaMatris();
  211. }
  212. //------------------------------------------------------------------
  213. void refresh(String msg, uint8_t i)
  214. {
  215.   nodMAC[i][4] = msg.substring(7, 8);                 // Separa o valor do status do LED
  216.   nodMAC[i][5] = msg.substring(9, 13);                // Separa o valor analog
  217.   nodMAC[i][5] = nodMAC[i][5].toInt();                // Remove o * do final se for mmeno que 4 digitos
  218.   listaMatris();
  219. }
  220. //------------------------------------------------------------------
  221. void changedConnectionCallback() {
  222.   Serial.println("Houve aleracao");
  223. }
  224. //------------------------------------------------------------------
  225. void listaMatris()
  226. {
  227. #ifdef Debug
  228.   for (int i = 0; i < 16; i++) {                      // Matriz de 0 a 15
  229.     if ((nodMAC[i][0]) == "vago") {
  230.       Serial.println(" ");
  231.       //break;
  232.     }
  233.     for (int j = 0; j < 12; j++) {                    // Elemento de 0 a 11
  234.       Serial.print(nodMAC[i][j]);                     // Imprime
  235.     }
  236.  
  237.     Serial.println(" ");
  238.   }
  239. #endif
  240. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement