Forum Rule: Always post complete source code & details to reproduce any issue!
Results 1 to 1 of 1

Thread: Control of multiple OctoWS2811 with DMX input

  1. #1
    Junior Member
    Join Date
    Nov 2022
    Posts
    1

    Control of multiple OctoWS2811 with DMX input

    Hi all,

    I'm working on the expansion of a project that I have coined disco jib which has been created for a private music festival and to bring some LED art to sailing trips. In its current configuration the disco sail utilizes two OctoWS2811 and FastLED library to control a total of 12 individual 5m RGB LED strips (1x 8 strips and 1x 4 strips). There is either a preprogrammed light show or the possibility to change effects via Serial interface and a Python script running on a laptop. Please find attached a picture of the installation during a recent sailing trip.

    For the next version of the disco jib I want to implement DMX control of the entire installation.

    Software used:
    - The freeware QLC+ for DMX control and light shows (https://www.qlcplus.org/)
    - TeensyDMX library (https://github.com/ssilverman/TeensyDMX)

    Additional hardware for DMX upgrade:
    - a USB to DMX RS485 adapter with FTDI chip for connection to the OctoWS2811's (https://www.amazon.de/dp/B07WV6P5W6?...302_E_DDE_dt_1)
    - a UART TTL to RS485 adapter 485 Seriell 3.3V/5V (https://www.ebay.de/itm/153880466847)
    - a female 3pin DMX socket

    I ran into troubles making the DMX connection work and despite quite some time invested cannot find the problem.

    This is the script I'm trying on the Teensy (from here: https://forum.pjrc.com/threads/66083...d-Teesny-4-1):
    Code:
    #include <TeensyDMX.h>
    namespace teensydmx = ::qindesign::teensydmx;
    
    teensydmx::Receiver dmxRx{Serial1};
    uint8_t buf[7] {0};
    uint32_t previousMillis = 0;
    uint32_t currentMillis = 0;
    
    void setup() {
      pinMode(LED_BUILTIN, OUTPUT);
      Serial.println("Starting DMX receive");
      dmxRx.begin();
    }
    
    void loop() {
      currentMillis = millis();
      if (dmxRx.readPacket(buf, 1, 7) == 7) {
        digitalToggle(LED_BUILTIN);
        Serial.print(currentMillis - previousMillis); Serial.print("\t");
        previousMillis = currentMillis;
        Serial.printf("R G B A W D C: %03d %03d %03d %03d %03d %03d %03d\n", buf[0], buf[1], buf[2], buf[3], buf[4], buf[5], buf[6]);
      } else {
        Serial.printf("FramingErrors: %d | PacketTimeouts: %d | ShortPackets: %d | LongPackets: %d | Connected: %d\n", 
          dmxRx.errorStats().framingErrorCount,
          dmxRx.errorStats().packetTimeoutCount,
          dmxRx.errorStats().shortPacketCount,
          dmxRx.errorStats().longPacketCount,
          dmxRx.connected()
         );
      }
    }
    Attached you can find the wiring. The script does not seem to receive any DMX signals. dmxRx.connected() is returned with false and no errors are reported (see screenshot). The DMX input via QLC+ itself is confirmed to be working as it should with a separate DMX-controlled light. The RS485 board has been successfully used with an Arduino Uno and the DMXSerial library.

    Anyone has an idea what might be wrong? I'm concerned the type of RS485 module I am using might be the problem as I cannot switch it manually to "receive" mode but it switches automatically (see here: https://electronics.stackexchange.co...module-working). It may be in the wrong mode for the TeensyDMX library to work properly?

    Any help would be highly appreciated.

    Thanks a lot!
    Attached Thumbnails Attached Thumbnails Click image for larger version. 

Name:	PXL_20221007_190105958s.jpg 
Views:	5 
Size:	67.7 KB 
ID:	29774   Click image for larger version. 

Name:	schematics-01.jpg 
Views:	6 
Size:	101.8 KB 
ID:	29775  

    Click image for larger version. 

Name:	Screenshot 2022-11-19 at 16.47.13.jpg 
Views:	6 
Size:	266.2 KB 
ID:	29776  

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •