Skip to content
This repository has been archived by the owner on Apr 28, 2022. It is now read-only.

Using 12v ws2811, only first IC lights up. #351

Closed
freudianSLAP opened this issue Mar 7, 2019 · 7 comments
Closed

Using 12v ws2811, only first IC lights up. #351

freudianSLAP opened this issue Mar 7, 2019 · 7 comments
Labels

Comments

@freudianSLAP
Copy link

freudianSLAP commented Mar 7, 2019

Hello,

I'm stuck. I managed to get everything installed and got the esp8266 flashed and connected to my wifi. I can see commands coming through the serial monitor when I select different modes or colors in the web GUI. However those commands dont seem to affect the 12v ws2811 strip at all. Only the first three LEDs (1 IC) are permanently on blue. They select that at startup and then nothing else happens. Any help would be greatly appreciated, Ive been trying to figure this out nonstop for the last two days and I'm at a loss.

Here is the output from ip-address/esp_status:

"HOSTNAME" "McLighting01"
"version""2.2.0"
"heap":24376,
"sketch_size":414608,
"free_sketch_space":2727936,
"flash_chip_size":4194304,
"flash_chip_real_size":4194304,
"flash_chip_speed":40000000,
"sdk_version":"2.2.1(cfd48f3)",
"core_version":"2_4_2",
"cpu_freq":80,
"chip_id":1458376,
"animation_lib":"WS2812FX_DMA",
"pin":3,
"number_leds":100,
"button_mode":"ON",
"home_assistant":"OFF",
"legacy_animations":"ON"
,"esp8266_http_updateserver":"ON",
"arduino_ota":"ON",
"state_save":"SPIFFS"}

Since I'm using the 12v strip I changed the wiring a little bit, I don't know if that's whats causing the problem. Here's a diagram of how I wired everything up. It starts with a 12v power supply that powers the strip directly. There's a seperate line that gets stepped down to 5v for the esp8266. After that wiring is basically identical to what is in the McLighting hardware tutorial.

12v ws2811

And here is my definitions.h file as I'm currently uploading it to the esp8266

#define USE_WS2812FX_DMA      // Uses PIN is ignored & set to RX/GPIO3  Uses WS2812FX, see: https://github.com/kitesurfer1404/WS2812FX
//#define USE_WS2812FX_UART1     // Uses PIN is ignored & set to D4/GPIO2  Uses WS2812FX, see: https://github.com/kitesurfer1404/WS2812FX
//#define USE_WS2812FX_UART2     // Uses PIN is ignored & set to TX/GPIO1  Uses WS2812FX, see: https://github.com/kitesurfer1404/WS2812FX

// Neopixel
#define PIN D2           // PIN (14 / D5) where neopixel / WS2811 strip is attached
#define NUMLEDS 100       // Number of leds in the strip
#define BUILTIN_LED 2    // ESP-12F has the built in LED on GPIO2, see https://github.com/esp8266/Arduino/issues/2192
#define BUTTON 4         // Input pin (4 / D2) for switching the LED strip on / off, connect this PIN to ground to trigger button.

const char HOSTNAME[] = "McLighting01";   // Friedly hostname

#define HTTP_OTA             // If defined, enable ESP8266HTTPUpdateServer OTA code.
#define ENABLE_OTA         // If defined, enable Arduino OTA code.
//#define ENABLE_AMQTT         // If defined, enable Async MQTT code, see: https://github.com/marvinroger/async-mqtt-client
//#define ENABLE_MQTT        // If defined, enable MQTT client code, see: https://github.com/toblum/McLighting/wiki/MQTT-API
//#define ENABLE_HOMEASSISTANT // If defined, enable Homeassistant integration, ENABLE_MQTT or ENABLE_AMQTT must be active
#define ENABLE_BUTTON        // If defined, enable button handling code, see: https://github.com/toblum/McLighting/wiki/Button-control
//#define MQTT_HOME_ASSISTANT_SUPPORT // If defined, use AMQTT and select Tools -> IwIP Variant -> Higher Bandwidth
#define ENABLE_LEGACY_ANIMATIONS // Dont disbale this for now
#define ENABLE_E131              // E1.31 implementation

#ifdef ENABLE_E131
  #define START_UNIVERSE 1                    // First DMX Universe to listen for
  #define END_UNIVERSE 2              // Total number of Universes to listen for, starting at UNIVERSE
#endif

//#define WIFIMGR_PORTAL_TIMEOUT 180
//#define WIFIMGR_SET_MANUAL_IP

