<table> <tr><td> <a href=“https://old.reddit.com/r/FastLED/comments/14mfelz/trying_to_use_two_esp32_to_connect_to_resolume/”> <img src=“https://b.thumbs.redditmedia.com/7kp3kpHs3EgtkwQbq7llACJzSeBRuVCglAsAIYMwz-c.jpg” alt=“Trying to use two ESP32 to connect to resolume over Artnet - Are the ESPs to weak for the project? (long)” title=“Trying to use two ESP32 to connect to resolume over Artnet - Are the ESPs to weak for the project? (long)” /> </a> </td><td> <!-- SC_OFF --><div class=“md”><p>I would like to control 16 led strips over Artnet with Resolume Arena 6. Here is what I got so far:</p> <p>My controllers: 2 x QuinLED-Dig-Octa System Brainboard (some fancy board for an ESP32 with LAN port, easy power supply etc)</p> <p>16 x WS2815 strips, each 4.5m with 60led/m which gives me 270 leds per strip, which makes 4320 LEDs<br/> Every strip has an individual data input, each ESP32 gets 8 inputs.</p> <p>The strips are arranged in one big matrix (5x8m if that’s of interest)</p> <p>The software I have and want to use: Resolume Arena 6. The installation is going to be used by VJs.</p> <p>My knowledge concerning DMX:</p> <p>One DMX universe can only fit 170 leds, so I create two universes per strip.<br/> There are only 16 universes available but there are also 16 subnets each with 16 universes.<br/> DMX wise I'm able to fit all my LEDs into 2 subnets that each have 16 universes.</p> <p>In Resolume I create two lumiverses for one led strip and assign it to the corresponding universe/subnet. For example:<br/> Strip1_half1: Universe0, subnet0<br/> Strip1_half2: Universe1, subnet0<br/> Strip2_half1: Universe2, subnet0<br/> Strip2_half2: Universe3, subnet0</p> <p>…<br/> Strip9_half1: Universe0, subnet1<br/> Strip9_half2: Universe1, subnet1</p> <p>During the project I ran into two problems, one being minor (I think) and one being major.</p> <p>The smaller one is the serial monitor crashing when using pin 0 and 1 for my first two strips, which is weird because they are hardwired on the (kinda professional looking) boards that I got – see this link:</p> <p><a href=“https://quinled.info/quinled-dig-octa-brainboard-32-8l-pinout-guide/”>https://quinled.info/quinled-dig-octa-brainboard-32-8l-pinout-guide/</a></p> <p>The serial monitor looks like this when it is crashing. Arduino is behaving very laggy when the serial monitor is opened and this text is displayed but the strips on pin 0 and 1 are working just as the other ones.</p> <p>​</p> <p><a href=“https://preview.redd.it/trtz37h7m09b1.jpg?width=833&amp;format=pjpg&amp;auto=webp&amp;s=e319487e75841f20a44bbc68c3c18d4e2aa1c5db”>https://preview.redd.it/trtz37h7m09b1.jpg?width=833&amp;format=pjpg&amp;auto=webp&amp;s=e319487e75841f20a44bbc68c3c18d4e2aa1c5db</a></p> <p>The entire SSID "laderaum-led-router" should be displayed there… The serial monitor doesn't crash when I'm only using 12 universes on pins 2-5 and 12 + 13. Upon using 0 and 1 (no matter if they are used on top or only these two) the serial monitor crashes.</p> <p>The bigger issue is that the entire display on the strips is super laggy (also without using the pins 0 and 1). I recorded a video (please excuse the mess, its still work in progress) that shows the input from resolume and the output on my strips. Its just 8 strips from one controller but I believe that doesnt matter.</p> <p><a href=“https://drive.google.com/file/d/1pF8LiqABcXcZpkC1yW5FHbXRAhp_-XRt/view?usp=sharing”>https://drive.google.com/file/d/1pF8LiqABcXcZpkC1yW5FHbXRAhp_-XRt/view?usp=sharing</a></p> <p>For anyone not familiar with Resolume and still reading at this point: On the screen are the 8 LED strips horizontally. The video played on top of it should be displayed by the LED strips but its super laggy.</p> <p>This doesn't work for me as is.</p> <p>I found that Wled also supports artnet but it states that not more than 3 strips parallel with a maximum of 9 universes are recommended, I have 8 strips with each 270 leds, so 16 universes are required.</p> <p>I came to the question if the WiFi is the issue and found this library for Artnet over ethernet (my boards have RJ45 ports). The code looks super straight forward but it doesn’t seem to work and there is no useful output on the serial monitor to troubleshoot. I’m also unsure if that library would solve the issue.</p> <p><a href=“https://github.com/hideakitai/ArtNet”>https://github.com/hideakitai/ArtNet</a></p> <p>Resulting questions to continue like this are as follows:</p> <ol> <li>Does the ArtnetWifi library work for my project or is it just too much data over DMX?</li> <li>I fit should work, how could I improve the performance?</li> <li>If it doesn’t are the any other strings I can pull to still be able to use resolume? My last straw for the ESP32s is hardcoding patterns with fastled or just Wled alone but that’s not half as good</li> </ol> <p>Honestly if it doesn't work well with 2 esp32's I think I would just get 16 ESP8266, they are about 50cents each on ali express, I still have a good 6 weeks to finish the project - one ESP8266 should be able to handle two universes (270leds in total) on two pins with ease, right?</p> <p>Here is the entire code. Maybe it helps anyone in a similar situation:</p> <p><a href=“https://pastebin.com/dB6xnJHL”>https://pastebin.com/dB6xnJHL</a></p> <pre><code>#include <WiFi.h> #include <WiFiUdp.h> #include <ArtnetWifi.h> #include <FastLED.h> //Wifi settings - be sure to replace these with the WiFi network that your computer is connected to const char* ssid = "laderaum-led-router"; const char* password = "blink-blink666"; // LED Strip const int numLeds = 270; // Change if your setup has more or less LED's const int numberOfChannels = numLeds * 3; // Total number of DMX channels you want to receive (1 led = 3 channels) #define DATA_PIN_STRIP_1 0 //The data pin that the WS2812 strips are connected to. #define DATA_PIN_STRIP_2 1 #define DATA_PIN_STRIP_3 2 #define DATA_PIN_STRIP_4 3 #define DATA_PIN_STRIP_5 4 #define DATA_PIN_STRIP_6 5 #define DATA_PIN_STRIP_7 12 #define DATA_PIN_STRIP_8 13 CRGB line1[numLeds]; CRGB line2[numLeds]; CRGB line3[numLeds]; CRGB line4[numLeds]; CRGB line5[numLeds]; CRGB line6[numLeds]; CRGB line7[numLeds]; CRGB line8[numLeds]; // Artnet settings ArtnetWifi artnet; const int startUniverse = 0; bool sendFrame = 1; int previousDataLength = 0; // connect to wifi – returns true if successful or false if not boolean ConnectWifi(void) { boolean state = true; int i = 0; Serial.println("Starting to connect"); WiFi.begin(ssid, password); Serial.println(""); Serial.println("Connecting to WiFi"); // Wait for connection Serial.print("Connecting"); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); if (i > 20) { state = false; break; } i++; } if (state) { Serial.println(""); Serial.print("Connected to "); Serial.println(ssid); Serial.print("IP address: "); Serial.println(WiFi.localIP()); } else { Serial.println(""); Serial.println("Connection failed."); } return state; } void onDmxFrame(uint16_t universe, uint16_t length, uint8_t sequence, uint8_t* data) { Serial.println(universe); //Serial.println("\t\t"); sendFrame = 1; if (universe == 0) { memcpy(line1, data, 510); } else if (universe == 1) { memcpy(line1 + 171, data, 300); } else if (universe == 2) { memcpy(line2, data, 510); } else if (universe == 3) { memcpy(line2 + 171, data, 300); } else if (universe == 4) { memcpy(line3, data, 510); } else if (universe == 5) { memcpy(line3 + 171, data, 300); } else if (universe == 6) { memcpy(line4, data, 510); } else if (universe == 7) { memcpy(line4 + 171, data, 510); } else if (universe == 8) { memcpy(line5, data, 510); } else if (universe == 9) { memcpy(line5 + 171, data, 510); } else if (universe == 10) { memcpy(line6, data, 510); } else if (universe == 11) { memcpy(line6 + 171, data, 510); } else if (universe == 12) { memcpy(line7, data, 510); } else if (universe == 13) { memcpy(line7 + 171, data, 510); } else if (universe == 14) { memcpy(line8, data, 510); } else if (universe == 15) { memcpy(line8 + 171, data, 510); } if (sendFrame) { FastLED.show(); } } void setup() { Serial.begin(115200); ConnectWifi(); artnet.begin(); FastLED.addLeds<WS2812, DATA_PIN_STRIP_1>(line1, numLeds); FastLED.addLeds<WS2812, DATA_PIN_STRIP_2>(line2, numLeds); FastLED.addLeds<WS2812, DATA_PIN_STRIP_3>(line3, numLeds); FastLED.addLeds<WS2812, DATA_PIN_STRIP_4>(line4, numLeds); FastLED.addLeds<WS2812, DATA_PIN_STRIP_5>(line5, numLeds); FastLED.addLeds<WS2812, DATA_PIN_STRIP_6>(line6, numLeds); FastLED.addLeds<WS2812, DATA_PIN_STRIP_7>(line7, numLeds); FastLED.addLeds<WS2812, DATA_PIN_STRIP_8>(line8, numLeds); // onDmxFrame will execute every time a packet is received by the ESP32 artnet.setArtDmxCallback(onDmxFrame); } void loop() { // we call the read function inside the loop artnet.read(); } </code></pre> <p>​</p> </div><!-- SC_ON --> submitted by <a href=“https://old.reddit.com/user/RollLikeRick”> /u/RollLikeRick </a> <br/> <span><a href=“https://old.reddit.com/r/FastLED/comments/14mfelz/trying_to_use_two_esp32_to_connect_to_resolume/”>[link]</a></span> <span><a href=“https://old.reddit.com/r/FastLED/comments/14mfelz/trying_to_use_two_esp32_to_connect_to_resolume/”>[comments]</a></span> </td></tr></table>