Advertisement
PowerTGS440

ESP8266 DatkNet Mesh Client

Apr 16th, 2021
225
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 8.91 KB | None | 0 0
  1. //********************************************************************************************************************
  2. //
  3. // TEST v0.01 by Tomasz Majcher (TLG) Trans Line Group
  4. //
  5. //
  6. //
  7. //
  8. //********************************************************************************************************************
  9.  
  10. #include <Arduino_JSON.h>
  11. #include "painlessMesh.h"
  12.  
  13. #define   MESH_PREFIX     "ESP_Root"
  14. #define   MESH_PASSWORD   "ESP_Root"
  15. #define   MESH_PORT       5555
  16.  
  17. //********************************************************************************************************************
  18. //
  19. // O B I E K T Y
  20. //
  21. //********************************************************************************************************************
  22.  
  23. Scheduler userScheduler;
  24. painlessMesh  mesh;
  25.  
  26. JSONVar JSON_msg;
  27.  
  28. //********************************************************************************************************************
  29. //
  30. // P R O T O T Y P Y
  31. //
  32. //********************************************************************************************************************
  33.  
  34. void sendMessage();
  35. void getTime();              // poproś o czas NTP z MESH-ROOT   HH:MM:SS
  36. void getTimeHM();            // poproś o czas NTP z MESH-ROOT   HH:MM
  37. void getDate();              // poproś o datę NTP z MESH-ROOT   DD.MM.YYYY
  38. void getDatePL();            // poproś o datę NTP z MESH-ROOT   DD miesiac YYYY
  39. void getRoot();              // poproś ROOT kto tu rządzi
  40.  
  41. //********************************************************************************************************************
  42. //
  43. //    T A S K   O B I E K T Y
  44. //
  45. //********************************************************************************************************************
  46.  
  47. Task taskgetTime ( TASK_SECOND * 60, TASK_FOREVER, &getTime );
  48. Task taskgetTimeHM ( TASK_SECOND * 60, TASK_FOREVER, &getTimeHM );
  49. Task taskgetDate ( TASK_SECOND * 90, TASK_FOREVER, &getDate );
  50. Task taskgetDatePL ( TASK_SECOND * 90, TASK_FOREVER, &getDatePL );
  51. Task taskgetRoot ( TASK_SECOND * 90, TASK_FOREVER, &getRoot );
  52.  
  53.  
  54. //********************************************************************************************************************
  55. //
  56. //    S T R U K T U R Y
  57. //
  58. //********************************************************************************************************************
  59.  
  60. struct ZEGAR
  61. {
  62.     String    SformatowanyCzas    = "";     // czas HH:MM:SS
  63.     String    SformatowanyCzasHM  = "";     // czas HH:MM
  64.     String    SformatowanaData    = "";     // data DD.MM.RRRR
  65.     String    SformatowanaDataPL  = "";     // data DD miesiac RRRR
  66. }
  67. zegar;
  68.  
  69. String root = "";
  70.  
  71. //*********************************************************************************************************************
  72. //
  73. //    T A S K   F U N K C J E
  74. //
  75. //*********************************************************************************************************************
  76.  
  77. void getTime()
  78. {
  79.     String msg;
  80.     msg = "{\"ID\":2229645491,\"CODE\":1001}";           // msg do wysłania (kod 1001) - ządanie czasu    
  81.     mesh.sendBroadcast( msg );                           // wyślij żądanie do serwera
  82.     taskgetTime.setInterval( TASK_SECOND * 60 );         // wykonuj co 60 sekund
  83. }
  84.  
  85. void getTimeHM()
  86. {
  87.     String msg;
  88.     msg = "{\"ID\":2229645491,\"CODE\":1002}";           // msg do wysłania (kod 1002) - ządanie czasu    
  89.     mesh.sendBroadcast( msg );                           // wyślij żądanie do serwera
  90.     taskgetTime.setInterval( TASK_SECOND * 59 );         // wykonuj co 60 sekund
  91. }
  92.  
  93. void getDate()
  94. {
  95.     String msg;    
  96.     msg = "{\"ID\":2229645491,\"CODE\":1011}";           // msg do wysłania (kod 1002) - żadanie daty
  97.     mesh.sendBroadcast( msg );                           // wyślij żądanie do serwera
  98.     taskgetDate.setInterval( TASK_SECOND * 600 );        // wykonuj co godzinę
  99. }
  100.  
  101. void getDatePL()
  102. {
  103.     String msg;    
  104.     msg = "{\"ID\":2229645491,\"CODE\":1012}";           // msg do wysłania (kod 1002) - żadanie daty
  105.     mesh.sendBroadcast( msg );                           // wyślij żądanie do serwera
  106.     taskgetDate.setInterval( TASK_SECOND * 90 );         // wykonuj co
  107. }
  108.  
  109. void getRoot()
  110. {
  111.     String msg;    
  112.     msg = "{\"ID\":2229645491,\"CODE\":0000}";           // msg do wysłania (kod 0000) - pytanie do ROOT
  113.     mesh.sendBroadcast( msg );                           // wyślij żądanie do serwera
  114.     taskgetDate.setInterval( TASK_SECOND * 120 );         // wykonuj co
  115. }
  116.  
  117.  
  118.  
  119.  
  120. //*********************************************************************************************************************
  121. //
  122. //    M E S H - receiver Callback
  123. //
  124. //*********************************************************************************************************************
  125.  
  126. void receivedCallback( uint32_t from, String &msg )
  127. {
  128.     Serial.printf("\n[ESP] [otrzymałem od] %u [wiadomość JSON] %s", from, msg.c_str());
  129.    
  130.     JSON_msg = JSON.parse(msg);
  131.     int code = JSON_msg["CODE"];
  132.  
  133.     switch(code)
  134.     {
  135.         case  0000  :   root = JSON_msg["ROOT"];
  136.                         Serial.printf("\n[ESP] [ROOT MSG] = %s", root.c_str());
  137.                         Serial.printf(" [Moje ID] %u", from );
  138.                         break;
  139.  
  140.         case  1001  :   zegar.SformatowanyCzas = JSON_msg["CZAS"];  
  141.                         Serial.printf("\n[ESP] [struct ZEGAR -> zegar.SformatowanyCzas] = %s", zegar.SformatowanyCzas.c_str());
  142.                         break;
  143.  
  144.         case  1002  :   zegar.SformatowanyCzasHM = JSON_msg["CZAS"];  
  145.                         Serial.printf("\n[ESP] [struct ZEGAR -> zegar.SformatowanyCzas] = %s", zegar.SformatowanyCzasHM.c_str());
  146.                         break;
  147.  
  148.         case  1011  :   zegar.SformatowanaData = JSON_msg["DATA"];  
  149.                         Serial.printf("\n[ESP] [struct ZEGAR -> zegar.SformatowanaData] = %s", zegar.SformatowanaData.c_str());
  150.                         break;
  151.  
  152.         case  1012  :   zegar.SformatowanaDataPL = JSON_msg["DATA"];  
  153.                         Serial.printf("\n[ESP] [struct ZEGAR -> zegar.SformatowanaDataPL] = %s", zegar.SformatowanaDataPL.c_str());
  154.                         break;                
  155.  
  156.         default     :   Serial.printf("\n[ESP] [otrzymałem od] %u [niezidentyfikowano] %s\n", from, msg.c_str()); break;
  157.     }
  158. }
  159.  
  160. //*********************************************************************************************************************
  161. //
  162. //    M E S H - cknewConnectionCallback
  163. //
  164. //*********************************************************************************************************************
  165.  
  166. void newConnectionCallback(uint32_t nodeId)
  167. {
  168.     Serial.printf("\n[ESP] [Serwer ID] = %u", nodeId);
  169. }
  170.  
  171. //*********************************************************************************************************************
  172. //
  173. //    M E S H - changedConnectionCallback
  174. //
  175. //*********************************************************************************************************************
  176.  
  177. void changedConnectionCallback()
  178. {
  179.     Serial.printf("\n[ESP] zmieniam połączenie");
  180. }
  181.  
  182. //*********************************************************************************************************************
  183. //
  184. //    M E S H - nodeTimeAdjustedCallback
  185. //
  186. //*********************************************************************************************************************
  187.  
  188. void nodeTimeAdjustedCallback(int32_t offset)
  189. {
  190.     Serial.printf("\n[ESP] [Skorygowany czas] %u. Offsetowy = %d", mesh.getNodeTime(),offset);
  191. }
  192.  
  193. //*********************************************************************************************************************
  194. //
  195. //    S E T U P
  196. //
  197. //*********************************************************************************************************************
  198.  
  199. void setup()
  200. {
  201.   Serial.begin(115200);
  202.  
  203.     //mesh.setDebugMsgTypes( ERROR | MESH_STATUS | CONNECTION | SYNC | COMMUNICATION | GENERAL | MSG_TYPES | REMOTE );
  204.     //mesh.setDebugMsgTypes( ERROR | STARTUP );  
  205.  
  206.     mesh.init( MESH_PREFIX, MESH_PASSWORD, &userScheduler, MESH_PORT );
  207.     mesh.onReceive(&receivedCallback);
  208.     mesh.onNewConnection(&newConnectionCallback);
  209.     mesh.onChangedConnections(&changedConnectionCallback);
  210.     mesh.onNodeTimeAdjusted(&nodeTimeAdjustedCallback);
  211.  
  212.     userScheduler.addTask( taskgetTime );
  213.     userScheduler.addTask( taskgetTimeHM );
  214.     userScheduler.addTask( taskgetDate );
  215.     userScheduler.addTask( taskgetDatePL );
  216.     userScheduler.addTask( taskgetRoot );
  217.  
  218.     taskgetTime.enable();
  219.     taskgetTimeHM.enable();
  220.     taskgetDate.enable();
  221.     taskgetDatePL.enable();
  222.     taskgetRoot.enable();
  223. }
  224.  
  225. //*********************************************************************************************************************
  226. //
  227. //    L O O P
  228. //
  229. //*********************************************************************************************************************
  230.  
  231. void loop()
  232. {
  233.     mesh.update();
  234. }
  235.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement