On Air Light 2023: Easy DIY Status Light for Microsoft Teams and Zoom

In March 2020, I made an On Air Light for Microsoft Teams to indicate whether or not my camera was on for all of my newfound remote meetings. Oh, those were the days. At the time, it was a fun project. I didn’t expect it to be something I still use daily after three years. And my project was complicated. I called it a DIY project, but you had to have two specialized parts: the light housing and some LEDs from an upcycled light. I literally just used what I had in my parts storage area. I get an email almost daily from folks building their own, getting stuck, or asking for clarification. I decided to redo the project using things from Amazon, reduce some of the DIY aspects, and simplify the code.

The Idea

I want a light that turns on when my webcam turns on. I want the light to turn off when my camera turns off. The idea is that my camera is on when I am in an online meeting. The light is a good indicator to everyone, including myself, that I am in a meeting.

The System

In order to turn a light on and off, I need a script that monitors my webcam for activity. This script will then send the status of my webcam to ThingSpeak, a cloud IoT platform that allows you to save and retrieve sensor data. Then, the on-air light controller will read the data from ThingSpeak and turn the light on if my camera is on.

The Parts

I was able to find everything you need on Amazon to build this project.

DIY On Air Light Parts

Here are some notes about these parts.

  • You can use any sign that you want to light up. I chose this one since it was $15 US and looks great. It also includes a Micro USB cable that you can use for the ESP32 device.
  • Screw terminals make this project a solder-free project. Some people who wrote me said that soldering was a barrier to getting started. I want this to be accessible to as many makers as possible. Screw terminals offer a quick way to break out the pins of the ESP32 board and easily connect wires.
  • Only certain styles of the ESP32 board work with the screw terminals. The terminals are for the 38-pin version of the HiLetgo ESP-WROOM-32 ESP32 dev board. The two parts that I linked to on Amazon will fit together perfectly. Other ESP32 boards might not work with the screw terminal expansion board.

ThingSpeak Setup

ThingSpeak is an IoT service hosted by MathWorks. It is focused on being easy to collect data and then retrieve that data. We are going to leverage that core functionality for this project. ThingSpeak stores data in a channel and each channel has eight fields.

Visit ThingSpeak.com and Sign Up for an account. This will just take a minute and user accounts are free. Once you have a user account, you need to create a channel. ThingSpeak channels are where data gets stored. Create a new channel by selecting ChannelsMy Channels, and then New Channel. Name the channel, “On Air Light” and name Field 1, “Webcam State”. Click “Save Channel” at the bottom to finish the process.

Click API Keys and note your write API key and read API key. The write API key will be used by the code to track your webcam state. The read API key will be used to turn on or off the light based on the webcam state.

Track Webcam State

I wrote a Python script that uses OpenCV to detect if the camera is in use or not. It sends a “1” to field1 of the ThingSpeak Channel if the camera is in use. It sends a 0 if the camera is not in use. Just run this code on a periodic basis to track the state of your webcam.

The code to track my webcam state and upload the state to ThingSpeak is available on GitHub. Update the code with your ThingSpeak Channel’s write API key.

Most of the magic is here:

def returnWebcamStatus(webcamIndex):

    webcam = cv2.VideoCapture(webcamIndex, cv2.CAP_DSHOW)

    if webcam.isOpened():
        webcam.release()
        return True #Webcam not in use
    else:
        return False #Webcam in use
ThingSpeak chart of my webcam status

Assembly

Get your parts together and get ready to put everything together. Take your time and step through. There is no soldering, just some connections to be made on a set of screw terminals. You will need cutters, a small screwdriver, and some tape to complete the assembly.

Connect the ESP32 board to the SCrew Terminal Board

Make sure to get the right orientation of the boards together. The 5V pins should line up and the USB part should be pointing down.

Cut Off the Out Connector from the LED Strip

We can use the connector on the out side of the LED strip. Cut this off and strip back some of the insulation. We will use this connector for the screw terminals.

The Out Side of the LED Strip

Connect the Connector to the Screw Terminal Board

Connect the red wire to the 5v terminal. Connect the green wire to P13. Connect the white wire to GND.

Connector on the Screw Terminal Board

Connect the LED Strip to the Connector

Connect the LED Strip to the Terminal Board

Program the ESP32

Using the Micro USB cable that comes with the On Air Light, connect the ESP32 to your computer.

The code that the Arduino IDE uses is called a “sketch” – this is just a short program that the device runs over and over. In this project, we are going to have the code that checks the ThingSpeak channel for the webcam status and sets the LED strip to either on or off. Copy the example code to your Arduino IDE and change some of the defaults to match your Wi-Fi network and ThingSpeak settings.

Once everything is set, click Sketch and then Upload. This will take the code and program the ESP32 with it. It takes a minute, so be patient. If anything goes wrong, make sure that you have the right board settings and that your “Port” matches what your laptop thinks the port is.

Arduino Setting for ESP32-WROOM

Open the On Air Light

The housing of the On Air light is held together by several tabs. Take your screwdriver and gently twist in each opening. It will come apart without damage. Just take your time and open each tab.

Openned Up On Air Light

Remove the Existing LED Board

Remove the existing board on the inside of the light. Trim the wires off close to the circuit board so you have some length to work with.

George Liked Taking the Light Apart

Connect the USB Wires to the Board

Connect the red wire to the 5v screw terminal. Connect the black wire to the GND screw terminal. You will have two wires in each. I used some tape to make sure that the screw terminal board doesn’t move around.

Connect the Wiress to the USB Port

Snap It All Back Together

Carefully snap the two halves back together.

Updated On Air Light and the Orginal On Air Light

Profit.

Enjoy your On Air light. Maybe this will remind you or someone in your family that you actually work when you are home.

My goal was to show you the steps as clearly as possible and share the code. I hope that you can reproduce this as easily as possible. If you need help leave a comment or join me on my new Discord server.

5 comments

  1. Very cool project. I have an alternate version that takes about 5 seconds and is about 5 cents. Cut a piece of cardstock and fold it so it hangs over the camera lens on the laptop. If I want the camera to see me I slide it over. Some webcams have a shutter/blinder that slides or flips over to cover the lens. I use my camera all the time, but rarely uncover the lens. I use the background image feature in Zoom to present a message to my coworkers–a picture of a pizza when I’m at lunch, a picture of a TV test screen when I’m away from my desk, or a picture of a coworker’s avatar so I can impersonate him (just for fun.)

    Now a more useful project for me would be detecting when my mic is not muted and turning on a large ‘HOT MIC’ sign. The tiny muted mic icon in Zoom is sometimes hard to see and sometimes covered. When presenting it can be hard to access as well. Maybe just having an external mic with a big mute button and a light would be good enough. No special computer hardware needed.

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.