#ifdef WIFIMGR_SET_MANUAL_IP
  uint8_t _ip[4] = {192,168,0,128};
  uint8_t _gw[4] = {192,168,0,1};
  uint8_t _sn[4] = {255,255,255,0};
#endif

#ifdef MQTT_HOME_ASSISTANT_SUPPORT
  #define MQTT_HOME_ASSISTANT_0_84_SUPPORT // Comment if using HA version < 0.84 
#endif

#if defined(USE_WS2812FX_DMA) and defined(USE_WS2812FX_UART)
#error "Cant have both DMA and UART method."
#endif
#if defined(ENABLE_MQTT) and defined(ENABLE_AMQTT)
#error "Cant have both PubSubClient and AsyncMQTT enabled. Choose either one."
#endif
#if ( (defined(ENABLE_HOMEASSISTANT) and !defined(ENABLE_MQTT)) and (defined(ENABLE_HOMEASSISTANT) and !defined(ENABLE_AMQTT)) )
#error "To use HA, you have to either enable PubCubClient or AsyncMQTT"
#endif
#if ( !defined(ENABLE_HOMEASSISTANT) and defined(MQTT_HOME_ASSISTANT_SUPPORT) )
#error "To use HA support, you have to either enable Homeassistant component"
#endif

// parameters for automatically cycling favorite patterns
uint32_t autoParams[][4] = { // color, speed, mode, duration (seconds)
  {0xff0000, 200,  1,  5.0}, // blink red for 5 seconds
  {0x00ff00, 200,  3, 10.0}, // wipe green for 10 seconds
  {0x0000ff, 200, 11,  5.0}, // dual scan blue for 5 seconds
  {0x0000ff, 200, 42, 15.0}  // fireworks for 15 seconds
};

#if defined(ENABLE_MQTT) or defined(ENABLE_AMQTT)
  #ifdef ENABLE_MQTT
    #define MQTT_MAX_PACKET_SIZE 2048
    #define MQTT_MAX_RECONNECT_TRIES 4

    int mqtt_reconnect_retries = 0;
    char mqtt_intopic[strlen(HOSTNAME) + 4 + 5];      // Topic in will be: <HOSTNAME>/in
    char mqtt_outtopic[strlen(HOSTNAME) + 5 + 5];     // Topic out will be: <HOSTNAME>/out
    uint8_t qossub = 0; // PubSubClient can sub qos 0 or 1
  #endif

  #ifdef ENABLE_AMQTT
    String mqtt_intopic = String(HOSTNAME) + "/in";
    String mqtt_outtopic = String(HOSTNAME) + "/out";
    uint8_t qossub = 0; // AMQTT can sub qos 0 or 1 or 2
    uint8_t qospub = 0; // AMQTT can pub qos 0 or 1 or 2
  #endif

  #ifdef ENABLE_HOMEASSISTANT
    String mqtt_ha = "home/" + String(HOSTNAME) + "_ha/";
    String mqtt_ha_state_in = mqtt_ha + "state/in";
    String mqtt_ha_state_out = mqtt_ha + "state/out";

    const char* on_cmd = "ON";
    const char* off_cmd = "OFF";
    bool stateOn = false;
    bool animation_on = false;
    bool new_ha_mqtt_msg = false;
    uint16_t color_temp = 327; // min is 154 and max is 500
  #endif

  //#define ENABLE_MQTT_HOSTNAME_CHIPID          // Uncomment/comment to add ESPChipID to end of MQTT hostname
  #ifdef ENABLE_MQTT_HOSTNAME_CHIPID
    char mqtt_clientid[64];
  #else
    const char* mqtt_clientid = HOSTNAME;
  #endif

  char mqtt_host[64] = "";
  char mqtt_port[6] = "";
  char mqtt_user[32] = "";
  char mqtt_pass[32] = "";
#endif


// ***************************************************************************
// Global variables / definitions
// ***************************************************************************
#define DBG_OUTPUT_PORT Serial  // Set debug output port

// List of all color modes
#ifdef ENABLE_LEGACY_ANIMATIONS
  #ifdef ENABLE_E131
    enum MODE { SET_MODE, HOLD, OFF, SETCOLOR, SETSPEED, BRIGHTNESS, WIPE, RAINBOW, RAINBOWCYCLE, THEATERCHASE, TWINKLERANDOM, THEATERCHASERAINBOW, TV, CUSTOM, E131 };
  #else
    enum MODE { SET_MODE, HOLD, OFF, SETCOLOR, SETSPEED, BRIGHTNESS, WIPE, RAINBOW, RAINBOWCYCLE, THEATERCHASE, TWINKLERANDOM, THEATERCHASERAINBOW, TV, CUSTOM };
  #endif
  MODE mode = RAINBOW;         // Standard mode that is active when software starts
  bool exit_func = false;      // Global helper variable to get out of the color modes when mode changes
