Advertisement
babyyoda_

MC_2CH_TOUCH_MESH_WORKING

Sep 30th, 2021
242
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // MC_2CH
  2. // ESP8266 2CH Board
  3. // Touch Pad Working
  4. // Wifi Mesh Working
  5. // July 29 - Still stable
  6. #include <Wire.h>
  7.  
  8. #define I2C_SLAVE_1  1
  9. #define I2C_SLAVE_2  2
  10.  
  11. const byte interruptPin1 = 14;  // D5
  12. const byte interruptPin2 = 12;  // D6
  13.  
  14. volatile int Load1state = LOW; // To make sure variables shared between an ISR
  15. volatile int Load2state = LOW; // To make sure variables shared between an ISR
  16.  
  17. #define I2C_SDA 4 // D2                     // ESP8266
  18. #define I2C_SCL 5 // D1
  19.  
  20. //#define I2C_SDA 21    // ESP32
  21. //#define I2C_SCL 22
  22.  
  23. #include "painlessMesh.h"
  24.  
  25. #define   MESH_PREFIX     "whateverYouLike"
  26. #define   MESH_PASSWORD   "somethingSneaky"
  27. #define   MESH_PORT       5555
  28.  
  29. Scheduler userScheduler; // to control your personal task
  30. painlessMesh  mesh;
  31.  
  32. // User stub
  33. void sendMessage() ; // Prototype so PlatformIO doesn't complain
  34.  
  35. Task taskSendMessage( TASK_SECOND * 1 , TASK_FOREVER, &sendMessage );
  36.  
  37. void sendMessage() {
  38.   String msg = "Hello from node ";
  39.   msg += mesh.getNodeId();
  40.   //mesh.sendBroadcast( msg );
  41.   taskSendMessage.setInterval( random( TASK_SECOND * 1, TASK_SECOND * 5 ));
  42. }
  43.  
  44. // Needed for painless library
  45. void receivedCallback( uint32_t from, String &msg ) {
  46.   Serial.println(msg);
  47.   String json = "";
  48.   DynamicJsonDocument doc(1024);
  49.   json = msg.c_str();
  50.   DeserializationError error = deserializeJson(doc,json);
  51.   if(error)
  52.   {
  53.     Serial.println(" deserialization failed");
  54.   }
  55.  // String steer = "";
  56.  // steer = doc["steer"];
  57.  
  58.   if(doc["lamp"] == "light1On")
  59.   {
  60.     Wire.beginTransmission(1);
  61.     Wire.write('0');              
  62.     Wire.endTransmission();    
  63.     Serial.print("Send 0");
  64.   }
  65. //  else if(doc["lamp"] == "L1_low")
  66. //  {
  67. //    Wire.beginTransmission(1);
  68. //    Wire.write('1');              
  69. //    Wire.endTransmission();    
  70. //    Serial.print("Send low");
  71. //  }
  72. //  else if(doc["lamp"] == "L1_med")
  73. //  {
  74. //    Wire.beginTransmission(1);
  75. //    Wire.write('2');              
  76. //    Wire.endTransmission();    
  77. //    Serial.print("Send med");
  78. //  }
  79.   else if(doc["lamp"] == "light1Off")
  80.   {
  81.     Wire.beginTransmission(1);
  82.     Wire.write('3');              
  83.     Wire.endTransmission();    
  84.     Serial.print("Send high");
  85.   }
  86.   ///////////////////////////////
  87.   if(doc["lamp"] == "fanOff")
  88.   {
  89.     Wire.beginTransmission(2);
  90.     Wire.write('0');              
  91.     Wire.endTransmission();    
  92.     Serial.print("Send 0");
  93.   }
  94.   else if(doc["lamp"] == "fanLow")
  95.   {
  96.     Wire.beginTransmission(2);
  97.     Wire.write('1');              
  98.     Wire.endTransmission();    
  99.     Serial.print("Send low");
  100.   }
  101.   else if(doc["lamp"] == "fanMed")
  102.   {
  103.     Wire.beginTransmission(2);
  104.     Wire.write('2');              
  105.     Wire.endTransmission();    
  106.     Serial.print("Send med");
  107.   }
  108.   else if(doc["lamp"] == "fanHigh")
  109.   {
  110.     Wire.beginTransmission(2);
  111.     Wire.write('3');              
  112.     Wire.endTransmission();    
  113.     Serial.print("Send high");
  114.   }
  115.   /////////////////////////////////
  116. }
  117.  
  118. void newConnectionCallback(uint32_t nodeId) {
  119.     Serial.printf("--> startHere: New Connection, nodeId = %u\n", nodeId);
  120. }
  121.  
  122. void changedConnectionCallback() {
  123.   Serial.printf("Changed connections\n");
  124. }
  125.  
  126. void nodeTimeAdjustedCallback(int32_t offset) {
  127.     Serial.printf("Adjusted time %u. Offset = %d\n", mesh.getNodeTime(),offset);
  128. }
  129.  
  130. //--------------------------------------------------------------------------------------//
  131.  
  132. ICACHE_RAM_ATTR void handleInterruptOn1() {
  133.   Load1state = !Load1state;
  134.   if (Load1state) {
  135.     Wire.beginTransmission(1);
  136.     Wire.write('3');
  137.     Wire.endTransmission();
  138.     //      Serial.println("Device 1 HIGH Via Touch");
  139.   }
  140.   else if (!Load1state) {
  141.     Wire.beginTransmission(1);
  142.     Wire.write('0');
  143.     Wire.endTransmission();
  144.     //      Serial.println("Device 1 OFF Via Touch");
  145.   }
  146. }
  147.  
  148. ICACHE_RAM_ATTR void handleInterruptOn2() {
  149.   Load2state = !Load2state;
  150.   if (Load2state) {
  151.     Wire.beginTransmission(2);
  152.     Wire.write('3');
  153.     Wire.endTransmission();
  154.     //      Serial.println("Device 2 HIGH Via Touch");
  155.   }
  156.   else if (!Load2state) {
  157.     Wire.beginTransmission(2);
  158.     Wire.write('0');
  159.     Wire.endTransmission();
  160.     //      Serial.println("Device 2 OFF Via Touch");
  161.   }
  162. }
  163.  
  164.  
  165. //--------------------------------------------------------------------------------------//
  166. void setup() {
  167.   Serial.begin(115200);
  168. //mesh.setDebugMsgTypes( ERROR | MESH_STATUS | CONNECTION | SYNC | COMMUNICATION | GENERAL | MSG_TYPES | REMOTE ); // all types on
  169.   mesh.setDebugMsgTypes( ERROR | STARTUP );  // set before init() so that you can see startup messages
  170.  
  171.   mesh.init( MESH_PREFIX, MESH_PASSWORD, &userScheduler, MESH_PORT );
  172.   mesh.onReceive(&receivedCallback);
  173.   mesh.onNewConnection(&newConnectionCallback);
  174.   mesh.onChangedConnections(&changedConnectionCallback);
  175.   mesh.onNodeTimeAdjusted(&nodeTimeAdjustedCallback);
  176.  
  177.   userScheduler.addTask( taskSendMessage );
  178.   taskSendMessage.enable();
  179.   pinMode(interruptPin1, INPUT_PULLUP);
  180.   pinMode(interruptPin2, INPUT_PULLUP);
  181.   Wire.begin(I2C_SDA, I2C_SCL);  // join i2c bus (address optional for master)
  182.   attachInterrupt(digitalPinToInterrupt(interruptPin1), handleInterruptOn1, FALLING);
  183.   attachInterrupt(digitalPinToInterrupt(interruptPin2), handleInterruptOn2, FALLING);
  184.   Serial.print("Ready");
  185. }
  186.  
  187. void loop() {
  188.   // it will run the user scheduler as well
  189.   mesh.update();
  190. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement