user71017: I bought some individually addressable LED strips (a large reel). To keep the cost down they are WS2811 and it's one chip per 6 leds. I don't know the cheapness or LED styl makes any difference to the problem but I'm just putting it out there.
They support 24V so to be safe I'm running them at 23V. I have the data line hooked up to pin 13 of the ESP, and a ground connection to the power supply to create a common ground. I am using Alexa to control the colours. This is the code:
#include <WiFi.h>
#include <Espalexa.h>
#include <FastLED.h>
#include <Adafruit_NeoPixel.h>

FASTLED_USING_NAMESPACE

#define NUM_LEDS 120
#define LED_TYPE WS2811
#define LED_PIN 13
CRGB leds[NUM_LEDS];

Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUM_LEDS, LED_PIN, NEO_RGB + NEO_KHZ400);

#define ESPALEXA_ASYNC
Espalexa espalexa;

#define RELAY_PIN 12

boolean connectWifi();

void colorLightChanged(uint8_t brightness, uint32_t rgb);

const char* ssid = "****";
const char* password = "****";
boolean wifiConnected = false;


void setup()
{
  Serial.begin(115200);
  delay(2000);
  
//  FastLED.addLeds<LED_TYPE, LED_PIN>(leds, NUM_LEDS);
//
  pinMode(LED_PIN, OUTPUT);
  pinMode(RELAY_PIN, OUTPUT);

  digitalWrite(RELAY_PIN, HIGH);
//
//  for (int i = 0; i < NUM_LEDS ; i++) {
//    leds[i] = CRGB(0, 0, 0);
//  }
//  FastLED.show();

  strip.begin();
  strip.show();
  
  wifiConnected = connectWifi();
  
  if(wifiConnected){
    espalexa.addDevice("Lights", colorLightChanged);

    espalexa.begin();
    
  } else
  {
    while (1) {
      Serial.println("Cannot connect to WiFi. Please check data and reset the ESP.");
      delay(2500);
    }
  }
}
 
void loop()
{
   espalexa.loop();
   delay(1);
}

void colorLightChanged(uint8_t brightness, uint32_t rgb) {
  for (int i = 0; i < NUM_LEDS; i++) {
//    leds[i] = CRGB((rgb >> 16) & 0xFF, (rgb >>  8) & 0xFF, rgb & 0xFF);
//    FastLED.setBrightness(brightness);
      strip.setPixelColor(i, (rgb >> 16) & 0xFF, (rgb >>  8) & 0xFF, rgb & 0xFF);
  }
//  FastLED.show();
    strip.show();

  if(brightness == 0) { //lights off
    digitalWrite(RELAY_PIN, LOW);
  }
  else { //lights on
    digitalWrite(RELAY_PIN, HIGH);
  }

//  Serial.print("Brightness: ");
//  Serial.print(brightness);
//  Serial.print(", Red: ");
//  Serial.print((rgb >> 16) & 0xFF); //get red component
//  Serial.print(", Green: ");
//  Serial.print((rgb >>  8) & 0xFF); //get green
//  Serial.print(", Blue: ");
//  Serial.println(rgb & 0xFF); //get blue
}

boolean connectWifi(){
  boolean state = true;
  int i = 0;
  
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  Serial.println("");
  Serial.println("Connecting to WiFi");

  Serial.print("Connecting...");
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
    if (i > 40){
      state = false; break;
    }
    i++;
  }
  Serial.println("");
  if (state){
    Serial.print("Connected to ");
    Serial.println(ssid);
    Serial.print("IP address: ");
    Serial.println(WiFi.localIP());
  }
  else {
    Serial.println("Connection failed.");
  }
  return state;
}

I've tried both Neopixel and FastLED with the same outcomes. Those outcomes are totally wrong colours:
This is supposed to be cyan except it's mostly yellow with a bit of blue.

This is supposed to be purple

And I think you get the idea. The lights strips light up with wrong colours (I've had whats supposed to be gold, be purple), blotches of colours or just make some look really similar (on Alexa, warm white to cool white look almost identical apart from a change in brightness).
I don't know what could be causing this though. I've made sure theres a common ground, I've made sure the pin on the ESP is right (i.e. just a plain output pin with no other fancy stuff), I've tried 2 different libraries and still no luck.
Could anyone help me out?
EDIT: These are these the strips I bought if it helps: https://www.superlightingled.com/65ft20m-roll-ws2811-dc24v-36ledsm-addressable-led-light-strips-digital-full-dream-color-chasing-flexible-led-strips-p-3163.html

user2881: That strip seems to be BGR instead or RGB.
Use NEO_GRB instead in your initializer. So:
Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUM_LEDS, LED_PIN, NEO_BGR + NEO_KHZ400);


71017: <p>I bought some individually addressable LED strips (a large reel). To keep the cost down they are WS2811 and it's one chip per 6 leds. I don't know the cheapness or LED styl makes any difference to the problem but I'm just putting it out there.</p>
<p>They support 24V so to be safe I'm running them at 23V. I have the data line hooked up to pin 13 of the ESP, and a ground connection to the power supply to create a common ground. I am using Alexa to control the colours. This is the code:</p>
<pre><code>#include &lt;WiFi.h&gt;
#include &lt;Espalexa.h&gt;
#include &lt;FastLED.h&gt;
#include &lt;Adafruit_NeoPixel.h&gt;

