[{"data":1,"prerenderedAt":628},["ShallowReactive",2],{"node-red-\u002Fnode-red\u002Fperipheral\u002Fesp32":3},{"id":4,"title":5,"body":6,"description":621,"extension":622,"meta":623,"navigation":264,"path":624,"seo":625,"stem":626,"__hash__":627},"nodeRed\u002Fnode-red\u002Fperipheral\u002Fesp32.md","Connect ESP32 with Node-RED using MQTT",{"type":7,"value":8,"toc":610},"minimark",[9,17,21,26,58,62,69,72,76,163,167,170,187,190,194,201,208,213,225,230,234,237,591,595,606],[10,11,13],"h1",{"id":12},"",[14,15],"binding",{"value":16},"meta.title",[18,19,20],"p",{},"This document outlines the procedure for establishing MQTT communication between an ESP32 microcontroller and a Node-RED instance.",[22,23,25],"h2",{"id":24},"requirements","Requirements",[27,28,29,33,36,48,55],"ul",{},[30,31,32],"li",{},"An ESP32 development board.",[30,34,35],{},"An active MQTT broker with access credentials.",[30,37,38,39,47],{},"A running Node-RED instance. The quickest way to get started is with ",[40,41,42],"strong",{},[43,44,46],"a",{"href":45},"\u002F","FlowFuse",", which allows you to effortlessly deploy and manage Node-RED instances and also includes a built-in MQTT broker service.",[30,49,50,51,54],{},"Arduino IDE configured with the ESP32 core and the ",[40,52,53],{},"PubSubClient"," library installed.",[30,56,57],{},"Two MQTT clients configured",[22,59,61],{"id":60},"set-up-mqtt-clients","Set Up MQTT Clients",[18,63,64,65],{},"To create the necessary MQTT clients (one for ESP32 and one for Node-RED), follow the official guide: ",[43,66,68],{"href":67},"\u002Fdocs\u002Fcloud\u002Fintroduction\u002F#enterprise-team-broker","Creating MQTT Clients in FlowFuse",[18,70,71],{},"Once created, note down the client ID, username, and password for each client. These credentials will be used later to establish communication.",[22,73,75],{"id":74},"node-red-configuration","Node-RED Configuration",[77,78,79,82,98,141,156],"ol",{},[30,80,81],{},"Open your Node-RED editor.",[30,83,84,85,91,92,97],{},"Drag either an ",[40,86,87],{},[88,89,90],"code",{},"mqtt in"," node (to receive data from ESP32) or an ",[40,93,94],{},[88,95,96],{},"mqtt out"," node (to send commands to ESP32) into your flow.",[30,99,100,101],{},"Double-click the node and configure the MQTT connection:\n",[27,102,103,113,127],{},[30,104,105,108,109,112],{},[40,106,107],{},"Server",": Your MQTT broker’s address (e.g., ",[88,110,111],{},"broker.flowfuse.cloud",")",[30,114,115,118,119,122,123,126],{},[40,116,117],{},"Port",": Typically ",[88,120,121],{},"1883"," or ",[88,124,125],{},"8883"," for TLS",[30,128,129,132,133,136,137,140],{},[40,130,131],{},"Client ID",", ",[40,134,135],{},"Username",", and ",[40,138,139],{},"Password",": Use the credentials created for the Node-RED client in your broker",[30,142,143,144,147,148,151,152,155],{},"Specify a ",[40,145,146],{},"Topic"," such as ",[88,149,150],{},"\u002Fesp32\u002Fcontrol"," for sending commands or ",[88,153,154],{},"\u002Fesp32\u002Fdata"," for receiving sensor data.",[30,157,158,159,162],{},"Click ",[40,160,161],{},"Deploy",". Once configured properly, the MQTT node should display a “connected” status.",[22,164,166],{"id":165},"esp32-programming","ESP32 Programming",[18,168,169],{},"The ESP32 firmware must perform the following actions:",[77,171,172,175,178,184],{},[30,173,174],{},"Establish a connection to the local Wi-Fi network.",[30,176,177],{},"Connect to the MQTT broker using its designated client credentials.",[30,179,180,181,183],{},"Subscribe to the topic specified in Node-RED (",[88,182,150],{},").",[30,185,186],{},"Implement a callback function to process received messages and execute corresponding actions.",[18,188,189],{},"Make sure to program the ESP32 accordingly using the Arduino IDE and the PubSubClient library to ensure reliable communication with the MQTT broker.",[22,191,193],{"id":192},"live-demo-remote-led-control","Live Demo: Remote LED Control",[195,196],"lite-youtube",{"videoid":197,"params":198,"style":199,"title":200},"ecfJ-9MxyVE","rel=0","margin-top: 20px; margin-bottom: 20px; width: 100%; height: 480px;","YouTube video player",[18,202,203,204],{},"This section provides a practical demonstration with an importable Node-RED flow and corresponding ESP32 code to remotely control the onboard LED. For more detailed, practical steps, please refer to our article ",[43,205,207],{"href":206},"\u002Fblog\u002F2024\u002F11\u002Fesp32-with-node-red\u002F","Interacting with ESP32 Using Node-RED and MQTT",[209,210,212],"h3",{"id":211},"_1-node-red-demo-flow","1. Node-RED Demo Flow",[18,214,215,216,219,220,224],{},"Import the following JSON into your Node-RED editor. This flow creates a simple dashboard with ON\u002FOFF buttons that publish to the ",[88,217,218],{},"\u002Fesp32\u002Fled"," topic. You must configure the ",[40,221,222],{},[88,223,96],{}," node with your specific broker credentials.",[226,227],"render-flow",{":height":228,"flow":229},"300","W3siaWQiOiI1OTg4N2E4MTE1Yzk1ZWFlIiwidHlwZSI6InRhYiIsImxhYmVsIjoiRmxvdyAxIiwiZGlzYWJsZWQiOmZhbHNlLCJpbmZvIjoiIiwiZW52IjpbXX0seyJpZCI6IjAyYzI1ZThhMzBmOTM3OWQiLCJ0eXBlIjoidWktYmFzZSIsIm5hbWUiOiJNeSBEYXNoYm9hcmQiLCJwYXRoIjoiL2Rhc2hib2FyZCIsImFwcEljb24iOiIiLCJpbmNsdWRlQ2xpZW50RGF0YSI6dHJ1ZSwiYWNjZXB0c0NsaWVudENvbmZpZyI6WyJ1aS1ub3RpZmljYXRpb24iLCJ1aS1jb250cm9sIl0sInNob3dQYXRoSW5TaWRlYmFyIjpmYWxzZSwic2hvd1BhZ2VUaXRsZSI6dHJ1ZSwibmF2aWdhdGlvblN0eWxlIjoiZGVmYXVsdCIsInRpdGxlQmFyU3R5bGUiOiJkZWZhdWx0In0seyJpZCI6ImNmYjJhYjlmZjMwNjYwZmMiLCJ0eXBlIjoidWktdGhlbWUiLCJuYW1lIjoiRGVmYXVsdCBUaGVtZSIsImNvbG9ycyI6eyJzdXJmYWNlIjoiI2ZmZmZmZiIsInByaW1hcnkiOiIjMDA5NENFIiwiYmdQYWdlIjoiI2VlZWVlZSIsImdyb3VwQmciOiIjZmZmZmZmIiwiZ3JvdXBPdXRsaW5lIjoiI2NjY2NjYyJ9LCJzaXplcyI6eyJkZW5zaXR5IjoiZGVmYXVsdCIsInBhZ2VQYWRkaW5nIjoiMTJweCIsImdyb3VwR2FwIjoiMTJweCIsImdyb3VwQm9yZGVyUmFkaXVzIjoiNHB4Iiwid2lkZ2V0R2FwIjoiMTJweCJ9fSx7ImlkIjoiZDI2MzU3NGFmNjg3NmM3YSIsInR5cGUiOiJ1aS1wYWdlIiwibmFtZSI6IkVTUDMyIiwidWkiOiIwMmMyNWU4YTMwZjkzNzlkIiwicGF0aCI6Ii9wYWdlMSIsImljb24iOiJob21lIiwibGF5b3V0IjoiZ3JpZCIsInRoZW1lIjoiY2ZiMmFiOWZmMzA2NjBmYyIsImJyZWFrcG9pbnRzIjpbeyJuYW1lIjoiRGVmYXVsdCIsInB4IjoiMCIsImNvbHMiOiIzIn0seyJuYW1lIjoiVGFibGV0IiwicHgiOiI1NzYiLCJjb2xzIjoiNiJ9LHsibmFtZSI6IlNtYWxsIERlc2t0b3AiLCJweCI6Ijc2OCIsImNvbHMiOiI5In0seyJuYW1lIjoiRGVza3RvcCIsInB4IjoiMTAyNCIsImNvbHMiOiIxMiJ9XSwib3JkZXIiOjEsImNsYXNzTmFtZSI6IiIsInZpc2libGUiOiJ0cnVlIiwiZGlzYWJsZWQiOiJmYWxzZSJ9LHsiaWQiOiIzYWUxMTVlYTdlZGU2ODI3IiwidHlwZSI6InVpLWdyb3VwIiwibmFtZSI6Ikdyb3VwIDEiLCJwYWdlIjoiZDI2MzU3NGFmNjg3NmM3YSIsIndpZHRoIjoiNiIsImhlaWdodCI6IjEiLCJvcmRlciI6MSwic2hvd1RpdGxlIjpmYWxzZSwiY2xhc3NOYW1lIjoiIiwidmlzaWJsZSI6InRydWUiLCJkaXNhYmxlZCI6ImZhbHNlIiwiZ3JvdXBUeXBlIjoiZGVmYXVsdCJ9LHsiaWQiOiJkZWY5N2IyOWY1ZjdiYWFiIiwidHlwZSI6Im1xdHQtYnJva2VyIiwibmFtZSI6IiIsImJyb2tlciI6ImJyb2tlci5mbG93ZnVzZS5jbG91ZCIsInBvcnQiOiIxODgzIiwiY2xpZW50aWQiOiIiLCJhdXRvQ29ubmVjdCI6dHJ1ZSwidXNldGxzIjpmYWxzZSwicHJvdG9jb2xWZXJzaW9uIjoiNCIsImtlZXBhbGl2ZSI6IjYwIiwiY2xlYW5zZXNzaW9uIjp0cnVlLCJhdXRvVW5zdWJzY3JpYmUiOnRydWUsImJpcnRoVG9waWMiOiIiLCJiaXJ0aFFvcyI6IjAiLCJiaXJ0aFJldGFpbiI6ImZhbHNlIiwiYmlydGhQYXlsb2FkIjoiIiwiYmlydGhNc2ciOnt9LCJjbG9zZVRvcGljIjoiIiwiY2xvc2VRb3MiOiIwIiwiY2xvc2VSZXRhaW4iOiJmYWxzZSIsImNsb3NlUGF5bG9hZCI6IiIsImNsb3NlTXNnIjp7fSwid2lsbFRvcGljIjoiIiwid2lsbFFvcyI6IjAiLCJ3aWxsUmV0YWluIjoiZmFsc2UiLCJ3aWxsUGF5bG9hZCI6IiIsIndpbGxNc2ciOnt9LCJ1c2VyUHJvcHMiOiIiLCJzZXNzaW9uRXhwaXJ5IjoiIn0seyJpZCI6IjVhOTE2Mjk4NmEzNGE0ZDYiLCJ0eXBlIjoidWktYnV0dG9uIiwieiI6IjU5ODg3YTgxMTVjOTVlYWUiLCJncm91cCI6IjNhZTExNWVhN2VkZTY4MjciLCJuYW1lIjoiIiwibGFiZWwiOiJPTiIsIm9yZGVyIjoxLCJ3aWR0aCI6IjMiLCJoZWlnaHQiOiIyIiwiZW11bGF0ZUNsaWNrIjpmYWxzZSwidG9vbHRpcCI6IiIsImNvbG9yIjoiIiwiYmdjb2xvciI6IiIsImNsYXNzTmFtZSI6IiIsImljb24iOiIiLCJpY29uUG9zaXRpb24iOiJsZWZ0IiwicGF5bG9hZCI6IjEiLCJwYXlsb2FkVHlwZSI6Im51bSIsInRvcGljIjoidG9waWMiLCJ0b3BpY1R5cGUiOiJtc2ciLCJidXR0b25Db2xvciI6ImdyZWVuIiwidGV4dENvbG9yIjoiIiwiaWNvbkNvbG9yIjoiIiwiZW5hYmxlQ2xpY2siOnRydWUsImVuYWJsZVBvaW50ZXJkb3duIjpmYWxzZSwicG9pbnRlcmRvd25QYXlsb2FkIjoiIiwicG9pbnRlcmRvd25QYXlsb2FkVHlwZSI6InN0ciIsImVuYWJsZVBvaW50ZXJ1cCI6ZmFsc2UsInBvaW50ZXJ1cFBheWxvYWQiOiIiLCJwb2ludGVydXBQYXlsb2FkVHlwZSI6InN0ciIsIngiOjE5MCwieSI6MTIwLCJ3aXJlcyI6W1siOTIzOWY4YTdjY2E1Yzg1OCJdXX0seyJpZCI6ImY5YzE5NDk5NGQ5NDkxYTgiLCJ0eXBlIjoidWktYnV0dG9uIiwieiI6IjU5ODg3YTgxMTVjOTVlYWUiLCJncm91cCI6IjNhZTExNWVhN2VkZTY4MjciLCJuYW1lIjoiIiwibGFiZWwiOiJPRkYiLCJvcmRlciI6Miwid2lkdGgiOiIzIiwiaGVpZ2h0IjoiMiIsImVtdWxhdGVDbGljayI6ZmFsc2UsInRvb2x0aXAiOiIiLCJjb2xvciI6IiIsImJnY29sb3IiOiIiLCJjbGFzc05hbWUiOiIiLCJpY29uIjoiIiwiaWNvblBvc2l0aW9uIjoibGVmdCIsInBheWxvYWQiOiIyIiwicGF5bG9hZFR5cGUiOiJudW0iLCJ0b3BpYyI6InRvcGljIiwidG9waWNUeXBlIjoibXNnIiwiYnV0dG9uQ29sb3IiOiJyZWQiLCJ0ZXh0Q29sb3IiOiIiLCJpY29uQ29sb3IiOiIiLCJlbmFibGVDbGljayI6dHJ1ZSwiZW5hYmxlUG9pbnRlcmRvd24iOmZhbHNlLCJwb2ludGVyZG93blBheWxvYWQiOiIiLCJwb2ludGVyZG93blBheWxvYWRUeXBlIjoic3RyIiwiZW5hYmxlUG9pbnRlcnVwIjpmYWxzZSwicG9pbnRlcnVwUGF5bG9hZCI6IiIsInBvaW50ZXJ1cFBheWxvYWRUeXBlIjoic3RyIiwieCI6MTkwLCJ5IjoxNjAsIndpcmVzIjpbWyI5MjM5ZjhhN2NjYTVjODU4Il1dfSx7ImlkIjoiOTIzOWY4YTdjY2E1Yzg1OCIsInR5cGUiOiJtcXR0IG91dCIsInoiOiI1OTg4N2E4MTE1Yzk1ZWFlIiwibmFtZSI6IiIsInRvcGljIjoiL0xlZENvbnRyb2wiLCJxb3MiOiIiLCJyZXRhaW4iOiIiLCJyZXNwVG9waWMiOiIiLCJjb250ZW50VHlwZSI6IiIsInVzZXJQcm9wcyI6IiIsImNvcnJlbCI6IiIsImV4cGlyeSI6IiIsImJyb2tlciI6ImRlZjk3YjI5ZjVmN2JhYWIiLCJ4IjozOTAsInkiOjE0MCwid2lyZXMiOltdfV0=",[209,231,233],{"id":232},"_2-esp32-demo-code","2. ESP32 Demo Code",[18,235,236],{},"The following code should be uploaded to your ESP32 board. Replace the placeholder values with your specific network and MQTT credentials.",[238,239,243],"pre",{"className":240,"code":241,"language":242,"meta":12,"style":12},"language-cpp shiki shiki-themes github-light github-dark","#include \u003CWiFi.h>\n#include \u003CPubSubClient.h>\n\n\u002F\u002F --- User-defined Credentials ---\nconst char* ssid = \"YOUR_WIFI_SSID\";\nconst char* password = \"YOUR_WIFI_PASSWORD\";\nconst char* mqtt_server = \"YOUR_MQTT_BROKER_IP\"; \u002F\u002F e.g., \"192.168.1.100\"\nconst char* mqtt_user = \"YOUR_MQTT_USERNAME\";\nconst char* mqtt_pass = \"YOUR_MQTT_PASSWORD\";\n\n\u002F\u002F --- Pin Definitions ---\n#define LED_PIN 2 \u002F\u002F Onboard LED pin\n\n\u002F\u002F --- Global Objects ---\nWiFiClient espClient;\nPubSubClient client(espClient);\n\n\u002F\u002F --- MQTT Message Handler ---\nvoid callback(char* topic, byte* payload, unsigned int length) {\n  String message;\n  for (int i = 0; i \u003C length; i++) {\n    message += (char)payload[i];\n  }\n\n  if (String(topic) == \"\u002Fesp32\u002Fled\") {\n    if (message == \"ON\") {\n      digitalWrite(LED_PIN, HIGH);\n    } else if (message == \"OFF\") {\n      digitalWrite(LED_PIN, LOW);\n    }\n  }\n}\n\n\u002F\u002F --- MQTT Reconnection Logic ---\nvoid reconnect() {\n  while (!client.connected()) {\n    if (client.connect(\"esp32-client-demo\", mqtt_user, mqtt_pass)) {\n      client.subscribe(\"\u002Fesp32\u002Fled\");\n    } else {\n      delay(5000); \u002F\u002F Wait 5 seconds before retrying\n    }\n  }\n}\n\n\u002F\u002F --- Setup Function ---\nvoid setup() {\n  pinMode(LED_PIN, OUTPUT);\n  WiFi.begin(ssid, password);\n  client.setServer(mqtt_server, 1883);\n  client.setCallback(callback);\n}\n\n\u002F\u002F --- Main Loop ---\nvoid loop() {\n  if (!client.connected()) {\n    reconnect();\n  }\n  client.loop();\n}\n","cpp",[88,244,245,253,259,266,272,278,284,290,296,302,307,313,322,327,333,339,345,350,356,362,368,374,380,386,391,397,403,409,415,421,427,432,438,443,449,455,461,467,473,479,485,490,495,500,505,511,517,523,529,535,541,546,551,557,563,569,575,580,586],{"__ignoreMap":12},[246,247,250],"span",{"class":248,"line":249},"line",1,[246,251,252],{},"#include \u003CWiFi.h>\n",[246,254,256],{"class":248,"line":255},2,[246,257,258],{},"#include \u003CPubSubClient.h>\n",[246,260,262],{"class":248,"line":261},3,[246,263,265],{"emptyLinePlaceholder":264},true,"\n",[246,267,269],{"class":248,"line":268},4,[246,270,271],{},"\u002F\u002F --- User-defined Credentials ---\n",[246,273,275],{"class":248,"line":274},5,[246,276,277],{},"const char* ssid = \"YOUR_WIFI_SSID\";\n",[246,279,281],{"class":248,"line":280},6,[246,282,283],{},"const char* password = \"YOUR_WIFI_PASSWORD\";\n",[246,285,287],{"class":248,"line":286},7,[246,288,289],{},"const char* mqtt_server = \"YOUR_MQTT_BROKER_IP\"; \u002F\u002F e.g., \"192.168.1.100\"\n",[246,291,293],{"class":248,"line":292},8,[246,294,295],{},"const char* mqtt_user = \"YOUR_MQTT_USERNAME\";\n",[246,297,299],{"class":248,"line":298},9,[246,300,301],{},"const char* mqtt_pass = \"YOUR_MQTT_PASSWORD\";\n",[246,303,305],{"class":248,"line":304},10,[246,306,265],{"emptyLinePlaceholder":264},[246,308,310],{"class":248,"line":309},11,[246,311,312],{},"\u002F\u002F --- Pin Definitions ---\n",[246,314,316,319],{"class":248,"line":315},12,[246,317,318],{},"#define LED_PIN 2",[246,320,321],{}," \u002F\u002F Onboard LED pin\n",[246,323,325],{"class":248,"line":324},13,[246,326,265],{"emptyLinePlaceholder":264},[246,328,330],{"class":248,"line":329},14,[246,331,332],{},"\u002F\u002F --- Global Objects ---\n",[246,334,336],{"class":248,"line":335},15,[246,337,338],{},"WiFiClient espClient;\n",[246,340,342],{"class":248,"line":341},16,[246,343,344],{},"PubSubClient client(espClient);\n",[246,346,348],{"class":248,"line":347},17,[246,349,265],{"emptyLinePlaceholder":264},[246,351,353],{"class":248,"line":352},18,[246,354,355],{},"\u002F\u002F --- MQTT Message Handler ---\n",[246,357,359],{"class":248,"line":358},19,[246,360,361],{},"void callback(char* topic, byte* payload, unsigned int length) {\n",[246,363,365],{"class":248,"line":364},20,[246,366,367],{},"  String message;\n",[246,369,371],{"class":248,"line":370},21,[246,372,373],{},"  for (int i = 0; i \u003C length; i++) {\n",[246,375,377],{"class":248,"line":376},22,[246,378,379],{},"    message += (char)payload[i];\n",[246,381,383],{"class":248,"line":382},23,[246,384,385],{},"  }\n",[246,387,389],{"class":248,"line":388},24,[246,390,265],{"emptyLinePlaceholder":264},[246,392,394],{"class":248,"line":393},25,[246,395,396],{},"  if (String(topic) == \"\u002Fesp32\u002Fled\") {\n",[246,398,400],{"class":248,"line":399},26,[246,401,402],{},"    if (message == \"ON\") {\n",[246,404,406],{"class":248,"line":405},27,[246,407,408],{},"      digitalWrite(LED_PIN, HIGH);\n",[246,410,412],{"class":248,"line":411},28,[246,413,414],{},"    } else if (message == \"OFF\") {\n",[246,416,418],{"class":248,"line":417},29,[246,419,420],{},"      digitalWrite(LED_PIN, LOW);\n",[246,422,424],{"class":248,"line":423},30,[246,425,426],{},"    }\n",[246,428,430],{"class":248,"line":429},31,[246,431,385],{},[246,433,435],{"class":248,"line":434},32,[246,436,437],{},"}\n",[246,439,441],{"class":248,"line":440},33,[246,442,265],{"emptyLinePlaceholder":264},[246,444,446],{"class":248,"line":445},34,[246,447,448],{},"\u002F\u002F --- MQTT Reconnection Logic ---\n",[246,450,452],{"class":248,"line":451},35,[246,453,454],{},"void reconnect() {\n",[246,456,458],{"class":248,"line":457},36,[246,459,460],{},"  while (!client.connected()) {\n",[246,462,464],{"class":248,"line":463},37,[246,465,466],{},"    if (client.connect(\"esp32-client-demo\", mqtt_user, mqtt_pass)) {\n",[246,468,470],{"class":248,"line":469},38,[246,471,472],{},"      client.subscribe(\"\u002Fesp32\u002Fled\");\n",[246,474,476],{"class":248,"line":475},39,[246,477,478],{},"    } else {\n",[246,480,482],{"class":248,"line":481},40,[246,483,484],{},"      delay(5000); \u002F\u002F Wait 5 seconds before retrying\n",[246,486,488],{"class":248,"line":487},41,[246,489,426],{},[246,491,493],{"class":248,"line":492},42,[246,494,385],{},[246,496,498],{"class":248,"line":497},43,[246,499,437],{},[246,501,503],{"class":248,"line":502},44,[246,504,265],{"emptyLinePlaceholder":264},[246,506,508],{"class":248,"line":507},45,[246,509,510],{},"\u002F\u002F --- Setup Function ---\n",[246,512,514],{"class":248,"line":513},46,[246,515,516],{},"void setup() {\n",[246,518,520],{"class":248,"line":519},47,[246,521,522],{},"  pinMode(LED_PIN, OUTPUT);\n",[246,524,526],{"class":248,"line":525},48,[246,527,528],{},"  WiFi.begin(ssid, password);\n",[246,530,532],{"class":248,"line":531},49,[246,533,534],{},"  client.setServer(mqtt_server, 1883);\n",[246,536,538],{"class":248,"line":537},50,[246,539,540],{},"  client.setCallback(callback);\n",[246,542,544],{"class":248,"line":543},51,[246,545,437],{},[246,547,549],{"class":248,"line":548},52,[246,550,265],{"emptyLinePlaceholder":264},[246,552,554],{"class":248,"line":553},53,[246,555,556],{},"\u002F\u002F --- Main Loop ---\n",[246,558,560],{"class":248,"line":559},54,[246,561,562],{},"void loop() {\n",[246,564,566],{"class":248,"line":565},55,[246,567,568],{},"  if (!client.connected()) {\n",[246,570,572],{"class":248,"line":571},56,[246,573,574],{},"    reconnect();\n",[246,576,578],{"class":248,"line":577},57,[246,579,385],{},[246,581,583],{"class":248,"line":582},58,[246,584,585],{},"  client.loop();\n",[246,587,589],{"class":248,"line":588},59,[246,590,437],{},[209,592,594],{"id":593},"_3-verification","3. Verification",[77,596,597,600,603],{},[30,598,599],{},"Deploy the imported flow in Node-RED and open the dashboard interface.",[30,601,602],{},"Upload the configured sketch to the ESP32 board.",[30,604,605],{},"Operate the ON and OFF buttons on the dashboard to toggle the ESP32's onboard LED.",[607,608,609],"style",{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":12,"searchDepth":255,"depth":255,"links":611},[612,613,614,615,616],{"id":24,"depth":255,"text":25},{"id":60,"depth":255,"text":61},{"id":74,"depth":255,"text":75},{"id":165,"depth":255,"text":166},{"id":192,"depth":255,"text":193,"children":617},[618,619,620],{"id":211,"depth":261,"text":212},{"id":232,"depth":261,"text":233},{"id":593,"depth":261,"text":594},"Learn how to send and receive MQTT messages between ESP32 and Node-RED using FlowFuse.","md",{},"\u002Fnode-red\u002Fperipheral\u002Fesp32",{"title":5,"description":621},"node-red\u002Fperipheral\u002Fesp32","B2nLVw6jK_yrsCPzAC5v0mNzjRgcYzEtUCGaBsX1Obc",1780070557871]