Introduction: Skype for Business Status WS2812 RGB LED Desk Underglow

I'm far from the first person to make a light change color based on the status of your Skype for Business account, but I think I'm the first person to write a tutorial using addressable WS2812 LED strips. I prefer these lights because with minimal hardware (the strip, power/data/ground) you can have a large amount of LED lights. You don't have to solder any resistors, power transistors, or even separate wires for Red/Green/Blue. They can do far more than display the single static color used in this project.

Huge shout-out to Hackster for the tutorial and code I used as a base for mine - check it out, they probably are better at writing than I am: https://www.hackster.io/matheus-fenner/skype-statu...

Their github project: https://github.com/f3nner/Skype-Status-Light-Bridg...

I basically took their project and added more features. There's another Instructable here that uses a different monitoring program and has fading light functions. I think the animations are cool, but decided that for full desk underglow like mine that fading lights would be too distracting for everyone else in the office.

Step 1: Materials and Tools

Software

Hardware

  • WS2812B LED strip - it can be titled WS2811/WS2812/WS2812B - they're all the same, just pay attention to the voltage of your strip (or pixels) [eBay search] [Amazon search]
  • DC barrel jack (female) with screw terminals - the lights need more power than USB 2.0 or the Arduino Uno can supply, so I powered them with a spare 12V power supply. These barrel jacks are a great way to interface with DC power supplies without any mutilation of the supply being necessary. [eBay]
  • 12V power supply, at least 1A, preferably 2A-5A. These LED's can draw a lot of current at full brightness, most online calculators will say you need at least a 3.3A power supply for every 1 meter of 60led/m strip - that's a little aggressive, but use a separate power supply one way or another. Or a 5V power supply if you're using 5V LED strips
  • Connector wire - I used solid core 22AWG wire [eBay] I recommend Remmington Industries
  • Arduino Uno (or any other microcontroller that the FastLED library is compatible with)
  • Magnets - To attach it to the underside of the desk. If your desk isn't metal then you should probably use Velcro

Tools

  • Hot glue gun
  • Soldering iron
  • Wire strippers/cutters
  • Windows PC
  • XActo knife or box cutter to cut your cardboard/foam board to size
  • A boss that isn't paranoid about random things spying on you

Step 2: WS2811/WS2812/b Background Info

WS2811 is the name of a cheap and common type of addressable LED strip. Each light on the strip is an RGB LED and you can control the color of each one individually. WS2811 actually isn't the LED - it's an integrated circuit chip that uses a certain data protocol. [datasheet] Every WS2811 chip boosts the data signal up to the operating voltage, so you don't have to worry about signal degradation. You can drive over 1000 LEDS at 20fps with the WS2811 protocol.

I prefer to use these LED strips because the wiring is dead simple for them. Give it power, ground, and data. You don't need to use power transistors like you do with standard 4-wire RGB strips, and you don't need to run a wire to the microcontroller for each light or each channel. You just give it power and a data signal and you're good to go.

The downside of these strips is that they need a microcontroller giving them a signal when they turn on, you can't just give it power and no signal and expect it to work. After you write a color pattern to it the strip will hold that pattern until you update it or it loses power. Another downside is that their timing pattern is very precise and picky, so you might have to disable interrupts on your microcontroller so that the FastLED library has priority when writing to the LEDs. This can result in wifi instability and requires some special code structure.

Now that we've talked about it, you don't have to handle the precise data timing yourself!! The FastLED library does it for you!! That's why they're so easy to use.

NOTE - The terms WS2811/WS2812/WS2812b are all used interchangeably. According to this page, WS2811 is the LED driver IC, and WS2812 is a WS2811 placed inside a 5050 LED package. Typically WS2811 is 12V and only addressable every 3 LED's, the WS2812 is 5V and addressable every LED.

Step 3: Wiring Diagram and Hardware Assembly

ONLY TIE THE GROUND TOGETHER BETWEEN THE ARDUINO AND YOUR DC POWER SUPPLY. DO NOT TIE THE +5V or +12V TOGETHER. There should only be two wires going from the microcontroller to your LED strip: Data, and Gnd.