#else
  enum MODE { SET_MODE, HOLD, OFF, SETCOLOR, SETSPEED, BRIGHTNESS, CUSTOM };
  MODE mode = SET_MODE;        // Standard mode that is active when software starts
#endif

MODE prevmode = mode;

int ws2812fx_speed = 196;   // Global variable for storing the delay between color changes --> smaller == faster
int brightness = 196;       // Global variable for storing the brightness (255 == 100%)

int ws2812fx_mode = 0;      // Helper variable to set WS2812FX modes

bool shouldSaveConfig = false;  // For WiFiManger custom config

struct ledstate             // Data structure to store a state of a single led
{
  uint8_t red;
  uint8_t green;
  uint8_t blue;
};

typedef struct ledstate LEDState;     // Define the datatype LEDState
LEDState ledstates[NUMLEDS];          // Get an array of led states to store the state of the whole strip
LEDState main_color = { 255, 0, 0 };  // Store the "main color" of the strip used in single color modes

#define ENABLE_STATE_SAVE_SPIFFS        // If defined, saves state on SPIFFS
//#define ENABLE_STATE_SAVE_EEPROM        // If defined, save state on reboot
#ifdef ENABLE_STATE_SAVE_EEPROM
  char current_state[32];               // Keeps the current state representation
  char last_state[32];                  // Save the last state as string representation
  unsigned long time_statechange = 0;   // Time when the state last changed
  int timeout_statechange_save = 5000;  // Timeout in ms to wait before state is saved
  bool state_save_requested = false;    // State has to be saved after timeout
#endif
#ifdef ENABLE_STATE_SAVE_SPIFFS
  bool updateStateFS = false;
#endif

// Button handling
#ifdef ENABLE_BUTTON
  #define BTN_MODE_SHORT "STA| 1|  0|245|196|255|255|255"   // Static white
  #define BTN_MODE_MEDIUM "STA| 1| 48|245|196|255|102|  0"    // Fire flicker
  #define BTN_MODE_LONG "STA| 1| 46|253|196|255|102|  0"  // Fireworks random

  unsigned long keyPrevMillis = 0;
  const unsigned long keySampleIntervalMs = 25;
  byte longKeyPressCountMax = 80;       // 80 * 25 = 2000 ms
  byte mediumKeyPressCountMin = 20;     // 20 * 25 = 500 ms
  byte KeyPressCount = 0;
  byte prevKeyState = HIGH;             // button is active low
  boolean buttonState = false;
#endif
@debsahu
Copy link
Collaborator

debsahu commented Mar 7, 2019

Since you have enabled #define USE_WS2812FX_DMA, PIN is ignored and you will have to use PIN RX/GPIO3 and not D2.

Since you are using 2811 strip, you will have to use NeoEsp8266Dma400KbpsMethod,

Replace

NeoEsp8266Dma800KbpsMethod* dma;
with

NeoEsp8266Dma400KbpsMethod* dma;

and replace

dma = new NeoEsp8266Dma800KbpsMethod(stripSize, 3); //800 KHz bitstream (most NeoPixel products w/WS2812 LEDs)

dma = new NeoEsp8266Dma400KbpsMethod(stripSize, 3);

@debsahu
Copy link
Collaborator

debsahu commented Mar 7, 2019

I made it easier in Develop Branch by just uncommenting following line

//#define LED_TYPE_WS2811 // Uncomment if LED type uses 400 KHz (classic 'v1' (not v2) FLORA pixels, WS2811 drivers)

@freudianSLAP
Copy link
Author

Thank you so much for getting back to me so quickly, I really appreciate it! So I deleted my McLighting folder and did a new clone of the McLighting repository. Though it seems like my newly cloned definitions.h file didn't have the updates you made, so I manually copy-pasted the raw definitions.h from the git website.

Here is how I have the beginning of your new definitions.h set up (I moved my data pin to d5 and left ws2812fx commented):


//#define USE_WS2812FX_DMA       // LED_PIN is ignored & set to RX/GPIO3  Uses WS2812FX, see: https://github.com/kitesurfer1404/WS2812FX
//#define USE_WS2812FX_UART1     // LED_PIN is ignored & set to D4/GPIO2  Uses WS2812FX, see: https://github.com/kitesurfer1404/WS2812FX
//#define USE_WS2812FX_UART2     // LED_PIN is ignored & set to TX/GPIO1  Uses WS2812FX, see: https://github.com/kitesurfer1404/WS2812FX