FASTLED_USING_NAMESPACE

#define NUM_LEDS 120
#define LED_TYPE WS2811
#define LED_PIN 13
CRGB leds[NUM_LEDS];

Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUM_LEDS, LED_PIN, NEO_RGB + NEO_KHZ400);

#define ESPALEXA_ASYNC
Espalexa espalexa;

#define RELAY_PIN 12

boolean connectWifi();

void colorLightChanged(uint8_t brightness, uint32_t rgb);

const char* ssid = &quot;****&quot;;
const char* password = &quot;****&quot;;
boolean wifiConnected = false;


void setup()
{
  Serial.begin(115200);
  delay(2000);
  
//  FastLED.addLeds&lt;LED_TYPE, LED_PIN&gt;(leds, NUM_LEDS);
//
  pinMode(LED_PIN, OUTPUT);
  pinMode(RELAY_PIN, OUTPUT);

  digitalWrite(RELAY_PIN, HIGH);
//
//  for (int i = 0; i &lt; NUM_LEDS ; i++) {
//    leds[i] = CRGB(0, 0, 0);
//  }
//  FastLED.show();

  strip.begin();
  strip.show();
  
  wifiConnected = connectWifi();
  
  if(wifiConnected){
    espalexa.addDevice(&quot;Lights&quot;, colorLightChanged);

    espalexa.begin();
    
  } else
  {
    while (1) {
      Serial.println(&quot;Cannot connect to WiFi. Please check data and reset the ESP.&quot;);
      delay(2500);
    }
  }
}
 
void loop()
{
   espalexa.loop();
   delay(1);
}

void colorLightChanged(uint8_t brightness, uint32_t rgb) {
  for (int i = 0; i &lt; NUM_LEDS; i++) {
//    leds[i] = CRGB((rgb &gt;&gt; 16) &amp; 0xFF, (rgb &gt;&gt;  8) &amp; 0xFF, rgb &amp; 0xFF);
//    FastLED.setBrightness(brightness);
      strip.setPixelColor(i, (rgb &gt;&gt; 16) &amp; 0xFF, (rgb &gt;&gt;  8) &amp; 0xFF, rgb &amp; 0xFF);
  }
//  FastLED.show();
    strip.show();

  if(brightness == 0) { //lights off
    digitalWrite(RELAY_PIN, LOW);
  }
  else { //lights on
    digitalWrite(RELAY_PIN, HIGH);
  }

//  Serial.print(&quot;Brightness: &quot;);
//  Serial.print(brightness);
//  Serial.print(&quot;, Red: &quot;);
//  Serial.print((rgb &gt;&gt; 16) &amp; 0xFF); //get red component
//  Serial.print(&quot;, Green: &quot;);
//  Serial.print((rgb &gt;&gt;  8) &amp; 0xFF); //get green
//  Serial.print(&quot;, Blue: &quot;);
//  Serial.println(rgb &amp; 0xFF); //get blue
}

boolean connectWifi(){
  boolean state = true;
  int i = 0;
  
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  Serial.println(&quot;&quot;);
  Serial.println(&quot;Connecting to WiFi&quot;);

  Serial.print(&quot;Connecting...&quot;);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(&quot;.&quot;);
    if (i &gt; 40){
      state = false; break;
    }
    i++;
  }
  Serial.println(&quot;&quot;);
  if (state){
    Serial.print(&quot;Connected to &quot;);
    Serial.println(ssid);
    Serial.print(&quot;IP address: &quot;);
    Serial.println(WiFi.localIP());
  }
  else {
    Serial.println(&quot;Connection failed.&quot;);
  }
  return state;
}
</code></pre>
<p>I've tried both Neopixel and FastLED with the same outcomes. Those outcomes are totally wrong colours:
This is supposed to be <code>cyan</code> except it's mostly yellow with a bit of blue.
<a href="https://i.stack.imgur.com/xiLOi.jpg" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/xiLOi.jpg" alt="" /></a>
This is supposed to be <code>purple</code>
<a href="https://i.stack.imgur.com/AoXsf.jpg" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/AoXsf.jpg" alt="" /></a>
And I think you get the idea. The lights strips light up with wrong colours (I've had whats supposed to be <code>gold</code>, be <code>purple</code>), blotches of colours or just make some look really similar (on Alexa, warm white to cool white look almost identical apart from a change in brightness).</p>
<p>I don't know what could be causing this though. I've made sure theres a common ground, I've made sure the pin on the ESP is right (i.e. just a plain output pin with no other fancy stuff), I've tried 2 different libraries and still no luck.</p>
<p>Could anyone help me out?</p>
<p>EDIT: These are these the strips I bought if it helps: <a href="https://www.superlightingled.com/65ft20m-roll-ws2811-dc24v-36ledsm-addressable-led-light-strips-digital-full-dream-color-chasing-flexible-led-strips-p-3163.html" rel="nofollow noreferrer">https://www.superlightingled.com/65ft20m-roll-ws2811-dc24v-36ledsm-addressable-led-light-strips-digital-full-dream-color-chasing-flexible-led-strips-p-3163.html</a></p>
 2881: <p>That strip seems to be BGR instead or RGB.</p>
<p>Use <code>NEO_GRB</code> instead in your initializer. So:</p>
<pre><code>Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUM_LEDS, LED_PIN, NEO_BGR + NEO_KHZ400);
</code></pre>