<Sorry that I didn't take any pictures during the process of wiring it, the full thing only took me 30 minutes or so>

First cut out the cardboard or foam board to mount the light strips on. It's easier to have the strips mounted in place when soldering the strips than using a third-hand to hold the strips in the air.

Remove the backing from the strips to reveal the adhesive and place them onto the foam board. They seem to stick pretty well to it, but if you're having trouble you can use hot glue as well.

I used 3-pin JST connectors on each end of the strip so that everything was modular, but you could also just solder everything in place.

Look on the strips and there should be an arrow every few lights, or each side will be labelled "DO" or "DI" - DI is data In, DO is data Out. You need to wire it [Arduino]-->[DI]----LED----[DO][DI]------LED-----[DO][DI] etc. Basically data line from arduino goes to the DI pin. If it has arrows, make sure your data "flows" in the direction of the arrows.

Personally I've found that it's easier to solder the power and ground to the middle of the strip instead of the input pin - it really doesn't matter where you put it because the +/- are all connected together as one big rail. So you'll see in one of the pictures that for going from one LED strip to the other I only soldered a connector for the Data line - this works because I gave +12V and Gnd on both strips. One way or another you need all of your Ground wires to be tied together throughout the project.

I used a DC barrel jack connector for the input from my wall power supply and the Arduino Uno is powered through the USB cable. I used green frog tape to tape the magnets to the board because it was handy.

Step 4: Arduino Programming

As far as Arduino programs go, I think this one is pretty straightforward. It monitors the serial port and when there is new data it reads in the integer values and then writes that RGB to the lights.

You'll need the FastLED library to compile the code. You can download it through the Arduino IDE's library manager or from the FastLED website: https://github.com/FastLED/FastLED/releases

The only thing you need to change is the PIN and NUM_LEDS at the beginning of the program. PIN is the digital pin that you plugged the Data line of the lights to - I used pin 11. NUM_LEDS is the number of addressable LEDs or groups of LEDs there are. My 12V strip is only addressible every 3 lights, so even though there are around 75 discrete LEDs on the strip the Arduino code only addresses 26 lights. (So if I say "Turn on LED 2" then 3 little lights will be lit up.)

Simply change PIN and NUM_LEDS to match your wiring and upload the code to the controller. Then run the LyncPresenceBridge.exe as detailed on the next step...

Step 5: PC Software Installation and Use

Download from here: https://github.com/jakabo27/WS2811-Skype-Status-Light/releases

You actually don't have to install anything - just run LyncPresenceBridge.exe. It will put an icon in your tray (bottom right corner of the screen) that looks like a USB flash drive with a light on the bottom.

Right click the icon and select "Settings" and set the Serial port to whatever port your Arduino is connected to. The easiest way to find that out is to open the Arduino IDE and Go to Tools > Port > and see which port is listed. Another way to find out is to open Device Manager and expand the "Ports (COM & LPT)" section and see what all is there. Mine only shows one, but if there are multiple just try them all until you get the one that works with the software.

Use

The program simply monitors your Skype status and on a status change it writes a set of RGB values out the serial port. So you can change your status from "Available" to "Busy" and the lights should change from green to red.

You can right click the icon and select a setting to set the lights to such as Available, Busy, Away, and Off. This is useful for if you get tired of Green/Red lights or want to turn them off completely.

Double click the icon to pop up the Color Picker where you can set the color of the lights to a custom color such as purple or pink. You can also access this through the right-click menu.

The settings menu can also be used to change the brightness of the lights and the animation speed

Step 6: Modifying the Software

You can change the colors for each status by modifying the solution file in visual studio.

Download everything from my Github page and open the .sln file in Visual Studio (Community edition works). From there you can edit what colors it outputs for each status, add/remove items in the context menu, and much more.

Images used as icons are in Resources.resx under LyncPresenceBridge Properties.

If you're making a bunch of edits I recommend going to Properties, Settings.settings and changing the default serial port to the one your controller is connected to. Every time you Build the solution it will reset to the default port, and it gets old having to change the port in settings each time.

If the certificate has a password try "password" without the quotes. If it says the signature is expired then try doing "Create test certificate" and using that to sign it for your own use. If everything else fails then email me.