{"id":94749,"date":"2025-01-27T02:26:37","date_gmt":"2025-01-26T22:56:37","guid":{"rendered":"https:\/\/nabfollower.com\/blog\/control-a-dmx-light-fixture-using-an-esp32-over-bluetooth-41g7\/"},"modified":"2025-01-27T02:26:37","modified_gmt":"2025-01-26T22:56:37","slug":"control-a-dmx-light-fixture-using-an-esp32-over-bluetooth-41g7","status":"publish","type":"post","link":"https:\/\/nabfollower.com\/blog\/control-a-dmx-light-fixture-using-an-esp32-over-bluetooth-41g7\/","title":{"rendered":"\u06cc\u06a9 \u0686\u0631\u0627\u063a DMX \u0631\u0627 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 ESP32 \u0627\u0632 \u0637\u0631\u06cc\u0642 \u0628\u0644\u0648\u062a\u0648\u062b \u06a9\u0646\u062a\u0631\u0644 \u06a9\u0646\u06cc\u062f"},"content":{"rendered":"<div data-article-id=\"2242736\" id=\"article-body\">\n<p>\u0627\u06cc\u0646 \u067e\u0631\u0648\u0698\u0647 \u06cc\u06a9 \u0645\u062b\u0627\u0644 \u0633\u0627\u062f\u0647 \u0627\u0632 \u0646\u062d\u0648\u0647 \u06a9\u0646\u062a\u0631\u0644 \u06cc\u06a9 \u0686\u0631\u0627\u063a DMX \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 ESP32 \u0627\u0632 \u0637\u0631\u06cc\u0642 \u0628\u0644\u0648\u062a\u0648\u062b \u0627\u0633\u062a. ESP32 \u062f\u0627\u062f\u0647 \u0647\u0627\u06cc DMX \u0631\u0627 \u0627\u0632 \u0637\u0631\u06cc\u0642 \u0628\u0644\u0648\u062a\u0648\u062b \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc \u06a9\u0646\u062f \u0648 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0645\u0627\u0698\u0648\u0644 RS485 \u0628\u0647 \u062f\u0633\u062a\u06af\u0627\u0647 \u0646\u0648\u0631 DMX \u0627\u0631\u0633\u0627\u0644 \u0645\u06cc \u06a9\u0646\u062f.<\/p>\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_84 counter-hierarchy ez-toc-counter-rtl ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">\u0641\u0647\u0631\u0633\u062a \u0645\u0637\u0627\u0644\u0628<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/nabfollower.com\/blog\/control-a-dmx-light-fixture-using-an-esp32-over-bluetooth-41g7\/#%D9%85%D9%82%D8%AF%D9%85%D9%87\" >\u0645\u0642\u062f\u0645\u0647<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/nabfollower.com\/blog\/control-a-dmx-light-fixture-using-an-esp32-over-bluetooth-41g7\/#ESP32\" >ESP32<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/nabfollower.com\/blog\/control-a-dmx-light-fixture-using-an-esp32-over-bluetooth-41g7\/#esp_dmx\" >esp_dmx<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/nabfollower.com\/blog\/control-a-dmx-light-fixture-using-an-esp32-over-bluetooth-41g7\/#%D8%B3%D8%AE%D8%AA_%D8%A7%D9%81%D8%B2%D8%A7%D8%B1\" >\u0633\u062e\u062a \u0627\u0641\u0632\u0627\u0631<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/nabfollower.com\/blog\/control-a-dmx-light-fixture-using-an-esp32-over-bluetooth-41g7\/#%D9%86%D8%B1%D9%85_%D8%A7%D9%81%D8%B2%D8%A7%D8%B1\" >\u0646\u0631\u0645 \u0627\u0641\u0632\u0627\u0631<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/nabfollower.com\/blog\/control-a-dmx-light-fixture-using-an-esp32-over-bluetooth-41g7\/#%DA%A9%D8%AF\" >\u06a9\u062f<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/nabfollower.com\/blog\/control-a-dmx-light-fixture-using-an-esp32-over-bluetooth-41g7\/#%DA%A9%D8%AF_%DA%A9%D8%A7%D9%85%D9%84\" >\u06a9\u062f \u06a9\u0627\u0645\u0644<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/nabfollower.com\/blog\/control-a-dmx-light-fixture-using-an-esp32-over-bluetooth-41g7\/#%D8%AA%D8%B3%D8%AA_%DA%A9%D8%B1%D8%AF%D9%86\" >\u062a\u0633\u062a \u06a9\u0631\u062f\u0646<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/nabfollower.com\/blog\/control-a-dmx-light-fixture-using-an-esp32-over-bluetooth-41g7\/#%D9%86%D8%AD%D9%88%D9%87_%D8%A7%D8%B1%D8%B3%D8%A7%D9%84_%D8%A7%D8%B7%D9%84%D8%A7%D8%B9%D8%A7%D8%AA_DMX_%D8%A7%D8%B2_%D8%B7%D8%B1%DB%8C%D9%82_%D8%A8%D9%84%D9%88%D8%AA%D9%88%D8%AB\" >\u0646\u062d\u0648\u0647 \u0627\u0631\u0633\u0627\u0644 \u0627\u0637\u0644\u0627\u0639\u0627\u062a DMX \u0627\u0632 \u0637\u0631\u06cc\u0642 \u0628\u0644\u0648\u062a\u0648\u062b<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/nabfollower.com\/blog\/control-a-dmx-light-fixture-using-an-esp32-over-bluetooth-41g7\/#%D9%86%D8%AA%DB%8C%D8%AC%D9%87_%D9%86%D9%87%D8%A7%DB%8C%DB%8C\" >\u0646\u062a\u06cc\u062c\u0647 \u0646\u0647\u0627\u06cc\u06cc<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/nabfollower.com\/blog\/control-a-dmx-light-fixture-using-an-esp32-over-bluetooth-41g7\/#%DA%86%D9%86%D8%AF_%D8%B9%DA%A9%D8%B3_%D8%A7%D8%B2_%D9%86%D8%AA%DB%8C%D8%AC%D9%87_%D9%86%D9%87%D8%A7%DB%8C%DB%8C\" >\u0686\u0646\u062f \u0639\u06a9\u0633 \u0627\u0632 \u0646\u062a\u06cc\u062c\u0647 \u0646\u0647\u0627\u06cc\u06cc<\/a><\/li><\/ul><\/li><\/ul><\/nav><\/div>\n<h2><span class=\"ez-toc-section\" id=\"%D9%85%D9%82%D8%AF%D9%85%D9%87\"><\/span>\n<p>  \u0645\u0642\u062f\u0645\u0647<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0647\u062f\u0641 \u0645\u0646 \u06a9\u0646\u062a\u0631\u0644 \u06cc\u06a9 \u0686\u0631\u0627\u063a DMX \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0627\u0631\u062a\u0628\u0627\u0637 \u0633\u0631\u06cc\u0627\u0644 \u0648 React Native \u0628\u0631\u0627\u06cc \u06cc\u06a9 \u067e\u0631\u0648\u0698\u0647 \u0628\u0648\u062f. \u067e\u0633 \u0627\u0632 \u0686\u0646\u062f \u0631\u0648\u0632 \u062a\u062d\u0642\u06cc\u0642 \u0645\u062a\u0648\u062c\u0647 \u0634\u062f\u0645 \u06a9\u0647 \u0627\u0631\u062a\u0628\u0627\u0637 \u0633\u0631\u06cc\u0627\u0644 \u0628\u0631\u0627\u06cc React Native \u0627\u06cc\u062f\u0647\u200c\u0622\u0644 \u0646\u06cc\u0633\u062a\u060c \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u062a\u0635\u0645\u06cc\u0645 \u06af\u0631\u0641\u062a\u0645 \u0627\u0632 ESP32 \u0628\u0631\u0627\u06cc \u0627\u062a\u0635\u0627\u0644 \u0627\u0632 \u0637\u0631\u06cc\u0642 \u0628\u0644\u0648\u062a\u0648\u062b \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u0645 \u0648 \u0627\u062c\u0627\u0632\u0647 \u062f\u0647\u0645 ESP32 \u0627\u0631\u062a\u0628\u0627\u0637 \u0633\u0631\u06cc\u0627\u0644 \u0631\u0627 \u0628\u0627 \u0686\u0631\u0627\u063a DMX \u0627\u0646\u062c\u0627\u0645 \u062f\u0647\u062f.<\/p>\n<p>\u0645\u0627\u0698\u0648\u0644 RS485 \u0645\u0648\u0631\u062f \u0646\u06cc\u0627\u0632 \u0627\u0633\u062a \u0632\u06cc\u0631\u0627 \u062f\u0627\u062f\u0647 \u0647\u0627\u06cc DMX \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u067e\u0631\u0648\u062a\u06a9\u0644 EIA-485 \u06a9\u0647 \u0628\u0647 \u0646\u0627\u0645 RS-485 \u0646\u06cc\u0632 \u0634\u0646\u0627\u062e\u062a\u0647 \u0645\u06cc \u0634\u0648\u062f\u060c \u0645\u0646\u062a\u0642\u0644 \u0645\u06cc \u0634\u0648\u062f \u0648 ESP32 \u0631\u0627\u0628\u0637 RS-485 \u0646\u062f\u0627\u0631\u062f.<\/p>\n<p>\u0686\u0631\u0627\u063a \u0647\u0627\u06cc \u0645\u0648\u0631\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u062f\u0631 \u0627\u06cc\u0646 \u0645\u062b\u0627\u0644 \u0686\u0647\u0627\u0631 \u0646\u0642\u0637\u0647 LED PARty TCL \u0627\u0632 Eurolite \u0647\u0633\u062a\u0646\u062f. \u062f\u0631 \u0632\u06cc\u0631 \u0646\u0645\u0648\u062f\u0627\u0631 DMX \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u062f \u06a9\u0647 \u06a9\u0627\u0646\u0627\u0644 \u0647\u0627\u06cc DMX \u0627\u062e\u062a\u0635\u0627\u0635 \u062f\u0627\u062f\u0647 \u0634\u062f\u0647 \u0628\u0647 \u0647\u0631 \u0686\u0631\u0627\u063a \u0648 \u0639\u0645\u0644\u06a9\u0631\u062f\u0647\u0627\u06cc \u0645\u0631\u0628\u0648\u0637 \u0628\u0647 \u0622\u0646\u0647\u0627 \u0631\u0627 \u0646\u0634\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f.<\/p>\n<p><\/p>\n<p>\u0647\u0631 \u06a9\u0627\u0646\u0627\u0644 \u06cc\u06a9 \u0648\u06cc\u0698\u06af\u06cc \u062e\u0627\u0635 \u0627\u0632 \u0644\u0627\u0645\u067e \u0631\u0627 \u06a9\u0646\u062a\u0631\u0644 \u0645\u06cc \u06a9\u0646\u062f\u060c \u0645\u0627\u0646\u0646\u062f \u0631\u0646\u06af\u060c \u0634\u062f\u062a \u06cc\u0627 \u062d\u0631\u06a9\u062a\u060c \u06a9\u0647 \u0627\u0645\u06a9\u0627\u0646 \u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u062f\u0642\u06cc\u0642 \u0628\u0631\u0627\u06cc \u062c\u0644\u0648\u0647 \u0647\u0627\u06cc \u0646\u0648\u0631 \u067e\u0648\u06cc\u0627 \u0631\u0627 \u0641\u0631\u0627\u0647\u0645 \u0645\u06cc \u06a9\u0646\u062f.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"ESP32\"><\/span>\n<p>  ESP32<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>ESP32 \u06cc\u06a9 \u0645\u06cc\u06a9\u0631\u0648\u06a9\u0646\u062a\u0631\u0644\u0631 \u06a9\u0645 \u0647\u0632\u06cc\u0646\u0647 \u0648 \u06a9\u0645 \u0645\u0635\u0631\u0641 \u0628\u0627 Wi-Fi \u06cc\u06a9\u067e\u0627\u0631\u0686\u0647 \u0648 \u0628\u0644\u0648\u062a\u0648\u062b \u062f\u0648 \u062d\u0627\u0644\u062a\u0647 \u0627\u0633\u062a. \u0627\u06cc\u0646 \u06cc\u06a9 \u0627\u0646\u062a\u062e\u0627\u0628 \u0639\u0627\u0644\u06cc \u0628\u0631\u0627\u06cc \u067e\u0631\u0648\u0698\u0647 \u0647\u0627\u06cc \u0627\u06cc\u0646\u062a\u0631\u0646\u062a \u0627\u0634\u06cc\u0627 \u0627\u0633\u062a \u0632\u06cc\u0631\u0627 \u062f\u0627\u0631\u0627\u06cc \u0648\u06cc\u0698\u06af\u06cc \u0647\u0627\u06cc \u0632\u06cc\u0627\u062f\u06cc \u0627\u0633\u062a \u0648 \u0628\u0647 \u0631\u0627\u062d\u062a\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0631\u06cc\u0632\u06cc \u0645\u06cc \u0634\u0648\u062f. ESP32 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 Arduino IDE \u0628\u0631\u0646\u0627\u0645\u0647 \u0631\u06cc\u0632\u06cc \u0634\u062f\u0647 \u0627\u0633\u062a\u060c \u06cc\u06a9 \u067e\u0644\u062a \u0641\u0631\u0645 \u06a9\u0627\u0631\u0628\u0631 \u067e\u0633\u0646\u062f \u06a9\u0647 \u0628\u0647 \u0637\u0648\u0631 \u062e\u0627\u0635 \u0628\u0631\u0627\u06cc \u067e\u0631\u0648\u0698\u0647 \u0647\u0627\u06cc \u0645\u06cc\u06a9\u0631\u0648\u06a9\u0646\u062a\u0631\u0644\u0631 \u0637\u0631\u0627\u062d\u06cc \u0634\u062f\u0647 \u0627\u0633\u062a. \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u06af\u0633\u062a\u0631\u062f\u0647 \u0627\u0632 \u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647 \u0648 \u0631\u0627\u0628\u0637 \u0633\u0627\u062f\u0647 \u0622\u0646\u060c \u0622\u0646 \u0631\u0627 \u0628\u0631\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0647\u0627\u06cc IoT \u0627\u06cc\u062f\u0647\u200c\u0622\u0644 \u0645\u06cc\u200c\u06a9\u0646\u062f \u0648 \u062a\u0648\u0633\u0639\u0647\u200c\u062f\u0647\u0646\u062f\u06af\u0627\u0646 \u0631\u0627 \u0642\u0627\u062f\u0631 \u0645\u06cc\u200c\u0633\u0627\u0632\u062f \u062a\u0627 \u067e\u0631\u0648\u0698\u0647\u200c\u0647\u0627 \u0631\u0627 \u0628\u0647\u200c\u0637\u0648\u0631 \u06a9\u0627\u0631\u0622\u0645\u062f \u0646\u0645\u0648\u0646\u0647\u200c\u0633\u0627\u0632\u06cc \u0648 \u0627\u062c\u0631\u0627 \u06a9\u0646\u0646\u062f.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"esp_dmx\"><\/span>\n<p>  esp_dmx<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u062f\u0631 \u0627\u06cc\u0646 \u067e\u0631\u0648\u0698\u0647\u060c \u0645\u0646 \u0627\u0632 \u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647 esp_dmx \u0628\u0631\u0627\u06cc \u0627\u0631\u0633\u0627\u0644 \u062f\u0627\u062f\u0647 \u0647\u0627\u06cc DMX \u0628\u0647 \u062f\u0633\u062a\u06af\u0627\u0647 \u0646\u0648\u0631 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u0645. \u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647 esp_dmx \u06cc\u06a9 \u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647 \u0633\u0627\u062f\u0647 \u0627\u0633\u062a \u06a9\u0647 \u0628\u0647 \u0634\u0645\u0627 \u0627\u0645\u06a9\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f \u062f\u0627\u062f\u0647 \u0647\u0627\u06cc DMX \u0631\u0627 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u067e\u0631\u0648\u062a\u06a9\u0644 RS-485 \u0627\u0631\u0633\u0627\u0644 \u06a9\u0646\u06cc\u062f. \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647 \u0622\u0633\u0627\u0646 \u0627\u0633\u062a \u0648 \u0646\u0645\u0648\u0646\u0647 \u0647\u0627\u06cc \u0632\u06cc\u0627\u062f\u06cc \u062f\u0627\u0631\u062f \u06a9\u0647 \u0646\u062d\u0648\u0647 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0622\u0646 \u0631\u0627 \u0628\u0647 \u0634\u0645\u0627 \u0646\u0634\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"%D8%B3%D8%AE%D8%AA_%D8%A7%D9%81%D8%B2%D8%A7%D8%B1\"><\/span>\n<p>  \u0633\u062e\u062a \u0627\u0641\u0632\u0627\u0631<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0628\u0631\u0627\u06cc \u0633\u0627\u062e\u062a \u0627\u06cc\u0646 \u067e\u0631\u0648\u0698\u0647 \u0628\u0647 \u0633\u062e\u062a \u0627\u0641\u0632\u0627\u0631 \u0632\u06cc\u0631 \u0646\u06cc\u0627\u0632 \u062f\u0627\u0631\u06cc\u062f:<\/p>\n<ul>\n<li>\n<strong>1x \u06cc\u06a9 \u0628\u0631\u062f \u062a\u0648\u0633\u0639\u0647 ESP32<\/strong> (\u0645\u0646 \u0627\u0632 ESP32 WROOM-32D \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0631\u062f\u0645)<br \/>\n<em>\u0627\u06cc\u0646 \u0645\u06cc\u06a9\u0631\u0648\u06a9\u0646\u062a\u0631\u0644\u0631 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0645\u063a\u0632 \u067e\u0631\u0648\u0698\u0647 \u0639\u0645\u0644 \u0645\u06cc \u06a9\u0646\u062f \u0648 \u0627\u0631\u062a\u0628\u0627\u0637 \u0628\u0644\u0648\u062a\u0648\u062b \u0648 \u062a\u0648\u0644\u06cc\u062f \u0633\u06cc\u06af\u0646\u0627\u0644 DMX \u0631\u0627 \u0627\u0645\u06a9\u0627\u0646 \u067e\u0630\u06cc\u0631 \u0645\u06cc \u06a9\u0646\u062f.<\/em>\n<\/li>\n<li>\n<strong>1x LED \u0622\u0628\u06cc<\/strong><br \/>\n<em>\u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0646\u0634\u0627\u0646\u06af\u0631 \u0648\u0636\u0639\u06cc\u062a \u0628\u0631\u0627\u06cc \u0646\u0634\u0627\u0646 \u062f\u0627\u062f\u0646 \u0648\u0636\u0639\u06cc\u062a \u0627\u062a\u0635\u0627\u0644 \u0628\u0644\u0648\u062a\u0648\u062b \u06cc\u0627 \u0641\u0639\u0627\u0644\u06cc\u062a \u062f\u0627\u062f\u0647 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u0634\u0648\u062f.<\/em>\n<\/li>\n<li>\n<strong>\u0645\u0642\u0627\u0648\u0645\u062a 1\u00d7220 \u0627\u0647\u0645<\/strong><br \/>\n<em>\u062c\u0631\u06cc\u0627\u0646 \u0631\u0627 \u0628\u0647 LED \u0622\u0628\u06cc \u0645\u062d\u062f\u0648\u062f \u0645\u06cc \u06a9\u0646\u062f \u0648 \u0627\u0632 \u0622\u0633\u06cc\u0628 \u062c\u0644\u0648\u06af\u06cc\u0631\u06cc \u0645\u06cc \u06a9\u0646\u062f.<\/em>\n<\/li>\n<li>\n<strong>1x \u0645\u0627\u0698\u0648\u0644 RS485<\/strong><br \/>\n<em>\u0633\u06cc\u06af\u0646\u0627\u0644 \u0647\u0627\u06cc UART ESP32 \u0631\u0627 \u0628\u0647 \u067e\u0631\u0648\u062a\u06a9\u0644 DMX512 \u062a\u0628\u062f\u06cc\u0644 \u0645\u06cc \u06a9\u0646\u062f \u06a9\u0647 \u0628\u0631\u0627\u06cc \u06a9\u0646\u062a\u0631\u0644 \u0648\u0633\u0627\u06cc\u0644 DMX \u0636\u0631\u0648\u0631\u06cc \u0627\u0633\u062a.<\/em>\n<\/li>\n<li>\n<strong>1 \u06a9\u0627\u0646\u06a9\u062a\u0648\u0631 XLR\/DMX \u0632\u0646<\/strong><br \/>\n<em>\u0627\u0632 \u0637\u0631\u06cc\u0642 \u06a9\u0627\u0628\u0644 \u0627\u0633\u062a\u0627\u0646\u062f\u0627\u0631\u062f DMX \u0628\u0627 \u0686\u0631\u0627\u063a \u0647\u0627\u06cc \u0633\u0627\u0632\u06af\u0627\u0631 \u0628\u0627 DMX \u0627\u0631\u062a\u0628\u0627\u0637 \u0628\u0631\u0642\u0631\u0627\u0631 \u0645\u06cc \u06a9\u0646\u062f.<\/em><br \/>\n-** 1x \u06a9\u0627\u0628\u0644 USB-C**<br \/>\n<em>\u0628\u0631\u0642 ESP32 \u0631\u0627 \u062a\u0627\u0645\u06cc\u0646 \u0645\u06cc \u06a9\u0646\u062f \u0648 \u0627\u0645\u06a9\u0627\u0646 \u0628\u0631\u0646\u0627\u0645\u0647 \u0646\u0648\u06cc\u0633\u06cc \u0631\u0627 \u0641\u0631\u0627\u0647\u0645 \u0645\u06cc \u06a9\u0646\u062f.<\/em>\n<\/li>\n<li><strong>\u0686\u0646\u062f \u0633\u06cc\u0645 \u062c\u0627\u0645\u067e\u0631<\/strong><\/li>\n<li>\n<strong>\u0644\u0627\u0645\u067e \u0633\u0627\u0632\u06af\u0627\u0631 \u0628\u0627 DMX<\/strong><br \/>\n<em>\u062f\u0633\u062a\u06af\u0627\u0647 \u062e\u0631\u0648\u062c\u06cc \u06a9\u0647 \u0628\u0647 \u0633\u06cc\u06af\u0646\u0627\u0644 \u0647\u0627\u06cc DMX \u0627\u0631\u0633\u0627\u0644 \u0634\u062f\u0647 \u062a\u0648\u0633\u0637 ESP32 \u067e\u0627\u0633\u062e \u0645\u06cc \u062f\u0647\u062f.<\/em>\n<\/li>\n<li>\n<strong>\u06a9\u0627\u0628\u0644 XLR\/DMX<\/strong><br \/>\n<em>\u0628\u0631\u0627\u06cc \u0627\u062a\u0635\u0627\u0644 ESP32 \u0628\u0647 \u0686\u0631\u0627\u063a \u0628\u0631\u0642<\/em>\n<\/li>\n<\/ul>\n<p><img decoding=\"async\" src=\"https:\/\/media2.dev.to\/dynamic\/image\/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto\/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg8nnoej8tde08q63isvy.png\" alt=\"\u0646\u0645\u0648\u062f\u0627\u0631 \u0633\u06cc\u0645 \u06a9\u0634\u06cc\" loading=\"lazy\" width=\"800\" height=\"594\" title=\"\"><\/p>\n<h2><span class=\"ez-toc-section\" id=\"%D9%86%D8%B1%D9%85_%D8%A7%D9%81%D8%B2%D8%A7%D8%B1\"><\/span>\n<p>  \u0646\u0631\u0645 \u0627\u0641\u0632\u0627\u0631<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0628\u0631\u0627\u06cc \u0633\u0627\u062e\u062a \u0627\u06cc\u0646 \u067e\u0631\u0648\u0698\u0647 \u0628\u0647 \u0622\u0631\u062f\u0648\u06cc\u0646\u0648 IDE \u0646\u06cc\u0627\u0632 \u062f\u0627\u0631\u06cc\u062f. \u0647\u0646\u06af\u0627\u0645\u06cc \u06a9\u0647 Arduino IDE \u0631\u0627 \u0646\u0635\u0628 \u06a9\u0631\u062f\u06cc\u062f\u060c \u0627\u0628\u062a\u062f\u0627 \u0628\u0627\u06cc\u062f \u0628\u0633\u062a\u0647 \u0647\u0633\u062a\u0647 ESP32 \u0631\u0627 \u0646\u0635\u0628 \u06a9\u0646\u06cc\u062f. BOARDS MANAGER \u0631\u0627 \u0627\u0632 \u0645\u0646\u0648\u06cc \u0633\u0645\u062a \u0686\u067e \u0628\u0627\u0632 \u06a9\u0646\u06cc\u062f \u0648 ESP32 \u0631\u0627 \u062c\u0633\u062a\u062c\u0648 \u06a9\u0646\u06cc\u062f. \u0628\u0633\u062a\u0647 ESP32 by Espressif Systems \u0631\u0627 \u0646\u0635\u0628 \u06a9\u0646\u06cc\u062f.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/media2.dev.to\/dynamic\/image\/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto\/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqls7sioionwdmvxhouy9.png\" alt=\"Arduino IDE BOARDS MANAGER\" loading=\"lazy\" width=\"367\" height=\"658\" title=\"\"><\/p>\n<p>\u0645\u0646 \u0628\u0631\u062e\u06cc \u0645\u0634\u06a9\u0644\u0627\u062a \u0633\u0627\u0632\u06af\u0627\u0631\u06cc \u0628\u0627 \u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647 esp_dmx \u0648 ESP32 \u062f\u0627\u0634\u062a\u0645\u060c \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0645\u062c\u0628\u0648\u0631 \u0634\u062f\u0645 \u0628\u0633\u062a\u0647 \u0647\u0633\u062a\u0647 ESP32 \u0631\u0627 \u0628\u0647 \u0646\u0633\u062e\u0647 2.0.17 \u062a\u0646\u0632\u0644 \u062f\u0647\u0645.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/media2.dev.to\/dynamic\/image\/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto\/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F25frnxj8827nvv7hy69k.png\" alt=\"Arduino IDE BOARDS MANAGER - \u0628\u0647 2.0.17 \u062a\u0646\u0632\u0644 \u062f\u0647\u06cc\u062f\" loading=\"lazy\" width=\"269\" height=\"498\" title=\"\"><br \/>\u0627\u06af\u0631 \u0628\u0627 \u062e\u0637\u0627\u06cc \u0632\u06cc\u0631 \u0645\u0648\u0627\u062c\u0647 \u0634\u062f\u06cc\u062f \u0647\u0645\u06cc\u0646 \u06a9\u0627\u0631 \u0631\u0627 \u0627\u0646\u062c\u0627\u0645 \u062f\u0647\u06cc\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight shell\"><code>esp-dmx_ble.ino:92:52: error: conversion from <span class=\"s1\">'String'<\/span> to non-scalar <span class=\"nb\">type<\/span> <span class=\"s1\">'std::string'<\/span> <span class=\"o\">{<\/span>aka <span class=\"s1\">'std::__cxx11::basic_string<char>'<\/char><\/span><span class=\"o\">}<\/span> requested\n   92 |     std::string rxValue <span class=\"o\">=<\/span> pCharacteristic-&gt;getValue<span class=\"o\">()<\/span><span class=\"p\">;<\/span>\n      |                           ~~~~~~~~~~~~~~~~~~~~~~~~~^~\n\n<span class=\"nb\">exit <\/span>status 1\n\nCompilation error: conversion from <span class=\"s1\">'String'<\/span> to non-scalar <span class=\"nb\">type<\/span> <span class=\"s1\">'std::string'<\/span> <span class=\"o\">{<\/span>aka <span class=\"s1\">'std::__cxx11::basic_string<char>'<\/char><\/span><span class=\"o\">}<\/span> requested\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u067e\u0633 \u0627\u0632 \u0646\u0635\u0628 \u0628\u0631\u062f\u060c ESP \u062e\u0648\u062f \u0631\u0627 \u0648\u0635\u0644 \u06a9\u0646\u06cc\u062f \u0648 \u0628\u0631\u062f \u0648 \u067e\u0648\u0631\u062a \u0631\u0627 \u062f\u0631 Arduino IDE \u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0646\u06cc\u062f.<br \/><img decoding=\"async\" src=\"https:\/\/media2.dev.to\/dynamic\/image\/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto\/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2jppvhwlsme0slysyxnv.png\" alt=\"\u0628\u0631\u062f \u0648 \u067e\u0648\u0631\u062a \u0622\u0631\u062f\u0648\u06cc\u0646\u0648 IDE\" loading=\"lazy\" width=\"800\" height=\"336\" title=\"\"><\/p>\n<p>\u0628\u0631\u0627\u06cc \u0646\u0635\u0628 \u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647 esp_dmx \u0628\u0647 LIBRARY MANAGER \u0631\u0641\u062a\u0647 \u0648 esp_dmx \u0631\u0627 \u062c\u0633\u062a\u062c\u0648 \u06a9\u0646\u06cc\u062f. \u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647 esp_dmx \u062a\u0648\u0633\u0637 Mitch Weisbrod \u0631\u0627 \u0646\u0635\u0628 \u06a9\u0646\u06cc\u062f.<br \/><img decoding=\"async\" src=\"https:\/\/media2.dev.to\/dynamic\/image\/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto\/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxn6obzyhadkmjp40nl0o.png\" alt=\"Arduino IDE LIBRARY MANAGER\" loading=\"lazy\" width=\"282\" height=\"311\" title=\"\"><\/p>\n<h2><span class=\"ez-toc-section\" id=\"%DA%A9%D8%AF\"><\/span>\n<p>  \u06a9\u062f<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight cpp\"><code><span class=\"cp\">#include<\/span> <span class=\"cpf\"><bledevice.h\/><\/span><span class=\"cp\">\n#include<\/span> <span class=\"cpf\"><bleutils.h\/><\/span><span class=\"cp\">\n#include<\/span> <span class=\"cpf\"><bleserver.h\/><\/span><span class=\"cp\">\n#include<\/span> <span class=\"cpf\">\"esp_dmx.h\"<\/span><span class=\"cp\">\n<\/span><\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0627\u0628\u062a\u062f\u0627 \u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647 \u0647\u0627\u06cc \u0644\u0627\u0632\u0645 \u0631\u0627 \u06af\u0646\u062c\u0627\u0646\u062f\u0647 \u0627\u06cc\u0645. \u0628\u0631\u0627\u06cc \u0628\u062e\u0634 \u0628\u0644\u0648\u062a\u0648\u062b\u060c \u0645\u0627 \u0627\u0632 \u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647\u200c\u0647\u0627\u06cc BLEDevice\u060c BLEUtils \u0648 BLEServer \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645. \u0628\u0631\u0627\u06cc \u0642\u0633\u0645\u062a DMX \u0627\u0632 \u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647 esp_dmx \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u06cc\u0645.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight cpp\"><code><span class=\"c1\">\/\/ BLE Configuration<\/span>\n<span class=\"cp\">#define LED_PIN 2\n#define SERVICE_UUID \"afe16d0c-ce27-4ffb-8943-5c3228cffabb\"\n#define CHARACTERISTIC_UUID \"4fafc201-1fb5-459e-8fcc-c5c9c331914b\"\n<\/span>\n<span class=\"c1\">\/\/ DMX Configuration<\/span>\n<span class=\"k\">const<\/span> <span class=\"n\">dmx_port_t<\/span> <span class=\"n\">dmx_num<\/span> <span class=\"o\">=<\/span> <span class=\"n\">DMX_NUM_1<\/span><span class=\"p\">;<\/span>\n<span class=\"k\">const<\/span> <span class=\"kt\">int<\/span> <span class=\"n\">TX_PIN<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">16<\/span><span class=\"p\">;<\/span> <span class=\"c1\">\/\/ DI pin<\/span>\n<span class=\"k\">const<\/span> <span class=\"kt\">int<\/span> <span class=\"n\">RX_PIN<\/span> <span class=\"o\">=<\/span> <span class=\"o\">-<\/span><span class=\"mi\">1<\/span><span class=\"p\">;<\/span> <span class=\"c1\">\/\/ Not used since we're only transmitting<\/span>\n<span class=\"k\">const<\/span> <span class=\"kt\">int<\/span> <span class=\"n\">EN_PIN<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">21<\/span><span class=\"p\">;<\/span> <span class=\"c1\">\/\/ DE &amp; RE pins<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0633\u067e\u0633 \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u0642\u0637\u0639\u0627\u062a \u0628\u0644\u0648\u062a\u0648\u062b \u0648 DMX \u0631\u0627 \u062a\u0646\u0638\u06cc\u0645 \u0645\u06cc \u06a9\u0646\u06cc\u0645. LED_PIN \u067e\u06cc\u0646\u06cc \u0627\u0633\u062a \u06a9\u0647 \u0628\u0631\u0627\u06cc \u06a9\u0646\u062a\u0631\u0644 LED \u0622\u0628\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u06cc\u0645\u060c \u0627\u06cc\u0646 \u067e\u06cc\u0646 \u0628\u0631\u0627\u06cc \u0646\u0634\u0627\u0646 \u062f\u0627\u062f\u0646 \u0648\u0636\u0639\u06cc\u062a \u0627\u062a\u0635\u0627\u0644 \u0628\u0644\u0648\u062a\u0648\u062b \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u0634\u0648\u062f. SERVICE_UUID \u0648 CHARACTERISTIC_UUID UUID \u0647\u0627\u06cc\u06cc \u0647\u0633\u062a\u0646\u062f \u06a9\u0647 \u0628\u0631\u0627\u06cc \u0634\u0646\u0627\u0633\u0627\u06cc\u06cc \u0633\u0631\u0648\u06cc\u0633 \u0648 \u0648\u06cc\u0698\u06af\u06cc \u0628\u0644\u0648\u062a\u0648\u062b \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u06cc\u0645.<br \/>dmx_num \u067e\u0648\u0631\u062a DMX \u0627\u0633\u062a \u06a9\u0647 \u0645\u0627 \u0627\u0632 \u0622\u0646 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u06cc\u0645\u060c \u062f\u0631 \u0627\u06cc\u0646 \u0645\u0648\u0631\u062f \u0627\u0632 DMX_NUM_1 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u06cc\u0645. <br \/>TX_PIN: \u067e\u06cc\u0646\u06cc \u06a9\u0647 \u0628\u0631\u0627\u06cc \u0627\u0646\u062a\u0642\u0627\u0644 \u062f\u0627\u062f\u0647 \u0647\u0627\u06cc DMX \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u06cc\u0645.<br \/>RX_PIN: \u067e\u06cc\u0646\u06cc \u06a9\u0647 \u0628\u0631\u0627\u06cc \u062f\u0631\u06cc\u0627\u0641\u062a \u062f\u0627\u062f\u0647\u200c\u0647\u0627\u06cc DMX \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645\u060c \u062f\u0631 \u0627\u06cc\u0646 \u0645\u0648\u0631\u062f\u060c \u0645\u0627 \u0627\u0632 \u0622\u0646 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0646\u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645 \u0632\u06cc\u0631\u0627 \u0641\u0642\u0637 \u062f\u0631 \u062d\u0627\u0644 \u0627\u0631\u0633\u0627\u0644 \u0647\u0633\u062a\u06cc\u0645.<br \/>EN_PIN: &#8211; \u067e\u06cc\u0646\u06cc \u06a9\u0647 \u0628\u0631\u0627\u06cc \u0641\u0639\u0627\u0644 \u06a9\u0631\u062f\u0646 \u067e\u06cc\u0646\u200c\u0647\u0627\u06cc Receiver (RE) \u0648 Driver (DE) \u0645\u0627\u0698\u0648\u0644 RS485 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight cpp\"><code><span class=\"c1\">\/\/ BLE variables<\/span>\n<span class=\"n\">BLEServer<\/span> <span class=\"o\">*<\/span><span class=\"n\">pServer<\/span> <span class=\"o\">=<\/span> <span class=\"nb\">NULL<\/span><span class=\"p\">;<\/span>\n<span class=\"n\">BLEService<\/span> <span class=\"o\">*<\/span><span class=\"n\">pService<\/span> <span class=\"o\">=<\/span> <span class=\"nb\">NULL<\/span><span class=\"p\">;<\/span>\n<span class=\"n\">BLECharacteristic<\/span> <span class=\"o\">*<\/span><span class=\"n\">pCharacteristic<\/span> <span class=\"o\">=<\/span> <span class=\"nb\">NULL<\/span><span class=\"p\">;<\/span>\n<span class=\"kt\">bool<\/span> <span class=\"n\">deviceConnected<\/span> <span class=\"o\">=<\/span> <span class=\"nb\">false<\/span><span class=\"p\">;<\/span>\n<span class=\"kt\">bool<\/span> <span class=\"n\">oldDeviceConnected<\/span> <span class=\"o\">=<\/span> <span class=\"nb\">false<\/span><span class=\"p\">;<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0645\u0627 \u0645\u062a\u063a\u06cc\u0631\u0647\u0627\u06cc BLE \u0631\u0627 \u06a9\u0647 \u0628\u0631\u0627\u06cc \u0627\u06cc\u062c\u0627\u062f \u0633\u0631\u0648\u06cc\u0633 \u0648 \u0648\u06cc\u0698\u06af\u06cc \u0628\u0644\u0648\u062a\u0648\u062b \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u06cc\u0645\u060c \u0627\u0639\u0644\u0627\u0645 \u0645\u06cc \u06a9\u0646\u06cc\u0645. \u0647\u0645\u0686\u0646\u06cc\u0646 \u0645\u062a\u063a\u06cc\u0631\u0647\u0627\u06cc deviceConnected \u0648 oldDeviceConnected \u0631\u0627 \u06a9\u0647 \u0628\u0631\u0627\u06cc \u067e\u06cc\u06af\u06cc\u0631\u06cc \u0648\u0636\u0639\u06cc\u062a \u0627\u062a\u0635\u0627\u0644 \u0628\u0644\u0648\u062a\u0648\u062b \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u06cc\u0645\u060c \u0627\u0639\u0644\u0627\u0645 \u0645\u06cc \u06a9\u0646\u06cc\u0645.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight cpp\"><code><span class=\"c1\">\/\/ DMX variables<\/span>\n<span class=\"kt\">uint8_t<\/span> <span class=\"n\">dmxData<\/span><span class=\"p\">[<\/span><span class=\"n\">DMX_PACKET_SIZE<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"p\">{<\/span><span class=\"mi\">0<\/span><span class=\"p\">};<\/span>\n\n<span class=\"k\">const<\/span> <span class=\"kt\">unsigned<\/span> <span class=\"kt\">long<\/span> <span class=\"n\">DMX_TRANSMIT_INTERVAL<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">25<\/span><span class=\"p\">;<\/span> <span class=\"c1\">\/\/ 40Hz refresh rate<\/span>\n<span class=\"kt\">unsigned<\/span> <span class=\"kt\">long<\/span> <span class=\"n\">lastDmxTransmit<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">0<\/span><span class=\"p\">;<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>dmxData: \u0622\u0631\u0627\u06cc\u0647 \u0627\u06cc \u06a9\u0647 \u0628\u0631\u0627\u06cc \u0630\u062e\u06cc\u0631\u0647 \u062f\u0627\u062f\u0647 \u0647\u0627\u06cc DMX \u06a9\u0647 \u0627\u0632 \u0637\u0631\u06cc\u0642 \u0628\u0644\u0648\u062a\u0648\u062b \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc \u06a9\u0646\u06cc\u0645 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u06cc\u0645.<br \/>DMX_TRANSMIT_INTERVAL: \u0628\u0627\u0632\u0647\u200c\u0627\u06cc \u06a9\u0647 \u062f\u0631 \u0622\u0646 \u062f\u0627\u062f\u0647\u200c\u0647\u0627\u06cc DMX \u0631\u0627 \u0628\u0647 \u062f\u0633\u062a\u06af\u0627\u0647 \u0646\u0648\u0631 \u0645\u06cc\u200c\u0641\u0631\u0633\u062a\u06cc\u0645\u060c \u062f\u0631 \u0627\u06cc\u0646 \u062d\u0627\u0644\u062a\u060c \u062f\u0627\u062f\u0647\u200c\u0647\u0627 \u0631\u0627 \u0647\u0631 \u06f2\u06f5 \u0645\u06cc\u0644\u06cc\u200c\u062b\u0627\u0646\u06cc\u0647 \u0627\u0631\u0633\u0627\u0644 \u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645 (\u0646\u0631\u062e \u062a\u0627\u0632\u0647\u200c\u0633\u0627\u0632\u06cc \u06f4\u06f0 \u0647\u0631\u062a\u0632). <br \/>lastDmxTransmit: \u0632\u0645\u0627\u0646\u06cc \u06a9\u0647 \u0622\u062e\u0631\u06cc\u0646 \u0628\u0627\u0631 \u062f\u0627\u062f\u0647 \u0647\u0627\u06cc DMX \u0631\u0627 \u0627\u0631\u0633\u0627\u0644 \u06a9\u0631\u062f\u06cc\u0645.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight cpp\"><code><span class=\"k\">class<\/span> <span class=\"nc\">MyServerCallbacks<\/span> <span class=\"o\">:<\/span> <span class=\"k\">public<\/span> <span class=\"n\">BLEServerCallbacks<\/span>\n<span class=\"p\">{<\/span>\n  <span class=\"kt\">void<\/span> <span class=\"n\">onConnect<\/span><span class=\"p\">(<\/span><span class=\"n\">BLEServer<\/span> <span class=\"o\">*<\/span><span class=\"n\">pServer<\/span><span class=\"p\">)<\/span>\n  <span class=\"p\">{<\/span>\n    <span class=\"n\">deviceConnected<\/span> <span class=\"o\">=<\/span> <span class=\"nb\">true<\/span><span class=\"p\">;<\/span>\n  <span class=\"p\">}<\/span>\n  <span class=\"kt\">void<\/span> <span class=\"nf\">onDisconnect<\/span><span class=\"p\">(<\/span><span class=\"n\">BLEServer<\/span> <span class=\"o\">*<\/span><span class=\"n\">pServer<\/span><span class=\"p\">)<\/span>\n  <span class=\"p\">{<\/span>\n    <span class=\"n\">deviceConnected<\/span> <span class=\"o\">=<\/span> <span class=\"nb\">false<\/span><span class=\"p\">;<\/span>\n  <span class=\"p\">}<\/span>\n<span class=\"p\">};<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0628\u0631\u0627\u06cc \u0646\u0638\u0627\u0631\u062a \u0628\u0631 \u0648\u0636\u0639\u06cc\u062a \u0627\u062a\u0635\u0627\u0644 \u0628\u0644\u0648\u062a\u0648\u062b\u060c \u06a9\u0644\u0627\u0633\u06cc \u0628\u0647 \u0646\u0627\u0645 MyServerCallbacks \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc \u06a9\u0646\u06cc\u0645 \u06a9\u0647 \u06a9\u0644\u0627\u0633 BLEServerCallbacks \u0631\u0627 \u06af\u0633\u062a\u0631\u0634 \u0645\u06cc \u062f\u0647\u062f. \u0631\u0648\u0634\u200c\u0647\u0627\u06cc onConnect \u0648 onDisconnect \u0631\u0627 \u0646\u0627\u062f\u06cc\u062f\u0647 \u0645\u06cc\u200c\u06af\u06cc\u0631\u06cc\u0645 \u062a\u0627 \u0645\u062a\u063a\u06cc\u0631 deviceConnected \u0631\u0627 \u0647\u0646\u06af\u0627\u0645 \u0627\u062a\u0635\u0627\u0644 \u06cc\u0627 \u0642\u0637\u0639 \u0634\u062f\u0646 \u062f\u0633\u062a\u06af\u0627\u0647 \u0631\u0648\u06cc true \u06cc\u0627 false \u062a\u0646\u0638\u06cc\u0645 \u06a9\u0646\u06cc\u0645.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight cpp\"><code><span class=\"k\">class<\/span> <span class=\"nc\">MyCallbacks<\/span> <span class=\"o\">:<\/span> <span class=\"k\">public<\/span> <span class=\"n\">BLECharacteristicCallbacks<\/span>\n<span class=\"p\">{<\/span>\n  <span class=\"kt\">void<\/span> <span class=\"n\">onWrite<\/span><span class=\"p\">(<\/span><span class=\"n\">BLECharacteristic<\/span> <span class=\"o\">*<\/span><span class=\"n\">pCharacteristic<\/span><span class=\"p\">)<\/span>\n  <span class=\"p\">{<\/span>\n    <span class=\"n\">std<\/span><span class=\"o\">::<\/span><span class=\"n\">string<\/span> <span class=\"n\">rxValue<\/span> <span class=\"o\">=<\/span> <span class=\"n\">pCharacteristic<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">getValue<\/span><span class=\"p\">();<\/span>\n    <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"n\">rxValue<\/span><span class=\"p\">.<\/span><span class=\"n\">length<\/span><span class=\"p\">()<\/span> <span class=\"o\">&gt;<\/span> <span class=\"mi\">0<\/span><span class=\"p\">)<\/span>\n    <span class=\"p\">{<\/span>\n\n      <span class=\"k\">for<\/span> <span class=\"p\">(<\/span><span class=\"kt\">size_t<\/span> <span class=\"n\">i<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">0<\/span><span class=\"p\">;<\/span> <span class=\"n\">i<\/span> <span class=\"o\">&lt;<\/span> <span class=\"n\">rxValue<\/span><span class=\"p\">.<\/span><span class=\"n\">length<\/span><span class=\"p\">()<\/span> <span class=\"o\">-<\/span> <span class=\"mi\">1<\/span><span class=\"p\">;<\/span> <span class=\"n\">i<\/span> <span class=\"o\">+=<\/span> <span class=\"mi\">2<\/span><span class=\"p\">)<\/span>\n      <span class=\"p\">{<\/span>\n        <span class=\"kt\">uint8_t<\/span> <span class=\"n\">channel<\/span> <span class=\"o\">=<\/span> <span class=\"n\">rxValue<\/span><span class=\"p\">[<\/span><span class=\"n\">i<\/span><span class=\"p\">];<\/span>\n        <span class=\"kt\">uint8_t<\/span> <span class=\"n\">value<\/span> <span class=\"o\">=<\/span> <span class=\"n\">rxValue<\/span><span class=\"p\">[<\/span><span class=\"n\">i<\/span> <span class=\"o\">+<\/span> <span class=\"mi\">1<\/span><span class=\"p\">];<\/span>\n        <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"n\">channel<\/span> <span class=\"o\">&lt;<\/span> <span class=\"n\">DMX_PACKET_SIZE<\/span><span class=\"p\">)<\/span>\n        <span class=\"p\">{<\/span>\n          <span class=\"n\">dmxData<\/span><span class=\"p\">[<\/span><span class=\"n\">channel<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"n\">value<\/span><span class=\"p\">;<\/span>\n        <span class=\"p\">}<\/span>\n      <span class=\"p\">}<\/span>\n\n      <span class=\"c1\">\/\/ Blink LED to indicate received data<\/span>\n      <span class=\"n\">digitalWrite<\/span><span class=\"p\">(<\/span><span class=\"n\">LED_PIN<\/span><span class=\"p\">,<\/span> <span class=\"n\">HIGH<\/span><span class=\"p\">);<\/span>\n      <span class=\"n\">delay<\/span><span class=\"p\">(<\/span><span class=\"mi\">10<\/span><span class=\"p\">);<\/span>\n      <span class=\"n\">digitalWrite<\/span><span class=\"p\">(<\/span><span class=\"n\">LED_PIN<\/span><span class=\"p\">,<\/span> <span class=\"n\">LOW<\/span><span class=\"p\">);<\/span>\n    <span class=\"p\">}<\/span>\n  <span class=\"p\">}<\/span>\n<span class=\"p\">};<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0628\u0631\u0627\u06cc \u062f\u0631\u06cc\u0627\u0641\u062a \u062f\u0627\u062f\u0647 \u0647\u0627\u06cc DMX \u0627\u0632 \u0637\u0631\u06cc\u0642 \u0628\u0644\u0648\u062a\u0648\u062b\u060c \u06a9\u0644\u0627\u0633\u06cc \u0628\u0647 \u0646\u0627\u0645 MyCallbacks \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc \u06a9\u0646\u06cc\u0645 \u06a9\u0647 \u06a9\u0644\u0627\u0633 BLECharacteristicCallbacks \u0631\u0627 \u06af\u0633\u062a\u0631\u0634 \u0645\u06cc \u062f\u0647\u062f. \u0628\u0647 \u0627\u06cc\u0646 \u062a\u0631\u062a\u06cc\u0628 \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u0645 \u0645\u062a\u062f onWrite \u0631\u0627 \u0644\u063a\u0648 \u06a9\u0646\u06cc\u0645 \u062a\u0627 \u062f\u0627\u062f\u0647\u200c\u0647\u0627\u06cc\u06cc \u0631\u0627 \u06a9\u0647 \u0627\u0632 \u0637\u0631\u06cc\u0642 \u0628\u0644\u0648\u062a\u0648\u062b \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645 \u0628\u062e\u0648\u0627\u0646\u06cc\u0645 \u0648 \u062f\u0631 \u0622\u0631\u0627\u06cc\u0647 dmxData \u0630\u062e\u06cc\u0631\u0647 \u06a9\u0646\u06cc\u0645. \u0647\u0645\u0686\u0646\u06cc\u0646 LED \u0631\u0627 \u0686\u0634\u0645\u06a9 \u0645\u06cc \u0632\u0646\u06cc\u0645 \u062a\u0627 \u0646\u0634\u0627\u0646 \u062f\u0647\u062f \u06a9\u0647 \u062f\u0627\u062f\u0647 \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0631\u062f\u0647 \u0627\u06cc\u0645.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight cpp\"><code><span class=\"kt\">void<\/span> <span class=\"nf\">setup<\/span><span class=\"p\">()<\/span>\n<span class=\"p\">{<\/span>\n  <span class=\"c1\">\/\/ Setup BLE<\/span>\n  <span class=\"n\">BLEDevice<\/span><span class=\"o\">::<\/span><span class=\"n\">init<\/span><span class=\"p\">(<\/span><span class=\"s\">\"DMX Controller\"<\/span><span class=\"p\">);<\/span>\n  <span class=\"n\">pServer<\/span> <span class=\"o\">=<\/span> <span class=\"n\">BLEDevice<\/span><span class=\"o\">::<\/span><span class=\"n\">createServer<\/span><span class=\"p\">();<\/span>\n  <span class=\"n\">pServer<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">setCallbacks<\/span><span class=\"p\">(<\/span><span class=\"k\">new<\/span> <span class=\"n\">MyServerCallbacks<\/span><span class=\"p\">());<\/span>\n\n  <span class=\"n\">pService<\/span> <span class=\"o\">=<\/span> <span class=\"n\">pServer<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">createService<\/span><span class=\"p\">(<\/span><span class=\"n\">SERVICE_UUID<\/span><span class=\"p\">);<\/span>\n  <span class=\"n\">pCharacteristic<\/span> <span class=\"o\">=<\/span> <span class=\"n\">pService<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">createCharacteristic<\/span><span class=\"p\">(<\/span>\n      <span class=\"n\">CHARACTERISTIC_UUID<\/span><span class=\"p\">,<\/span>\n      <span class=\"n\">BLECharacteristic<\/span><span class=\"o\">::<\/span><span class=\"n\">PROPERTY_READ<\/span> <span class=\"o\">|<\/span>\n          <span class=\"n\">BLECharacteristic<\/span><span class=\"o\">::<\/span><span class=\"n\">PROPERTY_WRITE<\/span><span class=\"p\">);<\/span>\n\n  <span class=\"n\">pCharacteristic<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">setCallbacks<\/span><span class=\"p\">(<\/span><span class=\"k\">new<\/span> <span class=\"n\">MyCallbacks<\/span><span class=\"p\">());<\/span>\n  <span class=\"n\">pService<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">start<\/span><span class=\"p\">();<\/span>\n  <span class=\"n\">pServer<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">getAdvertising<\/span><span class=\"p\">()<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">start<\/span><span class=\"p\">();<\/span>\n\n  <span class=\"c1\">\/\/ Setup DMX<\/span>\n  <span class=\"n\">dmx_config_t<\/span> <span class=\"n\">config<\/span> <span class=\"o\">=<\/span> <span class=\"n\">DMX_CONFIG_DEFAULT<\/span><span class=\"p\">;<\/span>\n  <span class=\"n\">dmx_driver_install<\/span><span class=\"p\">(<\/span><span class=\"n\">dmx_num<\/span><span class=\"p\">,<\/span> <span class=\"o\">&amp;<\/span><span class=\"n\">config<\/span><span class=\"p\">,<\/span> <span class=\"nb\">NULL<\/span><span class=\"p\">,<\/span> <span class=\"mi\">0<\/span><span class=\"p\">);<\/span>\n  <span class=\"n\">dmx_set_pin<\/span><span class=\"p\">(<\/span><span class=\"n\">dmx_num<\/span><span class=\"p\">,<\/span> <span class=\"n\">TX_PIN<\/span><span class=\"p\">,<\/span> <span class=\"n\">RX_PIN<\/span><span class=\"p\">,<\/span> <span class=\"n\">EN_PIN<\/span><span class=\"p\">);<\/span>\n\n  <span class=\"n\">pinMode<\/span><span class=\"p\">(<\/span><span class=\"n\">LED_PIN<\/span><span class=\"p\">,<\/span> <span class=\"n\">OUTPUT<\/span><span class=\"p\">);<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u062f\u0631 \u062a\u0627\u0628\u0639 setup\u060c \u062f\u0633\u062a\u06af\u0627\u0647 BLE \u0631\u0627 \u0645\u0642\u062f\u0627\u0631\u062f\u0647\u06cc \u0627\u0648\u0644\u06cc\u0647 \u0645\u06cc \u06a9\u0646\u06cc\u0645 \u0648 \u0633\u0631\u0648\u06cc\u0633 \u0648 \u0645\u0634\u062e\u0635\u0647 \u0628\u0644\u0648\u062a\u0648\u062b \u0631\u0627 \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc \u06a9\u0646\u06cc\u0645. \u0645\u0627 \u0647\u0645\u0686\u0646\u06cc\u0646 \u0633\u0631\u0648\u06cc\u0633 DMX \u0631\u0627 \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc \u06a9\u0646\u06cc\u0645 \u0648 \u067e\u06cc\u0646 \u0647\u0627\u06cc\u06cc \u0631\u0627 \u06a9\u0647 \u0628\u0631\u0627\u06cc \u0627\u0646\u062a\u0642\u0627\u0644 \u062f\u0627\u062f\u0647 \u0647\u0627\u06cc DMX \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u06cc\u0645 \u062a\u0646\u0638\u06cc\u0645 \u0645\u06cc \u06a9\u0646\u06cc\u0645. \u0647\u0645\u0686\u0646\u06cc\u0646 LED_PIN \u0631\u0627 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u067e\u06cc\u0646 \u062e\u0631\u0648\u062c\u06cc \u062a\u0646\u0638\u06cc\u0645 \u06a9\u0631\u062f\u06cc\u0645.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight cpp\"><code><span class=\"kt\">void<\/span> <span class=\"nf\">loop<\/span><span class=\"p\">()<\/span>\n<span class=\"p\">{<\/span>\n  <span class=\"c1\">\/\/ Handle BLE connection status<\/span>\n  <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"o\">!<\/span><span class=\"n\">deviceConnected<\/span> <span class=\"o\">&amp;&amp;<\/span> <span class=\"n\">oldDeviceConnected<\/span><span class=\"p\">)<\/span>\n  <span class=\"p\">{<\/span>\n    <span class=\"n\">delay<\/span><span class=\"p\">(<\/span><span class=\"mi\">500<\/span><span class=\"p\">);<\/span>\n    <span class=\"n\">pServer<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">startAdvertising<\/span><span class=\"p\">();<\/span>\n    <span class=\"n\">oldDeviceConnected<\/span> <span class=\"o\">=<\/span> <span class=\"n\">deviceConnected<\/span><span class=\"p\">;<\/span>\n  <span class=\"p\">}<\/span>\n\n  <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"n\">deviceConnected<\/span> <span class=\"o\">&amp;&amp;<\/span> <span class=\"o\">!<\/span><span class=\"n\">oldDeviceConnected<\/span><span class=\"p\">)<\/span>\n  <span class=\"p\">{<\/span>\n    <span class=\"n\">oldDeviceConnected<\/span> <span class=\"o\">=<\/span> <span class=\"n\">deviceConnected<\/span><span class=\"p\">;<\/span>\n  <span class=\"p\">}<\/span>\n\n  <span class=\"c1\">\/\/ Continuously send DMX data at regular intervals<\/span>\n  <span class=\"kt\">unsigned<\/span> <span class=\"kt\">long<\/span> <span class=\"n\">currentMillis<\/span> <span class=\"o\">=<\/span> <span class=\"n\">millis<\/span><span class=\"p\">();<\/span>\n  <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"n\">currentMillis<\/span> <span class=\"o\">-<\/span> <span class=\"n\">lastDmxTransmit<\/span> <span class=\"o\">&gt;=<\/span> <span class=\"n\">DMX_TRANSMIT_INTERVAL<\/span><span class=\"p\">)<\/span>\n  <span class=\"p\">{<\/span>\n    <span class=\"n\">lastDmxTransmit<\/span> <span class=\"o\">=<\/span> <span class=\"n\">currentMillis<\/span><span class=\"p\">;<\/span>\n    <span class=\"n\">dmx_write<\/span><span class=\"p\">(<\/span><span class=\"n\">dmx_num<\/span><span class=\"p\">,<\/span> <span class=\"n\">dmxData<\/span><span class=\"p\">,<\/span> <span class=\"n\">DMX_PACKET_SIZE<\/span><span class=\"p\">);<\/span>\n    <span class=\"n\">dmx_send<\/span><span class=\"p\">(<\/span><span class=\"n\">dmx_num<\/span><span class=\"p\">);<\/span>\n    <span class=\"n\">dmx_wait_sent<\/span><span class=\"p\">(<\/span><span class=\"n\">dmx_num<\/span><span class=\"p\">,<\/span> <span class=\"n\">DMX_TIMEOUT_TICK<\/span><span class=\"p\">);<\/span>\n  <span class=\"p\">}<\/span>\n\n  <span class=\"c1\">\/\/ Blink LED when not connected<\/span>\n  <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"o\">!<\/span><span class=\"n\">deviceConnected<\/span><span class=\"p\">)<\/span>\n  <span class=\"p\">{<\/span>\n    <span class=\"n\">digitalWrite<\/span><span class=\"p\">(<\/span><span class=\"n\">LED_PIN<\/span><span class=\"p\">,<\/span> <span class=\"n\">HIGH<\/span><span class=\"p\">);<\/span>\n    <span class=\"n\">delay<\/span><span class=\"p\">(<\/span><span class=\"mi\">200<\/span><span class=\"p\">);<\/span>\n    <span class=\"n\">digitalWrite<\/span><span class=\"p\">(<\/span><span class=\"n\">LED_PIN<\/span><span class=\"p\">,<\/span> <span class=\"n\">LOW<\/span><span class=\"p\">);<\/span>\n    <span class=\"n\">delay<\/span><span class=\"p\">(<\/span><span class=\"mi\">200<\/span><span class=\"p\">);<\/span>\n  <span class=\"p\">}<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u062f\u0631 \u062a\u0627\u0628\u0639 \u062d\u0644\u0642\u0647\u060c \u0648\u0636\u0639\u06cc\u062a \u0627\u062a\u0635\u0627\u0644 BLE \u0631\u0627 \u06a9\u0646\u062a\u0631\u0644 \u0645\u06cc \u06a9\u0646\u06cc\u0645 \u0648 \u062f\u0627\u062f\u0647 \u0647\u0627\u06cc DMX \u0631\u0627 \u062f\u0631 \u0641\u0648\u0627\u0635\u0644 \u0632\u0645\u0627\u0646\u06cc \u0645\u0639\u06cc\u0646 \u0628\u0647 \u0641\u06cc\u06a9\u0633\u0686\u0631 \u0646\u0648\u0631 \u0627\u0631\u0633\u0627\u0644 \u0645\u06cc \u06a9\u0646\u06cc\u0645. \u0647\u0645\u0686\u0646\u06cc\u0646 \u0632\u0645\u0627\u0646\u06cc \u06a9\u0647 \u062f\u0633\u062a\u06af\u0627\u0647 \u0645\u062a\u0635\u0644 \u0646\u06cc\u0633\u062a\u060c LED \u0631\u0627 \u0686\u0634\u0645\u06a9 \u0645\u06cc \u0632\u0646\u06cc\u0645.<\/p>\n<p>\u0628\u0631\u0627\u06cc \u0627\u0634\u06a9\u0627\u0644 \u0632\u062f\u0627\u06cc\u06cc \u0627\u062e\u062a\u06cc\u0627\u0631\u06cc\u060c \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u06a9\u062f \u0632\u06cc\u0631 \u0631\u0627 \u0628\u0647 \u067e\u0631\u0648\u0698\u0647 \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight cpp\"><code><span class=\"cp\">#define DEBUG true \/\/ Set to false to disable debug printing\n<\/span>\n<span class=\"kt\">void<\/span> <span class=\"nf\">printDmxDebug<\/span><span class=\"p\">(<\/span><span class=\"kt\">uint8_t<\/span> <span class=\"n\">channel<\/span><span class=\"p\">,<\/span> <span class=\"kt\">uint8_t<\/span> <span class=\"n\">value<\/span><span class=\"p\">)<\/span>\n<span class=\"p\">{<\/span>\n  <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"o\">!<\/span><span class=\"n\">DEBUG<\/span><span class=\"p\">)<\/span>\n    <span class=\"k\">return<\/span><span class=\"p\">;<\/span>\n\n  <span class=\"n\">Serial<\/span><span class=\"p\">.<\/span><span class=\"n\">print<\/span><span class=\"p\">(<\/span><span class=\"s\">\"DMX Channel \"<\/span><span class=\"p\">);<\/span>\n  <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"n\">channel<\/span> <span class=\"o\">&lt;<\/span> <span class=\"mi\">10<\/span><span class=\"p\">)<\/span>\n    <span class=\"n\">Serial<\/span><span class=\"p\">.<\/span><span class=\"n\">print<\/span><span class=\"p\">(<\/span><span class=\"s\">\"00\"<\/span><span class=\"p\">);<\/span>\n  <span class=\"k\">else<\/span> <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"n\">channel<\/span> <span class=\"o\">&lt;<\/span> <span class=\"mi\">100<\/span><span class=\"p\">)<\/span>\n    <span class=\"n\">Serial<\/span><span class=\"p\">.<\/span><span class=\"n\">print<\/span><span class=\"p\">(<\/span><span class=\"s\">\"0\"<\/span><span class=\"p\">);<\/span>\n  <span class=\"n\">Serial<\/span><span class=\"p\">.<\/span><span class=\"n\">print<\/span><span class=\"p\">(<\/span><span class=\"n\">channel<\/span><span class=\"p\">);<\/span>\n  <span class=\"n\">Serial<\/span><span class=\"p\">.<\/span><span class=\"n\">print<\/span><span class=\"p\">(<\/span><span class=\"s\">\" set to \"<\/span><span class=\"p\">);<\/span>\n  <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"n\">value<\/span> <span class=\"o\">&lt;<\/span> <span class=\"mi\">100<\/span><span class=\"p\">)<\/span>\n    <span class=\"n\">Serial<\/span><span class=\"p\">.<\/span><span class=\"n\">print<\/span><span class=\"p\">(<\/span><span class=\"s\">\" \"<\/span><span class=\"p\">);<\/span>\n  <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"n\">value<\/span> <span class=\"o\">&lt;<\/span> <span class=\"mi\">10<\/span><span class=\"p\">)<\/span>\n    <span class=\"n\">Serial<\/span><span class=\"p\">.<\/span><span class=\"n\">print<\/span><span class=\"p\">(<\/span><span class=\"s\">\" \"<\/span><span class=\"p\">);<\/span>\n  <span class=\"n\">Serial<\/span><span class=\"p\">.<\/span><span class=\"n\">print<\/span><span class=\"p\">(<\/span><span class=\"n\">value<\/span><span class=\"p\">);<\/span>\n  <span class=\"n\">Serial<\/span><span class=\"p\">.<\/span><span class=\"n\">print<\/span><span class=\"p\">(<\/span><span class=\"s\">\" (\"<\/span><span class=\"p\">);<\/span>\n  <span class=\"n\">Serial<\/span><span class=\"p\">.<\/span><span class=\"n\">print<\/span><span class=\"p\">(<\/span><span class=\"kt\">float<\/span><span class=\"p\">(<\/span><span class=\"n\">value<\/span><span class=\"p\">)<\/span> <span class=\"o\">\/<\/span> <span class=\"mf\">255.0<\/span> <span class=\"o\">*<\/span> <span class=\"mf\">100.0<\/span><span class=\"p\">,<\/span> <span class=\"mi\">1<\/span><span class=\"p\">);<\/span>\n  <span class=\"n\">Serial<\/span><span class=\"p\">.<\/span><span class=\"n\">println<\/span><span class=\"p\">(<\/span><span class=\"s\">\"%)\"<\/span><span class=\"p\">);<\/span>\n<span class=\"p\">}<\/span>\n\n<span class=\"cm\">\/* Change the MyCallbacks class to this: *\/<\/span>\n<span class=\"k\">class<\/span> <span class=\"nc\">MyCallbacks<\/span> <span class=\"o\">:<\/span> <span class=\"k\">public<\/span> <span class=\"n\">BLECharacteristicCallbacks<\/span>\n<span class=\"p\">{<\/span>\n  <span class=\"kt\">void<\/span> <span class=\"n\">onWrite<\/span><span class=\"p\">(<\/span><span class=\"n\">BLECharacteristic<\/span> <span class=\"o\">*<\/span><span class=\"n\">pCharacteristic<\/span><span class=\"p\">)<\/span>\n  <span class=\"p\">{<\/span>\n    <span class=\"n\">std<\/span><span class=\"o\">::<\/span><span class=\"n\">string<\/span> <span class=\"n\">rxValue<\/span> <span class=\"o\">=<\/span> <span class=\"n\">pCharacteristic<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">getValue<\/span><span class=\"p\">();<\/span>\n    <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"n\">rxValue<\/span><span class=\"p\">.<\/span><span class=\"n\">length<\/span><span class=\"p\">()<\/span> <span class=\"o\">&gt;<\/span> <span class=\"mi\">0<\/span><span class=\"p\">)<\/span>\n    <span class=\"p\">{<\/span>\n\n      <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"n\">DEBUG<\/span><span class=\"p\">)<\/span>\n      <span class=\"p\">{<\/span>\n        <span class=\"n\">Serial<\/span><span class=\"p\">.<\/span><span class=\"n\">println<\/span><span class=\"p\">(<\/span><span class=\"s\">\"<\/span><span class=\"se\">\\n<\/span><span class=\"s\">--- New DMX Values Received ---\"<\/span><span class=\"p\">);<\/span>\n      <span class=\"p\">}<\/span>\n\n      <span class=\"k\">for<\/span> <span class=\"p\">(<\/span><span class=\"kt\">size_t<\/span> <span class=\"n\">i<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">0<\/span><span class=\"p\">;<\/span> <span class=\"n\">i<\/span> <span class=\"o\">&lt;<\/span> <span class=\"n\">rxValue<\/span><span class=\"p\">.<\/span><span class=\"n\">length<\/span><span class=\"p\">()<\/span> <span class=\"o\">-<\/span> <span class=\"mi\">1<\/span><span class=\"p\">;<\/span> <span class=\"n\">i<\/span> <span class=\"o\">+=<\/span> <span class=\"mi\">2<\/span><span class=\"p\">)<\/span>\n      <span class=\"p\">{<\/span>\n        <span class=\"kt\">uint8_t<\/span> <span class=\"n\">channel<\/span> <span class=\"o\">=<\/span> <span class=\"n\">rxValue<\/span><span class=\"p\">[<\/span><span class=\"n\">i<\/span><span class=\"p\">];<\/span>\n        <span class=\"kt\">uint8_t<\/span> <span class=\"n\">value<\/span> <span class=\"o\">=<\/span> <span class=\"n\">rxValue<\/span><span class=\"p\">[<\/span><span class=\"n\">i<\/span> <span class=\"o\">+<\/span> <span class=\"mi\">1<\/span><span class=\"p\">];<\/span>\n        <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"n\">channel<\/span> <span class=\"o\">&lt;<\/span> <span class=\"n\">DMX_PACKET_SIZE<\/span><span class=\"p\">)<\/span>\n        <span class=\"p\">{<\/span>\n          <span class=\"n\">dmxData<\/span><span class=\"p\">[<\/span><span class=\"n\">channel<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"n\">value<\/span><span class=\"p\">;<\/span>\n          <span class=\"n\">printDmxDebug<\/span><span class=\"p\">(<\/span><span class=\"n\">channel<\/span><span class=\"p\">,<\/span> <span class=\"n\">value<\/span><span class=\"p\">);<\/span>\n        <span class=\"p\">}<\/span>\n      <span class=\"p\">}<\/span>\n\n      <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"n\">DEBUG<\/span><span class=\"p\">)<\/span>\n      <span class=\"p\">{<\/span>\n        <span class=\"n\">Serial<\/span><span class=\"p\">.<\/span><span class=\"n\">println<\/span><span class=\"p\">(<\/span><span class=\"s\">\"---------------------------<\/span><span class=\"se\">\\n<\/span><span class=\"s\">\"<\/span><span class=\"p\">);<\/span>\n      <span class=\"p\">}<\/span>\n\n      <span class=\"c1\">\/\/ Blink LED to indicate received data<\/span>\n      <span class=\"n\">digitalWrite<\/span><span class=\"p\">(<\/span><span class=\"n\">LED_PIN<\/span><span class=\"p\">,<\/span> <span class=\"n\">HIGH<\/span><span class=\"p\">);<\/span>\n      <span class=\"n\">delay<\/span><span class=\"p\">(<\/span><span class=\"mi\">10<\/span><span class=\"p\">);<\/span>\n      <span class=\"n\">digitalWrite<\/span><span class=\"p\">(<\/span><span class=\"n\">LED_PIN<\/span><span class=\"p\">,<\/span> <span class=\"n\">LOW<\/span><span class=\"p\">);<\/span>\n    <span class=\"p\">}<\/span>\n  <span class=\"p\">}<\/span>\n<span class=\"p\">};<\/span>\n\n<span class=\"cm\">\/* Add this to the setup function: *\/<\/span>\n<span class=\"n\">Serial<\/span><span class=\"p\">.<\/span><span class=\"n\">begin<\/span><span class=\"p\">(<\/span><span class=\"mi\">115200<\/span><span class=\"p\">);<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0628\u0647 \u0627\u06cc\u0646 \u062a\u0631\u062a\u06cc\u0628 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u062f\u0627\u062f\u0647 \u0647\u0627\u06cc DMX \u0631\u0627 \u06a9\u0647 \u0627\u0632 \u0637\u0631\u06cc\u0642 \u0628\u0644\u0648\u062a\u0648\u062b \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc \u06a9\u0646\u06cc\u062f \u062f\u0631 \u0645\u0627\u0646\u06cc\u062a\u0648\u0631 \u0633\u0631\u06cc\u0627\u0644 \u0645\u0634\u0627\u0647\u062f\u0647 \u06a9\u0646\u06cc\u062f \u06a9\u0647 \u0645\u06cc \u062a\u0648\u0627\u0646\u062f \u0628\u0631\u0627\u06cc \u0627\u0634\u06a9\u0627\u0644 \u0632\u062f\u0627\u06cc\u06cc \u0645\u0641\u06cc\u062f \u0628\u0627\u0634\u062f.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"%DA%A9%D8%AF_%DA%A9%D8%A7%D9%85%D9%84\"><\/span>\n<p>  \u06a9\u062f \u06a9\u0627\u0645\u0644<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight cpp\"><code><span class=\"cp\">#include<\/span> <span class=\"cpf\"><bledevice.h\/><\/span><span class=\"cp\">\n#include<\/span> <span class=\"cpf\"><bleutils.h\/><\/span><span class=\"cp\">\n#include<\/span> <span class=\"cpf\"><bleserver.h\/><\/span><span class=\"cp\">\n#include<\/span> <span class=\"cpf\">\"esp_dmx.h\"<\/span><span class=\"cp\">\n<\/span>\n<span class=\"c1\">\/\/ BLE Configuration<\/span>\n<span class=\"cp\">#define LED_PIN 2\n#define SERVICE_UUID \"afe16d0c-ce27-4ffb-8943-5c3228cffabb\"\n#define CHARACTERISTIC_UUID \"4fafc201-1fb5-459e-8fcc-c5c9c331914b\"\n<\/span>\n<span class=\"c1\">\/\/ DMX Configuration<\/span>\n<span class=\"k\">const<\/span> <span class=\"n\">dmx_port_t<\/span> <span class=\"n\">dmx_num<\/span> <span class=\"o\">=<\/span> <span class=\"n\">DMX_NUM_1<\/span><span class=\"p\">;<\/span>\n<span class=\"k\">const<\/span> <span class=\"kt\">int<\/span> <span class=\"n\">TX_PIN<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">16<\/span><span class=\"p\">;<\/span> <span class=\"c1\">\/\/ DI pinz<\/span>\n<span class=\"k\">const<\/span> <span class=\"kt\">int<\/span> <span class=\"n\">RX_PIN<\/span> <span class=\"o\">=<\/span> <span class=\"o\">-<\/span><span class=\"mi\">1<\/span><span class=\"p\">;<\/span> <span class=\"c1\">\/\/ Not used since we're only transmitting<\/span>\n<span class=\"k\">const<\/span> <span class=\"kt\">int<\/span> <span class=\"n\">EN_PIN<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">21<\/span><span class=\"p\">;<\/span> <span class=\"c1\">\/\/ DE &amp; RE pins<\/span>\n\n<span class=\"c1\">\/\/ BLE variables<\/span>\n<span class=\"n\">BLEServer<\/span> <span class=\"o\">*<\/span><span class=\"n\">pServer<\/span> <span class=\"o\">=<\/span> <span class=\"nb\">NULL<\/span><span class=\"p\">;<\/span>\n<span class=\"n\">BLEService<\/span> <span class=\"o\">*<\/span><span class=\"n\">pService<\/span> <span class=\"o\">=<\/span> <span class=\"nb\">NULL<\/span><span class=\"p\">;<\/span>\n<span class=\"n\">BLECharacteristic<\/span> <span class=\"o\">*<\/span><span class=\"n\">pCharacteristic<\/span> <span class=\"o\">=<\/span> <span class=\"nb\">NULL<\/span><span class=\"p\">;<\/span>\n<span class=\"kt\">bool<\/span> <span class=\"n\">deviceConnected<\/span> <span class=\"o\">=<\/span> <span class=\"nb\">false<\/span><span class=\"p\">;<\/span>\n<span class=\"kt\">bool<\/span> <span class=\"n\">oldDeviceConnected<\/span> <span class=\"o\">=<\/span> <span class=\"nb\">false<\/span><span class=\"p\">;<\/span>\n\n<span class=\"c1\">\/\/ DMX variables<\/span>\n<span class=\"kt\">uint8_t<\/span> <span class=\"n\">dmxData<\/span><span class=\"p\">[<\/span><span class=\"n\">DMX_PACKET_SIZE<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"p\">{<\/span><span class=\"mi\">0<\/span><span class=\"p\">};<\/span>\n\n<span class=\"k\">const<\/span> <span class=\"kt\">unsigned<\/span> <span class=\"kt\">long<\/span> <span class=\"n\">DMX_TRANSMIT_INTERVAL<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">25<\/span><span class=\"p\">;<\/span> <span class=\"c1\">\/\/ 40Hz refresh rate<\/span>\n<span class=\"kt\">unsigned<\/span> <span class=\"kt\">long<\/span> <span class=\"n\">lastDmxTransmit<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">0<\/span><span class=\"p\">;<\/span>\n\n<span class=\"cp\">#define DEBUG true \/\/ Set to false to disable debug printing\n<\/span>\n<span class=\"kt\">void<\/span> <span class=\"nf\">printDmxDebug<\/span><span class=\"p\">(<\/span><span class=\"kt\">uint8_t<\/span> <span class=\"n\">channel<\/span><span class=\"p\">,<\/span> <span class=\"kt\">uint8_t<\/span> <span class=\"n\">value<\/span><span class=\"p\">)<\/span>\n<span class=\"p\">{<\/span>\n  <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"o\">!<\/span><span class=\"n\">DEBUG<\/span><span class=\"p\">)<\/span>\n    <span class=\"k\">return<\/span><span class=\"p\">;<\/span>\n\n  <span class=\"n\">Serial<\/span><span class=\"p\">.<\/span><span class=\"n\">print<\/span><span class=\"p\">(<\/span><span class=\"s\">\"DMX Channel \"<\/span><span class=\"p\">);<\/span>\n  <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"n\">channel<\/span> <span class=\"o\">&lt;<\/span> <span class=\"mi\">10<\/span><span class=\"p\">)<\/span>\n    <span class=\"n\">Serial<\/span><span class=\"p\">.<\/span><span class=\"n\">print<\/span><span class=\"p\">(<\/span><span class=\"s\">\"00\"<\/span><span class=\"p\">);<\/span>\n  <span class=\"k\">else<\/span> <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"n\">channel<\/span> <span class=\"o\">&lt;<\/span> <span class=\"mi\">100<\/span><span class=\"p\">)<\/span>\n    <span class=\"n\">Serial<\/span><span class=\"p\">.<\/span><span class=\"n\">print<\/span><span class=\"p\">(<\/span><span class=\"s\">\"0\"<\/span><span class=\"p\">);<\/span>\n  <span class=\"n\">Serial<\/span><span class=\"p\">.<\/span><span class=\"n\">print<\/span><span class=\"p\">(<\/span><span class=\"n\">channel<\/span><span class=\"p\">);<\/span>\n  <span class=\"n\">Serial<\/span><span class=\"p\">.<\/span><span class=\"n\">print<\/span><span class=\"p\">(<\/span><span class=\"s\">\" set to \"<\/span><span class=\"p\">);<\/span>\n  <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"n\">value<\/span> <span class=\"o\">&lt;<\/span> <span class=\"mi\">100<\/span><span class=\"p\">)<\/span>\n    <span class=\"n\">Serial<\/span><span class=\"p\">.<\/span><span class=\"n\">print<\/span><span class=\"p\">(<\/span><span class=\"s\">\" \"<\/span><span class=\"p\">);<\/span>\n  <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"n\">value<\/span> <span class=\"o\">&lt;<\/span> <span class=\"mi\">10<\/span><span class=\"p\">)<\/span>\n    <span class=\"n\">Serial<\/span><span class=\"p\">.<\/span><span class=\"n\">print<\/span><span class=\"p\">(<\/span><span class=\"s\">\" \"<\/span><span class=\"p\">);<\/span>\n  <span class=\"n\">Serial<\/span><span class=\"p\">.<\/span><span class=\"n\">print<\/span><span class=\"p\">(<\/span><span class=\"n\">value<\/span><span class=\"p\">);<\/span>\n  <span class=\"n\">Serial<\/span><span class=\"p\">.<\/span><span class=\"n\">print<\/span><span class=\"p\">(<\/span><span class=\"s\">\" (\"<\/span><span class=\"p\">);<\/span>\n  <span class=\"n\">Serial<\/span><span class=\"p\">.<\/span><span class=\"n\">print<\/span><span class=\"p\">(<\/span><span class=\"kt\">float<\/span><span class=\"p\">(<\/span><span class=\"n\">value<\/span><span class=\"p\">)<\/span> <span class=\"o\">\/<\/span> <span class=\"mf\">255.0<\/span> <span class=\"o\">*<\/span> <span class=\"mf\">100.0<\/span><span class=\"p\">,<\/span> <span class=\"mi\">1<\/span><span class=\"p\">);<\/span>\n  <span class=\"n\">Serial<\/span><span class=\"p\">.<\/span><span class=\"n\">println<\/span><span class=\"p\">(<\/span><span class=\"s\">\"%)\"<\/span><span class=\"p\">);<\/span>\n<span class=\"p\">}<\/span>\n\n<span class=\"k\">class<\/span> <span class=\"nc\">MyServerCallbacks<\/span> <span class=\"o\">:<\/span> <span class=\"k\">public<\/span> <span class=\"n\">BLEServerCallbacks<\/span>\n<span class=\"p\">{<\/span>\n  <span class=\"kt\">void<\/span> <span class=\"n\">onConnect<\/span><span class=\"p\">(<\/span><span class=\"n\">BLEServer<\/span> <span class=\"o\">*<\/span><span class=\"n\">pServer<\/span><span class=\"p\">)<\/span>\n  <span class=\"p\">{<\/span>\n    <span class=\"n\">deviceConnected<\/span> <span class=\"o\">=<\/span> <span class=\"nb\">true<\/span><span class=\"p\">;<\/span>\n  <span class=\"p\">}<\/span>\n  <span class=\"kt\">void<\/span> <span class=\"nf\">onDisconnect<\/span><span class=\"p\">(<\/span><span class=\"n\">BLEServer<\/span> <span class=\"o\">*<\/span><span class=\"n\">pServer<\/span><span class=\"p\">)<\/span>\n  <span class=\"p\">{<\/span>\n    <span class=\"n\">deviceConnected<\/span> <span class=\"o\">=<\/span> <span class=\"nb\">false<\/span><span class=\"p\">;<\/span>\n  <span class=\"p\">}<\/span>\n<span class=\"p\">};<\/span>\n\n<span class=\"cm\">\/*\nExample byte array format for sending DMX data over BLE:\nFor a simple RGB light starting at DMX address 1:\n[1, 255,    \/\/ Channel 1 (Red) = 255\n 2, 128,    \/\/ Channel 2 (Green) = 128\n 3, 64]     \/\/ Channel 3 (Blue) = 64\n\nFor multiple lights:\n[1, 255,    \/\/ Light 1: Red = 255\n 2, 128,    \/\/ Light 1: Green = 128\n 3, 64,     \/\/ Light 1: Blue = 64\n 4, 255,    \/\/ Light 1: Dimmer = 255\n 5, 0,      \/\/ Light 1: Strobe = 0\n 6, 255,    \/\/ Light 2: Red = 255\n 7, 0,      \/\/ Light 2: Green = 0\n 8, 0]      \/\/ Light 2: Blue = 0\n\nEach pair represents: [DMX_Channel, Value]\nChannel: 1-512\nValue: 0-255\n*\/<\/span>\n\n<span class=\"k\">class<\/span> <span class=\"nc\">MyCallbacks<\/span> <span class=\"o\">:<\/span> <span class=\"k\">public<\/span> <span class=\"n\">BLECharacteristicCallbacks<\/span>\n<span class=\"p\">{<\/span>\n  <span class=\"kt\">void<\/span> <span class=\"n\">onWrite<\/span><span class=\"p\">(<\/span><span class=\"n\">BLECharacteristic<\/span> <span class=\"o\">*<\/span><span class=\"n\">pCharacteristic<\/span><span class=\"p\">)<\/span>\n  <span class=\"p\">{<\/span>\n    <span class=\"n\">std<\/span><span class=\"o\">::<\/span><span class=\"n\">string<\/span> <span class=\"n\">rxValue<\/span> <span class=\"o\">=<\/span> <span class=\"n\">pCharacteristic<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">getValue<\/span><span class=\"p\">();<\/span>\n    <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"n\">rxValue<\/span><span class=\"p\">.<\/span><span class=\"n\">length<\/span><span class=\"p\">()<\/span> <span class=\"o\">&gt;<\/span> <span class=\"mi\">0<\/span><span class=\"p\">)<\/span>\n    <span class=\"p\">{<\/span>\n\n      <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"n\">DEBUG<\/span><span class=\"p\">)<\/span>\n      <span class=\"p\">{<\/span>\n        <span class=\"n\">Serial<\/span><span class=\"p\">.<\/span><span class=\"n\">println<\/span><span class=\"p\">(<\/span><span class=\"s\">\"<\/span><span class=\"se\">\\n<\/span><span class=\"s\">--- New DMX Values Received ---\"<\/span><span class=\"p\">);<\/span>\n      <span class=\"p\">}<\/span>\n\n      <span class=\"k\">for<\/span> <span class=\"p\">(<\/span><span class=\"kt\">size_t<\/span> <span class=\"n\">i<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">0<\/span><span class=\"p\">;<\/span> <span class=\"n\">i<\/span> <span class=\"o\">&lt;<\/span> <span class=\"n\">rxValue<\/span><span class=\"p\">.<\/span><span class=\"n\">length<\/span><span class=\"p\">()<\/span> <span class=\"o\">-<\/span> <span class=\"mi\">1<\/span><span class=\"p\">;<\/span> <span class=\"n\">i<\/span> <span class=\"o\">+=<\/span> <span class=\"mi\">2<\/span><span class=\"p\">)<\/span>\n      <span class=\"p\">{<\/span>\n        <span class=\"kt\">uint8_t<\/span> <span class=\"n\">channel<\/span> <span class=\"o\">=<\/span> <span class=\"n\">rxValue<\/span><span class=\"p\">[<\/span><span class=\"n\">i<\/span><span class=\"p\">];<\/span>\n        <span class=\"kt\">uint8_t<\/span> <span class=\"n\">value<\/span> <span class=\"o\">=<\/span> <span class=\"n\">rxValue<\/span><span class=\"p\">[<\/span><span class=\"n\">i<\/span> <span class=\"o\">+<\/span> <span class=\"mi\">1<\/span><span class=\"p\">];<\/span>\n        <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"n\">channel<\/span> <span class=\"o\">&lt;<\/span> <span class=\"n\">DMX_PACKET_SIZE<\/span><span class=\"p\">)<\/span>\n        <span class=\"p\">{<\/span>\n          <span class=\"n\">dmxData<\/span><span class=\"p\">[<\/span><span class=\"n\">channel<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"n\">value<\/span><span class=\"p\">;<\/span>\n          <span class=\"n\">printDmxDebug<\/span><span class=\"p\">(<\/span><span class=\"n\">channel<\/span><span class=\"p\">,<\/span> <span class=\"n\">value<\/span><span class=\"p\">);<\/span>\n        <span class=\"p\">}<\/span>\n      <span class=\"p\">}<\/span>\n\n      <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"n\">DEBUG<\/span><span class=\"p\">)<\/span>\n      <span class=\"p\">{<\/span>\n        <span class=\"n\">Serial<\/span><span class=\"p\">.<\/span><span class=\"n\">println<\/span><span class=\"p\">(<\/span><span class=\"s\">\"---------------------------<\/span><span class=\"se\">\\n<\/span><span class=\"s\">\"<\/span><span class=\"p\">);<\/span>\n      <span class=\"p\">}<\/span>\n\n      <span class=\"c1\">\/\/ Blink LED to indicate received data<\/span>\n      <span class=\"n\">digitalWrite<\/span><span class=\"p\">(<\/span><span class=\"n\">LED_PIN<\/span><span class=\"p\">,<\/span> <span class=\"n\">HIGH<\/span><span class=\"p\">);<\/span>\n      <span class=\"n\">delay<\/span><span class=\"p\">(<\/span><span class=\"mi\">10<\/span><span class=\"p\">);<\/span>\n      <span class=\"n\">digitalWrite<\/span><span class=\"p\">(<\/span><span class=\"n\">LED_PIN<\/span><span class=\"p\">,<\/span> <span class=\"n\">LOW<\/span><span class=\"p\">);<\/span>\n    <span class=\"p\">}<\/span>\n  <span class=\"p\">}<\/span>\n<span class=\"p\">};<\/span>\n\n<span class=\"kt\">void<\/span> <span class=\"nf\">setup<\/span><span class=\"p\">()<\/span>\n<span class=\"p\">{<\/span>\n  <span class=\"n\">Serial<\/span><span class=\"p\">.<\/span><span class=\"n\">begin<\/span><span class=\"p\">(<\/span><span class=\"mi\">115200<\/span><span class=\"p\">);<\/span>\n\n  <span class=\"c1\">\/\/ Setup BLE<\/span>\n  <span class=\"n\">BLEDevice<\/span><span class=\"o\">::<\/span><span class=\"n\">init<\/span><span class=\"p\">(<\/span><span class=\"s\">\"DMX Controller\"<\/span><span class=\"p\">);<\/span>\n  <span class=\"n\">pServer<\/span> <span class=\"o\">=<\/span> <span class=\"n\">BLEDevice<\/span><span class=\"o\">::<\/span><span class=\"n\">createServer<\/span><span class=\"p\">();<\/span>\n  <span class=\"n\">pServer<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">setCallbacks<\/span><span class=\"p\">(<\/span><span class=\"k\">new<\/span> <span class=\"n\">MyServerCallbacks<\/span><span class=\"p\">());<\/span>\n\n  <span class=\"n\">pService<\/span> <span class=\"o\">=<\/span> <span class=\"n\">pServer<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">createService<\/span><span class=\"p\">(<\/span><span class=\"n\">SERVICE_UUID<\/span><span class=\"p\">);<\/span>\n  <span class=\"n\">pCharacteristic<\/span> <span class=\"o\">=<\/span> <span class=\"n\">pService<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">createCharacteristic<\/span><span class=\"p\">(<\/span>\n      <span class=\"n\">CHARACTERISTIC_UUID<\/span><span class=\"p\">,<\/span>\n      <span class=\"n\">BLECharacteristic<\/span><span class=\"o\">::<\/span><span class=\"n\">PROPERTY_READ<\/span> <span class=\"o\">|<\/span>\n          <span class=\"n\">BLECharacteristic<\/span><span class=\"o\">::<\/span><span class=\"n\">PROPERTY_WRITE<\/span><span class=\"p\">);<\/span>\n\n  <span class=\"n\">pCharacteristic<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">setCallbacks<\/span><span class=\"p\">(<\/span><span class=\"k\">new<\/span> <span class=\"n\">MyCallbacks<\/span><span class=\"p\">());<\/span>\n  <span class=\"n\">pService<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">start<\/span><span class=\"p\">();<\/span>\n  <span class=\"n\">pServer<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">getAdvertising<\/span><span class=\"p\">()<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">start<\/span><span class=\"p\">();<\/span>\n\n  <span class=\"c1\">\/\/ Setup DMX<\/span>\n  <span class=\"n\">dmx_config_t<\/span> <span class=\"n\">config<\/span> <span class=\"o\">=<\/span> <span class=\"n\">DMX_CONFIG_DEFAULT<\/span><span class=\"p\">;<\/span>\n  <span class=\"n\">dmx_driver_install<\/span><span class=\"p\">(<\/span><span class=\"n\">dmx_num<\/span><span class=\"p\">,<\/span> <span class=\"o\">&amp;<\/span><span class=\"n\">config<\/span><span class=\"p\">,<\/span> <span class=\"nb\">NULL<\/span><span class=\"p\">,<\/span> <span class=\"mi\">0<\/span><span class=\"p\">);<\/span>\n  <span class=\"n\">dmx_set_pin<\/span><span class=\"p\">(<\/span><span class=\"n\">dmx_num<\/span><span class=\"p\">,<\/span> <span class=\"n\">TX_PIN<\/span><span class=\"p\">,<\/span> <span class=\"n\">RX_PIN<\/span><span class=\"p\">,<\/span> <span class=\"n\">EN_PIN<\/span><span class=\"p\">);<\/span>\n\n  <span class=\"n\">pinMode<\/span><span class=\"p\">(<\/span><span class=\"n\">LED_PIN<\/span><span class=\"p\">,<\/span> <span class=\"n\">OUTPUT<\/span><span class=\"p\">);<\/span>\n<span class=\"p\">}<\/span>\n\n<span class=\"kt\">void<\/span> <span class=\"nf\">loop<\/span><span class=\"p\">()<\/span>\n<span class=\"p\">{<\/span>\n  <span class=\"c1\">\/\/ Handle BLE connection status<\/span>\n  <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"o\">!<\/span><span class=\"n\">deviceConnected<\/span> <span class=\"o\">&amp;&amp;<\/span> <span class=\"n\">oldDeviceConnected<\/span><span class=\"p\">)<\/span>\n  <span class=\"p\">{<\/span>\n    <span class=\"n\">delay<\/span><span class=\"p\">(<\/span><span class=\"mi\">500<\/span><span class=\"p\">);<\/span>\n    <span class=\"n\">pServer<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">startAdvertising<\/span><span class=\"p\">();<\/span>\n    <span class=\"n\">oldDeviceConnected<\/span> <span class=\"o\">=<\/span> <span class=\"n\">deviceConnected<\/span><span class=\"p\">;<\/span>\n  <span class=\"p\">}<\/span>\n\n  <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"n\">deviceConnected<\/span> <span class=\"o\">&amp;&amp;<\/span> <span class=\"o\">!<\/span><span class=\"n\">oldDeviceConnected<\/span><span class=\"p\">)<\/span>\n  <span class=\"p\">{<\/span>\n    <span class=\"n\">oldDeviceConnected<\/span> <span class=\"o\">=<\/span> <span class=\"n\">deviceConnected<\/span><span class=\"p\">;<\/span>\n  <span class=\"p\">}<\/span>\n\n  <span class=\"c1\">\/\/ Continuously send DMX data at regular intervals<\/span>\n  <span class=\"kt\">unsigned<\/span> <span class=\"kt\">long<\/span> <span class=\"n\">currentMillis<\/span> <span class=\"o\">=<\/span> <span class=\"n\">millis<\/span><span class=\"p\">();<\/span>\n  <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"n\">currentMillis<\/span> <span class=\"o\">-<\/span> <span class=\"n\">lastDmxTransmit<\/span> <span class=\"o\">&gt;=<\/span> <span class=\"n\">DMX_TRANSMIT_INTERVAL<\/span><span class=\"p\">)<\/span>\n  <span class=\"p\">{<\/span>\n    <span class=\"n\">lastDmxTransmit<\/span> <span class=\"o\">=<\/span> <span class=\"n\">currentMillis<\/span><span class=\"p\">;<\/span>\n    <span class=\"n\">dmx_write<\/span><span class=\"p\">(<\/span><span class=\"n\">dmx_num<\/span><span class=\"p\">,<\/span> <span class=\"n\">dmxData<\/span><span class=\"p\">,<\/span> <span class=\"n\">DMX_PACKET_SIZE<\/span><span class=\"p\">);<\/span>\n    <span class=\"n\">dmx_send<\/span><span class=\"p\">(<\/span><span class=\"n\">dmx_num<\/span><span class=\"p\">);<\/span>\n    <span class=\"n\">dmx_wait_sent<\/span><span class=\"p\">(<\/span><span class=\"n\">dmx_num<\/span><span class=\"p\">,<\/span> <span class=\"n\">DMX_TIMEOUT_TICK<\/span><span class=\"p\">);<\/span>\n  <span class=\"p\">}<\/span>\n\n  <span class=\"c1\">\/\/ Blink LED when not connected<\/span>\n  <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"o\">!<\/span><span class=\"n\">deviceConnected<\/span><span class=\"p\">)<\/span>\n  <span class=\"p\">{<\/span>\n    <span class=\"n\">digitalWrite<\/span><span class=\"p\">(<\/span><span class=\"n\">LED_PIN<\/span><span class=\"p\">,<\/span> <span class=\"n\">HIGH<\/span><span class=\"p\">);<\/span>\n    <span class=\"n\">delay<\/span><span class=\"p\">(<\/span><span class=\"mi\">200<\/span><span class=\"p\">);<\/span>\n    <span class=\"n\">digitalWrite<\/span><span class=\"p\">(<\/span><span class=\"n\">LED_PIN<\/span><span class=\"p\">,<\/span> <span class=\"n\">LOW<\/span><span class=\"p\">);<\/span>\n    <span class=\"n\">delay<\/span><span class=\"p\">(<\/span><span class=\"mi\">200<\/span><span class=\"p\">);<\/span>\n  <span class=\"p\">}<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<h2><span class=\"ez-toc-section\" id=\"%D8%AA%D8%B3%D8%AA_%DA%A9%D8%B1%D8%AF%D9%86\"><\/span>\n<p>  \u062a\u0633\u062a \u06a9\u0631\u062f\u0646<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u067e\u0633 \u0627\u0632 \u0622\u067e\u0644\u0648\u062f \u06a9\u062f \u062f\u0631 ESP32\u060c \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u06cc\u06a9 \u0628\u0631\u0646\u0627\u0645\u0647 \u062a\u0631\u0645\u06cc\u0646\u0627\u0644 \u0628\u0644\u0648\u062a\u0648\u062b \u0645\u0627\u0646\u0646\u062f nRF Connect \u0628\u0647 ESP32 \u0645\u062a\u0635\u0644 \u0634\u0648\u06cc\u062f. \u0633\u067e\u0633 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u062f\u0627\u062f\u0647 \u0647\u0627\u06cc DMX \u0631\u0627 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u0647 ESP32 \u0627\u0631\u0633\u0627\u0644 \u06a9\u0646\u06cc\u062f \u0648 \u0686\u0631\u0627\u063a \u0631\u0627 \u06a9\u0646\u062a\u0631\u0644 \u06a9\u0646\u06cc\u062f. \u0647\u0645\u0686\u0646\u06cc\u0646 \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u062f \u0627\u0632 \u0646\u0645\u0627\u06cc\u0634\u06af\u0631 \u0633\u0631\u06cc\u0627\u0644 \u062f\u0631 Arduino IDE \u0628\u0631\u0627\u06cc \u0645\u0634\u0627\u0647\u062f\u0647 \u062f\u0627\u062f\u0647\u200c\u0647\u0627\u06cc DMX \u06a9\u0647 \u0627\u0632 \u0637\u0631\u06cc\u0642 \u0628\u0644\u0648\u062a\u0648\u062b \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc\u200c\u06a9\u0646\u06cc\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f\u060c \u0627\u06af\u0631 \u06a9\u062f \u0627\u0634\u06a9\u0627\u0644\u200c\u0632\u062f\u0627\u06cc\u06cc \u0627\u062e\u062a\u06cc\u0627\u0631\u06cc \u0631\u0627 \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u062f.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"%D9%86%D8%AD%D9%88%D9%87_%D8%A7%D8%B1%D8%B3%D8%A7%D9%84_%D8%A7%D8%B7%D9%84%D8%A7%D8%B9%D8%A7%D8%AA_DMX_%D8%A7%D8%B2_%D8%B7%D8%B1%DB%8C%D9%82_%D8%A8%D9%84%D9%88%D8%AA%D9%88%D8%AB\"><\/span>\n<p>  \u0646\u062d\u0648\u0647 \u0627\u0631\u0633\u0627\u0644 \u0627\u0637\u0644\u0627\u0639\u0627\u062a DMX \u0627\u0632 \u0637\u0631\u06cc\u0642 \u0628\u0644\u0648\u062a\u0648\u062b<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0628\u0631\u0627\u06cc \u0627\u0631\u0633\u0627\u0644 \u062f\u0627\u062f\u0647 \u0647\u0627\u06cc DMX \u0627\u0632 \u0637\u0631\u06cc\u0642 \u0628\u0644\u0648\u062a\u0648\u062b\u060c \u0628\u0627\u06cc\u062f \u06cc\u06a9 \u0622\u0631\u0627\u06cc\u0647 \u0628\u0627\u06cc\u062a \u0628\u0627 \u06a9\u0627\u0646\u0627\u0644 DMX \u0648 \u062c\u0641\u062a \u0647\u0627\u06cc \u0645\u0642\u062f\u0627\u0631 \u0627\u0631\u0633\u0627\u0644 \u06a9\u0646\u06cc\u062f. \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0645\u062b\u0627\u0644\u060c \u0628\u0631\u0627\u06cc \u062a\u0646\u0638\u06cc\u0645 \u06a9\u0627\u0646\u0627\u0644 \u0647\u0627\u06cc \u0642\u0631\u0645\u0632 \u0648 \u06a9\u0645 \u0646\u0648\u0631 \u0631\u0648\u06cc 255\u060c \u0628\u0627\u06cc\u062f \u0622\u0631\u0627\u06cc\u0647 \u0628\u0627\u06cc\u062a \u0632\u06cc\u0631 \u0631\u0627 \u0627\u0631\u0633\u0627\u0644 \u06a9\u0646\u06cc\u062f: <code>01FF04FF<\/code><\/p>\n<p><img decoding=\"async\" src=\"https:\/\/media2.dev.to\/dynamic\/image\/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto\/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9b5aa3w44o481j9vlq4q.jpg\" alt=\"\u0646\u062a\u06cc\u062c\u0647 \u0628\u0627 \u0645\u062b\u0627\u0644 nRF Connect\" loading=\"lazy\" width=\"800\" height=\"800\" title=\"\"><\/p>\n<h2><span class=\"ez-toc-section\" id=\"%D9%86%D8%AA%DB%8C%D8%AC%D9%87_%D9%86%D9%87%D8%A7%DB%8C%DB%8C\"><\/span>\n<p>  \u0646\u062a\u06cc\u062c\u0647 \u0646\u0647\u0627\u06cc\u06cc<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0628\u0631\u0627\u06cc \u0645\u062d\u0635\u0648\u0644 \u0646\u0647\u0627\u06cc\u06cc\u060c \u06cc\u06a9 \u06a9\u06cc\u0633 \u0633\u0641\u0627\u0631\u0634\u06cc \u0637\u0631\u0627\u062d\u06cc \u06a9\u0631\u062f\u0645 \u06a9\u0647 \u062f\u0627\u0631\u0627\u06cc \u06a9\u0627\u0646\u06a9\u062a\u0648\u0631 ESP32\u060c RS485\u060c led \u0648 XLR \u0627\u0633\u062a. \u0627\u06cc\u0646 \u06a9\u06cc\u0633 \u0628\u0647 \u0635\u0648\u0631\u062a \u0633\u0647 \u0628\u0639\u062f\u06cc \u067e\u0631\u06cc\u0646\u062a \u0634\u062f\u0647 \u0648 \u0628\u0627 \u0622\u0647\u0646\u0631\u0628\u0627 \u0628\u0631\u0627\u06cc \u062f\u0633\u062a\u0631\u0633\u06cc \u0622\u0633\u0627\u0646 \u0628\u0647 \u0645\u0627\u0698\u0648\u0644 ESP32 \u0648 RS485 \u062f\u0631 \u06a9\u0646\u0627\u0631 \u0647\u0645 \u0642\u0631\u0627\u0631 \u06af\u0631\u0641\u062a\u0647 \u0627\u0633\u062a. \u06a9\u0627\u0646\u06a9\u062a\u0648\u0631 XLR \u062f\u0631 \u062c\u0644\u0648\u06cc \u06a9\u06cc\u0633 \u062a\u0639\u0628\u06cc\u0647 \u0634\u062f\u0647 \u0627\u0633\u062a \u0648 \u067e\u0648\u0631\u062a USB ESP \u0627\u0632 \u067e\u0634\u062a \u06a9\u06cc\u0633 \u0628\u0627 \u06cc\u06a9 \u0633\u0648\u0631\u0627\u062e \u0628\u0631\u0627\u06cc LED \u0642\u0627\u0628\u0644 \u062f\u0633\u062a\u0631\u0633\u06cc \u0627\u0633\u062a.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/media2.dev.to\/dynamic\/image\/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto\/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu186cemn41deyuynfzhf.png\" alt=\"\u06a9\u06cc\u0633 \u067e\u0631\u06cc\u0646\u062a \u0633\u0647 \u0628\u0639\u062f\u06cc\" loading=\"lazy\" width=\"688\" height=\"433\" title=\"\"><\/p>\n<h3><span class=\"ez-toc-section\" id=\"%DA%86%D9%86%D8%AF_%D8%B9%DA%A9%D8%B3_%D8%A7%D8%B2_%D9%86%D8%AA%DB%8C%D8%AC%D9%87_%D9%86%D9%87%D8%A7%DB%8C%DB%8C\"><\/span>\n<p>  \u0686\u0646\u062f \u0639\u06a9\u0633 \u0627\u0632 \u0646\u062a\u06cc\u062c\u0647 \u0646\u0647\u0627\u06cc\u06cc<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p><img decoding=\"async\" src=\"https:\/\/media2.dev.to\/dynamic\/image\/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto\/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4d336j2fvv451wk8ehi3.jpg\" alt=\"\u0646\u062a\u06cc\u062c\u0647 \u0646\u0647\u0627\u06cc\u06cc\" loading=\"lazy\" width=\"800\" height=\"450\" title=\"\"><\/p>\n<\/p><\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u0627\u06cc\u0646 \u067e\u0631\u0648\u0698\u0647 \u06cc\u06a9 \u0645\u062b\u0627\u0644 \u0633\u0627\u062f\u0647 \u0627\u0632 \u0646\u062d\u0648\u0647 \u06a9\u0646\u062a\u0631\u0644 \u06cc\u06a9 \u0686\u0631\u0627\u063a DMX \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 ESP32 \u0627\u0632 \u0637\u0631\u06cc\u0642 \u0628\u0644\u0648\u062a\u0648\u062b \u0627\u0633\u062a. ESP32 \u062f\u0627\u062f\u0647 \u0647\u0627\u06cc DMX \u0631\u0627 \u0627\u0632 \u0637\u0631\u06cc\u0642 \u0628\u0644\u0648\u062a\u0648\u062b \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc \u06a9\u0646\u062f \u0648 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0645\u0627\u0698\u0648\u0644 RS485 \u0628\u0647 \u062f\u0633\u062a\u06af\u0627\u0647 \u0646\u0648\u0631 DMX \u0627\u0631\u0633\u0627\u0644 \u0645\u06cc \u06a9\u0646\u062f. \u0645\u0642\u062f\u0645\u0647 \u0647\u062f\u0641 \u0645\u0646 \u06a9\u0646\u062a\u0631\u0644 \u06cc\u06a9 \u0686\u0631\u0627\u063a DMX \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0627\u0631\u062a\u0628\u0627\u0637 \u0633\u0631\u06cc\u0627\u0644 &hellip;<\/p>\n","protected":false},"author":2,"featured_media":94750,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"fifu_image_url":"","fifu_image_alt":"","footnotes":""},"categories":[339],"tags":[],"class_list":["post-94749","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dev"],"_links":{"self":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts\/94749","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/comments?post=94749"}],"version-history":[{"count":0,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts\/94749\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media\/94750"}],"wp:attachment":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media?parent=94749"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/categories?post=94749"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/tags?post=94749"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}