// Neopixel
#define LED_PIN D5       // LED_PIN (14 / D5) where neopixel / WS2811 strip is attached
#define NUMLEDS 100       // Number of leds in the strip
#define LED_TYPE_WS2811  // Uncomment if LED type uses 400 KHz (classic 'v1' (not v2) FLORA pixels, WS2811 drivers)
#define BUILTIN_LED 2    // ESP-12F has the built in LED on GPIO2, see https://github.com/esp8266/Arduino/issues/2192
#define BUTTON 4         // Input pin (4 / D2) for switching the LED strip on / off, connect this PIN to ground to trigger button.

#define HOSTNAME "McLighting01"   // Friedly hostname

#define HTTP_OTA             // If defined, enable ESP8266HTTPUpdateServer OTA code.
#define ENABLE_OTA         // If defined, enable Arduino OTA code.
//#define ENABLE_AMQTT         // If defined, enable Async MQTT code, see: https://github.com/marvinroger/async-mqtt-client
//#define ENABLE_MQTT        // If defined, enable MQTT client code, see: https://github.com/toblum/McLighting/wiki/MQTT-API
//#define ENABLE_HOMEASSISTANT // If defined, enable Homeassistant integration, ENABLE_MQTT or ENABLE_AMQTT must be active
#define ENABLE_BUTTON        // If defined, enable button handling code, see: https://github.com/toblum/McLighting/wiki/Button-control
//#define MQTT_HOME_ASSISTANT_SUPPORT // If defined, use AMQTT and select Tools -> IwIP Variant -> Higher Bandwidth
#define ENABLE_LEGACY_ANIMATIONS // Dont disbale this for now
#define ENABLE_E131              // E1.31 implementation
#define USE_HTML_MIN_GZ             //comment for using index.htm & edit.htm from SPIFFs instead of PROGMEM
//#define CUSTOM_WS2812FX_ANIMATIONS  //uncomment and put animations in "custom_ws2812fx_animations.h" 

WHen I try to build I get this error:

Compiling .pioenvs\nodemcuv2\src\McLighting.ino.cpp.o
In file included from C:/Users/Souren/Desktop/McLighting/Arduino/McLighting/McLighting.ino:459:0:
Arduino\McLighting\request_handlers.h: In function 'bool readStateFS()':
Arduino\McLighting\request_handlers.h:1415:25: error: 'stateOn' was not declared in this scope
if(mode != OFF) stateOn = true;
^
*** [.pioenvs\nodemcuv2\src\McLighting.ino.cpp.o] Error 1

@debsahu
Copy link
Collaborator

debsahu commented Mar 7, 2019

Please use this ZIP File

@freudianSLAP
Copy link
Author

freudianSLAP commented Mar 8, 2019

Ok I deleted everything and loaded the zip you provided. Building it returns this error:

Arduino\McLighting\request_handlers.h: In function 'bool readStateFS()':
Arduino\McLighting\request_handlers.h:1415:25: error: 'stateOn' was not declared in this scope
if(mode != OFF) stateOn = true;
^
Compiling .pioenvs\nodemcuv2\libe96\AsyncMqttClient_ID346\AsyncMqttClient\Packets\UnsubAckPacket.cpp.o
Archiving .pioenvs\nodemcuv2\lib833\libArduinoJson.a
Compiling .pioenvs\nodemcuv2\lib88f\Adafruit NeoPixel_ID28\Adafruit_NeoPixel.cpp.o
Compiling .pioenvs\nodemcuv2\lib88f\Adafruit NeoPixel_ID28\esp8266.c.o
*** [.pioenvs\nodemcuv2\src\McLighting.ino.cpp.o] Error 1
Compiling .pioenvs\nodemcuv2\lib919\WS2812FX_ID1647\WS2812FX.cpp.o

Looks like the error specifically points to line

   line 1415        if(mode != OFF) stateOn = true; 

@debsahu
Copy link
Collaborator

debsahu commented Mar 8, 2019

Thank you, it looks like I overlooked the fact that stateOn is defined for Home Assistant. For now, could you uncomment //#define ENABLE_HOMEASSISTANT. Even if you don't use HA, McLighting will function.

@debsahu debsahu added the bug label Mar 8, 2019
debsahu added a commit that referenced this issue Mar 8, 2019
- hotfix #351
@debsahu debsahu mentioned this issue Mar 8, 2019
@debsahu
Copy link
Collaborator

debsahu commented Mar 8, 2019

Please update to master version v2.2.2, should be fixed. Please feel free to reopen if you still facing issues.

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
Projects
None yet
Development

No branches or pull requests

2 participants