├── .gitattributes ├── LED_TOUCH_LAMP_mqtt_slave └── LED_TOUCH_LAMP_mqtt_slave.ino └── LED_TOUCH_LAMP_mqtt_master └── LED_TOUCH_LAMP_mqtt_master.ino /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | -------------------------------------------------------------------------------- /LED_TOUCH_LAMP_mqtt_slave/LED_TOUCH_LAMP_mqtt_slave.ino: -------------------------------------------------------------------------------- 1 | #include 2 | #include "Adafruit_MQTT.h" 3 | #include "Adafruit_MQTT_Client.h" 4 | 5 | /************************* WiFi Access Point *********************************/ 6 | 7 | #define WLAN_SSID "SSID" 8 | #define WLAN_PASS "PASS" 9 | bool one_time_only = 1; 10 | /************************* Adafruit.io Setup *********************************/ 11 | 12 | #define AIO_SERVER "io.adafruit.com" 13 | #define AIO_SERVERPORT 1883 // use 8883 for SSL 14 | #define AIO_USERNAME "USERNAME" 15 | #define AIO_KEY "AIOKey" 16 | 17 | #define touch A0 18 | #define LED D2 19 | int x = 0; 20 | bool touch_flag = 0; 21 | bool mqtt_flag = 0; 22 | bool one_time_flag = 1; 23 | int lamp_1_master = 0; 24 | int lamp_2_master = 0; 25 | /************ Global State (you don't need to change this!) ******************/ 26 | 27 | // Create an ESP8266 WiFiClient class to connect to the MQTT server. 28 | WiFiClient client; 29 | // or... use WiFiFlientSecure for SSL 30 | //WiFiClientSecure client; 31 | 32 | // Setup the MQTT client class by passing in the WiFi client and MQTT server and login details. 33 | Adafruit_MQTT_Client mqtt(&client, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY); 34 | 35 | /****************************** Feeds ***************************************/ 36 | 37 | // Setup a feed called 'photocell' for publishing. 38 | // Notice MQTT paths for AIO follow the form: /feeds/ 39 | Adafruit_MQTT_Publish lamp_brightness_pub = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/lamp_brightness"); //lamp_1_master 40 | Adafruit_MQTT_Publish lamp_1_master_pub = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/lamp_1_master"); 41 | Adafruit_MQTT_Publish lamp_2_master_pub = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/lamp_2_master"); 42 | // Setup a feed called 'onoff' for subscribing to changes. 43 | Adafruit_MQTT_Subscribe lamp_brightness_sub = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME "/feeds/lamp_brightness"); 44 | Adafruit_MQTT_Subscribe lamp_1_master_sub = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME "/feeds/lamp_1_master"); 45 | Adafruit_MQTT_Subscribe lamp_2_master_sub = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME "/feeds/lamp_2_master"); 46 | 47 | /*************************** Sketch Code ************************************/ 48 | 49 | // Bug workaround for Arduino 1.6.6, it seems to need a function declaration 50 | // for some reason (only affects ESP8266, likely an arduino-builder bug). 51 | void MQTT_connect(); 52 | 53 | 54 | void setup() { 55 | 56 | pinMode(touch, INPUT); 57 | pinMode(LED, OUTPUT); 58 | Serial.begin(115200); 59 | 60 | Serial.println(F("Adafruit MQTT demo")); 61 | 62 | // Connect to WiFi access point. 63 | Serial.println(); Serial.println(); 64 | Serial.print("Connecting to "); 65 | Serial.println(WLAN_SSID); 66 | 67 | WiFi.begin(WLAN_SSID, WLAN_PASS); 68 | while (WiFi.status() != WL_CONNECTED) { 69 | delay(500); 70 | Serial.print("."); 71 | } 72 | Serial.println(); 73 | 74 | Serial.println("WiFi connected"); 75 | Serial.println("IP address: "); Serial.println(WiFi.localIP()); 76 | 77 | // Setup MQTT subscription for onoff feed. 78 | mqtt.subscribe(&lamp_brightness_sub); 79 | mqtt.subscribe(&lamp_1_master_sub); 80 | mqtt.subscribe(&lamp_2_master_sub); 81 | 82 | } 83 | 84 | void loop() { 85 | 86 | 87 | int brightness_value; 88 | int counter_flag = 0; 89 | 90 | MQTT_connect(); 91 | 92 | if (one_time_only) 93 | { 94 | if (!lamp_1_master_pub.publish(0)) { 95 | Serial.println(F("Failed")); 96 | } else { 97 | Serial.println(F("LAMP 1 = 0")); 98 | } 99 | Adafruit_MQTT_Subscribe *subscription; 100 | while ((subscription = mqtt.readSubscription(1))) { 101 | Serial.println("FIRST READING"); 102 | 103 | if (subscription == &lamp_1_master_sub) { 104 | Serial.print(F("Got: ")); 105 | Serial.println((char *)lamp_1_master_sub.lastread); 106 | lamp_1_master = atoi((char *)lamp_1_master_sub.lastread); 107 | } 108 | } 109 | if (!lamp_2_master_pub.publish(0)) { 110 | Serial.println(F("Failed")); 111 | } else { 112 | Serial.println(F("LAMP 2 = 0")); 113 | } 114 | 115 | while ((subscription = mqtt.readSubscription(1))) { 116 | Serial.println("SECOND READING"); 117 | 118 | if (subscription == &lamp_2_master_sub) { 119 | Serial.print(F("Got: ")); 120 | Serial.println((char *)lamp_2_master_sub.lastread); 121 | lamp_2_master = atoi((char *)lamp_2_master_sub.lastread); 122 | } 123 | } 124 | Serial.print(F("\nSending brightness val ")); 125 | Serial.print(x); 126 | Serial.print("..."); 127 | if (! lamp_brightness_pub.publish(x)) { 128 | Serial.println(F("Failed")); 129 | } else { 130 | Serial.println(F("Published value")); 131 | } 132 | analogWrite(LED, x); 133 | one_time_only = 0; 134 | } 135 | if (lamp_1_master == 0 && lamp_2_master == 0) 136 | { 137 | Serial.println("FIRST IF"); 138 | while (analogRead(touch) < 850) 139 | { 140 | delay(1); 141 | if (analogRead(touch) > 850) 142 | { 143 | lamp_2_master = 1; 144 | if (!lamp_2_master_pub.publish(1)) { 145 | Serial.println(F("Failed")); 146 | } else { 147 | Serial.println(F("LAMP 2 = 1")); 148 | } 149 | Serial.println("lamp_2_master"); 150 | break; 151 | } 152 | 153 | Adafruit_MQTT_Subscribe *subscription; 154 | while ((subscription = mqtt.readSubscription(1))) { 155 | Serial.println("FIRST READING"); 156 | 157 | if (subscription == &lamp_1_master_sub) { 158 | Serial.print(F("Got: ")); 159 | Serial.println((char *)lamp_1_master_sub.lastread); 160 | lamp_1_master = atoi((char *)lamp_1_master_sub.lastread); 161 | } 162 | } 163 | 164 | if(lamp_1_master == 1) 165 | break; 166 | } 167 | } 168 | 169 | if (lamp_1_master == 0 && lamp_2_master == 1 && counter_flag < 5000) 170 | { 171 | // Serial.println("SECOND IF"); 172 | repeat: 173 | // Serial.println(analogRead(touch)); 174 | if (analogRead(touch) > 850) 175 | { 176 | Serial.println("TOUCH"); 177 | counter_flag = 0; 178 | 179 | x = x + 15; 180 | if (x > 255) 181 | x = 255; 182 | analogWrite(LED, x); 183 | delay(200); 184 | } 185 | while (counter_flag < 5000) 186 | { 187 | 188 | if (analogRead(touch) > 850 && counter_flag < 5000) 189 | { 190 | delay(1); 191 | break; 192 | } 193 | else if (analogRead(touch) < 850 && counter_flag > 5000) { 194 | 195 | delay(1); 196 | break; 197 | } 198 | else 199 | { 200 | counter_flag++; 201 | delay(1); 202 | goto repeat; 203 | } 204 | 205 | } 206 | 207 | if (counter_flag >= 5000) 208 | { 209 | 210 | Serial.print(F("\nSending brightness val from lamp 2")); 211 | Serial.print(x); 212 | Serial.print("..."); 213 | if (! lamp_brightness_pub.publish(x)) { 214 | Serial.println(F("Failed")); 215 | } else { 216 | Serial.println(F("Published value")); 217 | } 218 | } 219 | } 220 | if (lamp_1_master == 0 && lamp_2_master == 1 && counter_flag >= 5000) 221 | { 222 | while(lamp_2_master != 0){ 223 | Adafruit_MQTT_Subscribe *subscription; 224 | while ((subscription = mqtt.readSubscription(1))) { 225 | Serial.println("mqtt"); 226 | if (subscription == &lamp_brightness_sub) { 227 | Serial.print(F("Got: ")); 228 | Serial.println((char *)lamp_brightness_sub.lastread); 229 | x = atoi((char *)lamp_brightness_sub.lastread); 230 | analogWrite(LED, x); 231 | Serial.print("Value of x = "); Serial.println(x); 232 | } 233 | } 234 | if(x == 0) 235 | { 236 | counter_flag = 0; 237 | if (!lamp_2_master_pub.publish(x)) { 238 | Serial.println(F("Failed")); 239 | } else { 240 | Serial.println(F("LAMP 2 = 0")); 241 | } 242 | lamp_2_master = 0; 243 | } 244 | } 245 | } 246 | 247 | if (lamp_1_master == 1) 248 | { 249 | 250 | while (analogRead(touch) < 850) 251 | { 252 | Adafruit_MQTT_Subscribe *subscription; 253 | while ((subscription = mqtt.readSubscription(1))) { 254 | Serial.println("mqtt"); 255 | if (subscription == &lamp_brightness_sub) { 256 | Serial.print(F("Got: ")); 257 | Serial.println((char *)lamp_brightness_sub.lastread); 258 | x = atoi((char *)lamp_brightness_sub.lastread); 259 | analogWrite(LED, x); 260 | Serial.print("Value of x = "); Serial.println(x); 261 | } 262 | } 263 | } 264 | Serial.println("TOUCH"); 265 | touch_flag = 1; 266 | x = 0; 267 | analogWrite(LED, x); 268 | Serial.print(F("\nSending brightness val from lamp 1")); 269 | Serial.print(x); 270 | Serial.print("..."); 271 | if (! lamp_brightness_pub.publish(x)) { 272 | Serial.println(F("Failed")); 273 | } else { 274 | Serial.println(F("brightness = 0")); 275 | } 276 | if (!lamp_1_master_pub.publish(x)) { 277 | Serial.println(F("Failed")); 278 | } else { 279 | Serial.println(F("LAMP 1 = 0")); 280 | } 281 | lamp_1_master = 0; 282 | if (!lamp_2_master_pub.publish(x)) { 283 | Serial.println(F("Failed")); 284 | } else { 285 | Serial.println(F("LAMP 2 = 0")); 286 | } 287 | lamp_2_master = 0; 288 | counter_flag = 0; 289 | 290 | } 291 | 292 | 293 | // delay(500); 294 | if(! mqtt.ping()) { 295 | mqtt.disconnect(); 296 | } 297 | 298 | 299 | // put your main code here, to run repeatedly: 300 | 301 | } 302 | void MQTT_connect() { 303 | int8_t ret; 304 | 305 | // Stop if already connected. 306 | if (mqtt.connected()) { 307 | return; 308 | } 309 | 310 | Serial.print("Connecting to MQTT... "); 311 | 312 | uint8_t retries = 3; 313 | while ((ret = mqtt.connect()) != 0) { // connect will return 0 for connected 314 | Serial.println(mqtt.connectErrorString(ret)); 315 | Serial.println("Retrying MQTT connection in 5 seconds..."); 316 | mqtt.disconnect(); 317 | delay(5000); // wait 5 seconds 318 | retries--; 319 | if (retries == 0) { 320 | // basically die and wait for WDT to reset me 321 | while (1); 322 | } 323 | } 324 | Serial.println("MQTT Connected!"); 325 | } 326 | 327 | -------------------------------------------------------------------------------- /LED_TOUCH_LAMP_mqtt_master/LED_TOUCH_LAMP_mqtt_master.ino: -------------------------------------------------------------------------------- 1 | #include 2 | #include "Adafruit_MQTT.h" 3 | #include "Adafruit_MQTT_Client.h" 4 | 5 | /************************* WiFi Access Point *********************************/ 6 | 7 | #define WLAN_SSID "SSID" 8 | #define WLAN_PASS "PASS" 9 | bool one_time_only = 1; 10 | /************************* Adafruit.io Setup *********************************/ 11 | 12 | #define AIO_SERVER "io.adafruit.com" 13 | #define AIO_SERVERPORT 1883 // use 8883 for SSL 14 | #define AIO_USERNAME "USERNAME" 15 | #define AIO_KEY "AIOkey" 16 | 17 | #define touch A0 18 | #define LED D2 19 | int x = 0; 20 | bool touch_flag = 0; 21 | bool mqtt_flag = 0; 22 | bool one_time_flag = 1; 23 | int lamp_1_master = 0; 24 | int lamp_2_master = 0; 25 | /************ Global State (you don't need to change this!) ******************/ 26 | 27 | // Create an ESP8266 WiFiClient class to connect to the MQTT server. 28 | WiFiClient client; 29 | // or... use WiFiFlientSecure for SSL 30 | //WiFiClientSecure client; 31 | 32 | // Setup the MQTT client class by passing in the WiFi client and MQTT server and login details. 33 | Adafruit_MQTT_Client mqtt(&client, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY); 34 | 35 | /****************************** Feeds ***************************************/ 36 | 37 | // Setup a feed called 'photocell' for publishing. 38 | // Notice MQTT paths for AIO follow the form: /feeds/ 39 | Adafruit_MQTT_Publish lamp_brightness_pub = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/lamp_brightness"); //lamp_1_master 40 | Adafruit_MQTT_Publish lamp_1_master_pub = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/lamp_1_master"); 41 | Adafruit_MQTT_Publish lamp_2_master_pub = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/lamp_2_master"); 42 | // Setup a feed called 'onoff' for subscribing to changes. 43 | Adafruit_MQTT_Subscribe lamp_brightness_sub = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME "/feeds/lamp_brightness"); 44 | Adafruit_MQTT_Subscribe lamp_1_master_sub = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME "/feeds/lamp_1_master"); 45 | Adafruit_MQTT_Subscribe lamp_2_master_sub = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME "/feeds/lamp_2_master"); 46 | 47 | /*************************** Sketch Code ************************************/ 48 | 49 | // Bug workaround for Arduino 1.6.6, it seems to need a function declaration 50 | // for some reason (only affects ESP8266, likely an arduino-builder bug). 51 | void MQTT_connect(); 52 | 53 | 54 | void setup() { 55 | 56 | pinMode(touch, INPUT); 57 | pinMode(LED, OUTPUT); 58 | Serial.begin(115200); 59 | 60 | Serial.println(F("Adafruit MQTT demo")); 61 | 62 | // Connect to WiFi access point. 63 | Serial.println(); Serial.println(); 64 | Serial.print("Connecting to "); 65 | Serial.println(WLAN_SSID); 66 | 67 | WiFi.begin(WLAN_SSID, WLAN_PASS); 68 | while (WiFi.status() != WL_CONNECTED) { 69 | delay(500); 70 | Serial.print("."); 71 | } 72 | Serial.println(); 73 | 74 | Serial.println("WiFi connected"); 75 | Serial.println("IP address: "); Serial.println(WiFi.localIP()); 76 | 77 | // Setup MQTT subscription for onoff feed. 78 | mqtt.subscribe(&lamp_brightness_sub); 79 | mqtt.subscribe(&lamp_1_master_sub); 80 | mqtt.subscribe(&lamp_2_master_sub); 81 | 82 | } 83 | 84 | void loop() { 85 | 86 | 87 | int brightness_value; 88 | int counter_flag = 0; 89 | 90 | MQTT_connect(); 91 | 92 | if (one_time_only) 93 | { 94 | if (!lamp_1_master_pub.publish(0)) { 95 | Serial.println(F("Failed")); 96 | } else { 97 | Serial.println(F("LAMP 1 = 0")); 98 | } 99 | Adafruit_MQTT_Subscribe *subscription; 100 | while ((subscription = mqtt.readSubscription(1))) { 101 | Serial.println("FIRST READING"); 102 | 103 | if (subscription == &lamp_1_master_sub) { 104 | Serial.print(F("Got: ")); 105 | Serial.println((char *)lamp_1_master_sub.lastread); 106 | lamp_1_master = atoi((char *)lamp_1_master_sub.lastread); 107 | } 108 | } 109 | if (!lamp_2_master_pub.publish(0)) { 110 | Serial.println(F("Failed")); 111 | } else { 112 | Serial.println(F("LAMP 2 = 0")); 113 | } 114 | 115 | while ((subscription = mqtt.readSubscription(1))) { 116 | Serial.println("SECOND READING"); 117 | 118 | if (subscription == &lamp_2_master_sub) { 119 | Serial.print(F("Got: ")); 120 | Serial.println((char *)lamp_2_master_sub.lastread); 121 | lamp_2_master = atoi((char *)lamp_2_master_sub.lastread); 122 | } 123 | } 124 | Serial.print(F("\nSending brightness val ")); 125 | Serial.print(x); 126 | Serial.print("..."); 127 | if (! lamp_brightness_pub.publish(x)) { 128 | Serial.println(F("Failed")); 129 | } else { 130 | Serial.println(F("Published value")); 131 | } 132 | analogWrite(LED, x); 133 | one_time_only = 0; 134 | } 135 | if (lamp_1_master == 0 && lamp_2_master == 0) 136 | { 137 | Serial.println("FIRST IF"); 138 | //Serial.println(analogRead(touch)); 139 | while (analogRead(touch) < 850) 140 | { 141 | delay(1); 142 | if (analogRead(touch) > 850) 143 | { 144 | lamp_1_master = 1; 145 | if (!lamp_1_master_pub.publish(1)) { 146 | Serial.println(F("Failed")); 147 | } else { 148 | Serial.println(F("LAMP 1 = 1")); 149 | } 150 | Serial.println("lamp_1_master"); 151 | break; 152 | } 153 | 154 | Adafruit_MQTT_Subscribe *subscription; 155 | while ((subscription = mqtt.readSubscription(1))) { 156 | Serial.println("mqtt"); 157 | if (subscription == &lamp_2_master_sub) { 158 | Serial.print(F("Got: ")); 159 | Serial.println((char *)lamp_2_master_sub.lastread); 160 | lamp_2_master = atoi((char *)lamp_2_master_sub.lastread); 161 | } 162 | } 163 | 164 | // Serial.println("Searching"); 165 | if (lamp_2_master == 1) 166 | break; 167 | } 168 | } 169 | 170 | if (lamp_1_master == 1 && lamp_2_master == 0 && counter_flag < 5000) 171 | { 172 | //Serial.println("SECOND IF"); 173 | repeat: 174 | // Serial.println(analogRead(touch)); 175 | if (analogRead(touch) > 850) 176 | { 177 | Serial.println("TOUCH"); 178 | counter_flag = 0; 179 | 180 | x = x + 15; 181 | if (x > 255) 182 | x = 255; 183 | analogWrite(LED, x); 184 | delay(200); 185 | } 186 | // analogWrite(LED, x); 187 | 188 | while (counter_flag < 5000) 189 | { 190 | 191 | if (analogRead(touch) > 850 && counter_flag < 5000) 192 | { 193 | delay(1); 194 | break; 195 | } 196 | else if (analogRead(touch) < 850 && counter_flag > 5000) { 197 | 198 | delay(1); 199 | break; 200 | } 201 | else 202 | { 203 | counter_flag++; 204 | delay(1); 205 | //Serial.println(counter_flag); 206 | goto repeat; 207 | } 208 | 209 | } 210 | 211 | if (counter_flag >= 5000) 212 | { 213 | 214 | 215 | Serial.print(F("\nSending brightness val from lamp 1")); 216 | Serial.print(x); 217 | Serial.print("..."); 218 | if (! lamp_brightness_pub.publish(x)) { 219 | Serial.println(F("Failed")); 220 | } else { 221 | Serial.println(F("Published value")); 222 | } 223 | 224 | } 225 | 226 | } 227 | 228 | if (lamp_1_master == 1 && lamp_2_master == 0 && counter_flag >= 5000) 229 | { 230 | 231 | while (lamp_1_master != 0) 232 | { 233 | Adafruit_MQTT_Subscribe *subscription; 234 | while ((subscription = mqtt.readSubscription(1))) { 235 | Serial.println("mqtt"); 236 | if (subscription == &lamp_brightness_sub) { 237 | Serial.print(F("Got: ")); 238 | Serial.println((char *)lamp_brightness_sub.lastread); 239 | x = atoi((char *)lamp_brightness_sub.lastread); 240 | analogWrite(LED, x); 241 | Serial.print("Value of x = "); Serial.println(x); 242 | } 243 | } 244 | if (x == 0) 245 | { 246 | counter_flag = 0; 247 | if (!lamp_1_master_pub.publish(x)) { 248 | Serial.println(F("Failed")); 249 | } else { 250 | Serial.println(F("LAMP 1 = 0")); 251 | } 252 | lamp_1_master = 0; 253 | } 254 | } 255 | 256 | } 257 | 258 | if (lamp_2_master == 1) 259 | { 260 | 261 | while (analogRead(touch) < 850) 262 | { 263 | Adafruit_MQTT_Subscribe *subscription; 264 | while ((subscription = mqtt.readSubscription(1))) { 265 | Serial.println("mqtt"); 266 | if (subscription == &lamp_brightness_sub) { 267 | Serial.print(F("Got: ")); 268 | Serial.println((char *)lamp_brightness_sub.lastread); 269 | x = atoi((char *)lamp_brightness_sub.lastread); 270 | analogWrite(LED, x); 271 | Serial.print("Value of x = "); Serial.println(x); 272 | } 273 | } 274 | } 275 | Serial.println("TOUCH"); 276 | touch_flag = 1; 277 | x = 0; 278 | analogWrite(LED, x); 279 | 280 | 281 | Serial.print(F("\nSending brightness val from lamp 1")); 282 | Serial.print(x); 283 | Serial.print("..."); 284 | if (! lamp_brightness_pub.publish(x)) { 285 | Serial.println(F("Failed")); 286 | } else { 287 | Serial.println(F("brightness = 0")); 288 | } 289 | if (!lamp_1_master_pub.publish(x)) { 290 | Serial.println(F("Failed")); 291 | } else { 292 | Serial.println(F("LAMP 1 = 0")); 293 | } 294 | lamp_1_master = 0; 295 | if (!lamp_2_master_pub.publish(x)) { 296 | Serial.println(F("Failed")); 297 | } else { 298 | Serial.println(F("LAMP 2 = 0")); 299 | } 300 | lamp_2_master = 0; 301 | counter_flag = 0; 302 | 303 | } 304 | 305 | 306 | 307 | 308 | //delay(500); 309 | 310 | if(! mqtt.ping()) { 311 | mqtt.disconnect(); 312 | } 313 | 314 | // put your main code here, to run repeatedly: 315 | 316 | } 317 | void MQTT_connect() { 318 | int8_t ret; 319 | 320 | // Stop if already connected. 321 | if (mqtt.connected()) { 322 | return; 323 | } 324 | 325 | Serial.print("Connecting to MQTT... "); 326 | 327 | uint8_t retries = 3; 328 | while ((ret = mqtt.connect()) != 0) { // connect will return 0 for connected 329 | Serial.println(mqtt.connectErrorString(ret)); 330 | Serial.println("Retrying MQTT connection in 5 seconds..."); 331 | mqtt.disconnect(); 332 | delay(5000); // wait 5 seconds 333 | retries--; 334 | if (retries == 0) { 335 | // basically die and wait for WDT to reset me 336 | while (1); 337 | } 338 | } 339 | Serial.println("MQTT Connected!"); 340 | } 341 | 342 | --------------------------------------------------------------------------------