Skip to content

Colour changing Bluetooth WS2812B RGB ring light

Output for Colour changing Bluetooth WS2812B RGB ring light
Table of Contents
    Colour changing lights never fail to mesmerise! It’s fascinating how colourful lights can instantly change our mood. What if you can DIY a colour-changing Bluetooth WS2812B RGB ring light as your own desk decor light? Look no further, you can now achieve this with the help of the WS2812B RGB Ring, HC-05 Bluetooth Module powered by MB102 Power Supply Module interfaced to ESP8266. Take a look at what each has to offer:-

    • WS2812B RGB Ring also known as NeoPixel RGB ring is a programmable RGB LED light in the form of a ring, where a single pixel is made up of a combination of red, green and blue LEDs and a WS2812 driver chip. Each pixel in a ring can be individually customised without disturbing the others to create a full spectrum of colours and animations. Programming the WS812B RGB ring using any microcontroller is quite convenient as it supports a single data line communication to control all the pixels at once via a PWM signal.
    • HC-05 Bluetooth Module is designed to wirelessly exchange information between a microcontroller and smartphone via Arduino Blue Control Application up to a range of 100m. It has a built-in red blinking LED to indicate its connection status.
    • MB102 Power Supply Module is used to power different electronic components drawing 3.3V or 5V. For example, the WS2812B RGB ring operates at 3.3V and the HC-05 Bluetooth Module operates at 5V. MB102 Power Supply Module can simultaneously power up these electronic components as per their operating voltage via its 3.3V or 5V voltage regulators. It has a built-in green LED indicator and a button to switch ON/OFF. To power this module, it can be connected to a Power Bank via a Male-to-Male USB cable.
    • ESP8266 is used as a microcontroller to program the WS2812B RGB Ring as per the smartphone’s input which is conveyed to the microcontroller (ESP8266) via HC-05 Bluetooth module via USART communication.

    Explore ESP8266 Related DIY E-Projects: Displaying images on ST7789 IPS module interfaced with ESP8266

    The basic working principle is that each button on the Arduino Blue Control App corresponds to an ASCII character to be sent to ESP8266 by the HC-05 Bluetooth module via USART communication at a 9600 bits/s Baud Rate on button press. ESP8266 inputs the programming instructions to WS2812B RGB ring via its digital PWM signal. These programming instructions include functions from the Adafuit NeoPixel library that send/receive 24-bit RGB888 format data and speed of transition in milliseconds for every pixel in order to create different colour change/animation effects.

    Our aim for this DIY E-project is to change/play the colours/animations of the WS2812B RGB ring light from the Arduino Blue Control smartphone App with 6 different button options:-

    Buttons

    Displayed Output

    Button C

    Cyan light

    Button O

    Orange light

    Button P

    Pink light

    Button V

    Violet light

    Button W

    3 cycles of white chasing light animation

    Button R

    3 cycles rainbow effect animation

    E-COMPONENTS

    These are all the electronic components which are required for this DIY E-Project and their purchase links:-

    MODEL

    E-COMPONENT

    PURCHASE LINK

    Jumper Wires

    NodeMCU ESP8266

    16 Bit WS2812B RGB LED Ring

    16 Bit WS2812B RGB LED Ring

    HC-05 Bluetooth Module

    HC-05 Bluetooth Module

    3.3V/5V MB102 Breadboard Power Supply Module

    3.3V/5V MB102 Breadboard Power Supply Module

    400 Points Breadboard

    Male to Male USB cable

    Male to Male USB cable

    USB data cable

    USB data cable

    Power bank

    Power bank

    For creating the lightshade, here are the products required along with their purchase links:-

    PRODUCT

    PURCHASE LINK

    Tulip Earbud Container

    Stencil Sheet

    Decoupage Napkin

    Modge Podge Gloss

    Disclaimer: I will earn a commission each time a visitor makes a purchase using my affiliate link.

    CIRCUIT DIAGRAM
    Circuit Diagram for Colour changing Bluetooth WS2812B RGB ring light
    Circuit Diagram for Colour changing Bluetooth WS2812B RGB ring light
    SCHEMATIC DIAGRAM
    Schematic Diagram for Colour changing Bluetooth WS2812B RGB ring light
    Schematic Diagram for Colour changing Bluetooth WS2812B RGB ring light
    PROCEDURE

    These are some of the step-by-step guidelines to be followed for this DIY E-Project:

    1. Install the latest Arduino IDE.
    2. Install the Adafruit NeoPixel library in Arduino IDE.
    3. Make hardware connections as per the above circuit and schematic diagrams. (Note: The WS2812B RGB ring needs to be soldered to leads/jumper wires before use. Simply, get it soldered from your local electronic repair shop in case you have no prior soldering experience.)
    4. Switch ON the 3.3V/5V MB102 Power Supply module by connecting it to the Power bank via Male to Male USB cable. Connect the ESP8266 to your Laptop/PC via a USB data cable. In Arduino IDE, go to→Tools and select Board as NodeMCU 1.0 (ESP-12E Module) and COM port accordingly.
    5. Disconnect the RX and TX pins of the HC-05 Bluetooth module to avoid any error encounters before uploading the “Colour changing Bluetooth controlled WS2812B RGB ring light sketch” from the programming section below to NodeMCU. Reconnect the RX and TX pins of the HC-05 Bluetooth module to NodeMCU ESP8266.
    6. In your Andriod smartphone, Go to →Settings→Turn on bluetooth→Scan for available devices→Find HC-05 and Pair using default passkey 0000 or 1234. HC-05 gets saved as a paired device.
    7. Download and install Arduino Blue Control App from the Google Play store. If prompted, grant Arduino Blue Control App permission to use Bluetooth. Keeping the Bluetooth ON, launch the Arduino Blue Control App→Click on the settings gear icon→Command buttons configuration→Type the data to be sent to Arduino for a particular button press. For getting assured results as per this DIY E-project, follow all the instructions in the video below.
      video
      play-sharp-fill
    8. After completing the program upload, you can plug off the USB data cable connected from ESP8266 to the Laptop/PC and re-connect it from ESP8266 to the Power bank.
    9. Control the Bluetooth WS2812B RGB ring light from your Smartphone via different buttons and witness the colour transitions/animations.

    Follow these steps to make the lightshade:-

    1. Measure cut the stencil sheet and cover the inside of the cylindrical container where the WS2812B RGB ring will be placed.
    2. Insert the stencil layer inside the cylindrical container. Add as many stencil layers as possible to get the desired diffused light effect.
    3. Make an insertion in the lid of the container for the WS2812B RGB ring wires.
    4. Decoupage the outside of the cylindrical container as per the desired pattern of the lightshade. Seal the decoupage by applying at least two coats of Modge Podge Gloss.
    PROGRAMMING

    Sketch 1: Colour changing Bluetooth controlled WS2812B RGB ring light

    /*
     * Colour changing Bluetooth controlled WS2812B RGB ring light
     * Made by wiztaqnia.com
     * Modified date: 14/09/2023
     * Typical pin layout used:
     * --------------------------------------------------------------
     * Signal              MB102        16-Bit     HC-05     ESP8266          
     *                  Power Supply   WS2812B    Bluetooth  NodeMCU    
     *                    Module       RGB Ring    Module                  
     * ---------------------------------------------------------------
     * 3.3V                3.3V          V+         --         3V3      
     * 5V                   5V           --         VCC        VIN      
     * GND(Ground)          GND          GND        GND        GND                
     * DI(Data Input)       --           DI         --         D1       
     * RX(Receiver)         --           --         RX         TX            
     * TX(transmitter)      --           --         TX         RX         
     */
    #include <Adafruit_NeoPixel.h>  
    char key = 0;                 //Intitialise a char type variable 'key' to zero
    #define pixelcount 16         //Define 'pixelcount' with the Number of pixels in the WS2812B
    #define PWM_pin D1            //Define 'PWM_pin' of ESP8266 to which the Data Input of WS2812B is connected
    Adafruit_NeoPixel ring = Adafruit_NeoPixel(pixelcount,PWM_pin,NEO_GRB + NEO_KHZ800); //Adafruit_NeoPixel(pixel_count,PWM_pin,pixels are wired for GRB bitstream,800 KHz bitstream)
    
    void setup() 
    {
      Serial.begin(9600);       //Initialise USART communication with 9600 bits/s Baud Rate
      ring.begin();            
      ring.setBrightness(255); //Set the brightness of the pixels. The range of brightness for each WS2812B pixel is 0 to 255.
      ring.show();             //Initialise all pixels to 'off'                                                                                                  
    }
    
    void loop() {
      for(int i=0; i<pixelcount; i++)
        if(Serial.available() >0) //Check if ESP8266 has recieved any data from HC-05 Bluetooth Module.
        {
        key=Serial.read();       //Read the incoming data and store it in the 'key'variable
        
        if(key == 'C')           //Check if Button 'C' is pressed then display Cyan light                
         colorWipe(ring.Color(0,255,255),0); //colorWipe(ring.Color(R,G,B),delay in milliseconds)
        if(key =='O')            //Check if Button 'O' is pressed then display Orange light
        colorWipe(ring.Color(255,165,0),0); 
    
        if(key =='P')            //Check if Button 'P' is pressed then display Pink light
        colorWipe(ring.Color(255,0,255),0);
        
        if(key == 'V')           //Check if Button 'V' is pressed then display Violet Light
        colorWipe(ring.Color(143, 0, 255), 0);
        
        if(key == 'W'){         //Check if Button 'W' is pressed then play 3 cycles of white chasing light animation
         for(int i=0;i<3;i++)
          theaterChase(ring.Color(100,100,100),50);//theaterChase(ring.Color(R,G,B),delay in milliseconds)
        }
        if(key == 'R')         //Check if Button 'R' is pressed then play 3 cycles of rainbow effect animation
        rainbowCycle(15);  //rainbow(delay in milliseconds)
        }                               
    }
    
    // Fill the dots one after the other with a colour
    void colorWipe(uint32_t c, uint8_t wait) {
      for(uint16_t i=0; i<ring.numPixels(); i++) {
        ring.setPixelColor(i, c);
        ring.show();
        delay(wait);
      }
    }
    
    //Theatre-style crawling lights.
    void theaterChase(uint32_t c, uint8_t wait) {
      for (int j=0; j<10; j++) {  //do 10 cycles of chasing
        for (int q=0; q < 3; q++) {
          for (int i=0; i < ring.numPixels(); i=i+3) {
            ring.setPixelColor(i+q, c);    //turn every third pixel on
          }
          ring.show();
    
          delay(wait);
    
          for (int i=0; i < ring.numPixels(); i=i+3) {
            ring.setPixelColor(i+q, 0);     //turn every third pixel off
          }
        }
      }
    }
    
    //Theatre-style crawling lights with rainbow effect
    void rainbowCycle(uint8_t wait) {
      uint16_t i, j;
    
      for(j=0; j<256*3; j++) { // 3 cycles of all colours on wheel
        for(i=0; i< ring.numPixels(); i++) {
          ring.setPixelColor(i, Wheel(((i * 256 / ring.numPixels()) + j) & 255));
        }
        ring.show();
        delay(wait);
      }
    }
    
    // Input a value 0 to 255 to get a colour value.
    // The colours transition r - g - b - back to r.
    uint32_t Wheel(byte WheelPos) {
      WheelPos = 255 - WheelPos;
      if(WheelPos < 85) {
        return ring.Color(255 - WheelPos * 3, 0, WheelPos * 3);
      }
      if(WheelPos < 170) {
        WheelPos -= 85;
        return ring.Color(0, WheelPos * 3, 255 - WheelPos * 3);
      }
      WheelPos -= 170;
      return ring.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
    }

     

    OUTPUT
    video
    play-sharp-fill

    This post was inspired by Getting Started with RGB NeoPixels| WS2812B

    References:

    For exclusive insights, tips and answers, please visit  Wiztaqnia Forum.

    Noor Fatimah I.H
    🍪⚙️
    ® 2024 Wiztaqnia | All Rights Reserved Wiztaqnia