Bluetooth Devices Visualizer

Visually display the number of Bluetooth devices in your proximity

Public Chat
Similar projects worth following
After attending Hackaday Supercon 2022. I was inspired to build something with LEDs that did something interesting and was in a badge format. This is that project. Using an ESP32 based dev board, 8x8 Neopixel display, OLED display I create a "badge" that passively scans and displays the number of Bluetooth devices present. Bluetooth devices are everywhere. "Seeing" them represented as illuminated LEDs is cool. It is more of an art project than anything practical.

This project shouldn't be confused with my big brother Andy Geppert's Core64 Interactive Core Memory Project:

I think my form factor was influenced by his project.

I estimate that the average person is walking around with 2-3 Bluetooth devices on them at any given time. Phone, smartwatch, Air-tag, laptop, Air-pods, etc. Even cars, e-bikes, electric coolers have Bluetooth enabled. The more people around the more Bluetooth devices there will be. There is something "organic" about capturing this temporary presence of devices and being able to visualize it. If I have to explain this anymore than that, this project isn't for you. ;) But, we can still be friends.

This is a passive project and does not attempt to read or log any data. When the device turns off, any data is gone.

Current State:

Each BT device seen in a 10 second interval scan is represented on the 8x8 matrix as a blue LED. In the lower left corner red LEDs illuminate to tell you what "page" you are on. Starting with page 1 where the first 64 devices are displayed. When more than 64 devices are seen, the page 2 red LED will illuminate and start the count over. (i.e. 65 devices seen would show 2 red LEDs in the lower left and 1 blue LED in the lower right.)

The OLED display always displays the numeric value of devices seen at any given time.

Future Ideas:

-Display each device as a different color based on RSSI signal strength number. Bonus: heat map display with strongest signal devices clustered in the middle of the 8x8 matrix

-Crowd Mode: Each LED would represent 5 or 10 devices versus 1. The multiplier would be represented in the OLED display as "x[num]".

-Binary mode: Display the count in binary.

-Random color per device. Make it more purdy. "party mode"

-Graph over time mode: Each of the 8 columns will show average number of devices seen in an hour creating a bar graph of the last 8 hours. It will need to auto-scale based on the max sample size. Each LED will need to represent multiple devices. 

-WIFI Mode: Same concept but with Wifi Clients or WiFi APs.

-Make a custom PCB board with all this functionality and maybe more LEDs using smaller ones.

-WiFi Accessible configuration page from a browser to change settings

-Add a button or two for changing modes and brightness

-Light sensor to automatically set the brightness.

-Table top version with diffused display in a nice box.

YOUR IDEAS??? Have any ideas or want to contribute? Please comment or message me direct.

Arduino Libraries in use:

For the heavy lifting of seeing the Bluetooth Devices:


To control the OLED Display:

adafruit/Adafruit SSD1306@^2.5.7

To control the Addressable LED Display:


Arduino code for the project. I make no apologies for this mess. It has comments though. ;)

cpp - 10.42 kB - 11/15/2023 at 22:49



Back cover for 16x16 led matrix

Standard Tesselated Geometry - 2.03 MB - 11/15/2023 at 22:47



Main box for 16x16 led matrix. Print the first layers with white filament to act as a diffuser.

Standard Tesselated Geometry - 110.43 kB - 11/15/2023 at 22:47


  • 1 × KeeYees ESP32S ESP32 Development Board
  • 1 × 0.96 Inch OLED Module 12864 128x64 Driver IIC I2C Serial Self-Luminous Display Board
  • 1 × 8x8 LED Matrix (SK6812)
  • 1 × 16x16 LED Matrix

  • MORE LEDS!!!!

    jeremy.geppert11/15/2023 at 03:39 0 comments

    64 LEDs is not enough. In most environments outside of home I am finding 64 Bluetooth devices is quickly exceeded and the 8x8 matrix only showing the last 64 devices seen is not as cool. At Hackaday Supercon 2023, I saw over 300 devices at one point and then it averaged in the 200s.

    I found a 16x16 addressable flexible LED matrix on Amazon for $18. Then I designed and 3D printed and tight fighting case to house the matrix and controller. I printed the first few layers with white PLA to act as a light diffuser to soften the LEDs. The rest of the case is printed from a wood fiber/PLA filament. I wanted this version to be something that you can sit on a desk or table top and not look like bomb or a low budget sci-fi movie prop. Something that would blend in with modern furniture. 

    I tested it at the office today and it worked great. I need to print the back cover for it yet and then I think this will live at the office. The office didn't have as many people as a usual week day but it was enough to test it. By the end of the day it trickled down to the low teens for devices seen.

  • More Field Testing

    jeremy.geppert10/27/2023 at 00:09 0 comments

    Field Tested at the office and Mall food court today to see how a large number of devices would look with color based on RSSI. It did not disappoint.

  • Signal Strength Mode (Disco)

    jeremy.geppert10/25/2023 at 01:10 0 comments

    Signal Strength Mode is working!  The RSSI data comes back in the passive scan for devices as an integer. Based on what I found from a quick google search the following is the 4 color scale I used for this new mode:

    >= -70  STRONG  Green
    -70 to -85 GOOD  Yellow
    -86 to -100 FAIR  Orange
    < 100 POOR  Red

    I should probably call this disco mode. I should be pretty awesome with a full grid of devices represented. Next is going to be adding a button to switch between modes.

  • Updated Frame and 10x Mode

    jeremy.geppert10/13/2023 at 03:39 0 comments

    A V3 of the frame/holder for the prototype so it can be worn with a lanyard. I also added the 10x mode once there are more than 192 devices (3 pages) seen. Each LED represents 10 devices which will support 640 devices on the display.

  • Field Testing

    jeremy.geppert10/13/2023 at 00:12 0 comments

    V1.0 is alive and working! To really test it out, I brought it to the office today to see how it performed in the wild. I arrived early and it was only seeing about 20 devices. Most of the desk phones in my office have Bluetooth always on for pairing headsets. It was not long and I watched the number of devices climb to over 100 and stay there for most of the day. Towards the end of the day it dropped steadily back down to around 20. It ran for around 10 hours straight and didn't crash or let any smoke out.  Great success!

View all 5 project logs

Enjoy this project?



hkurz wrote 10/22/2023 at 21:09 point

Cool: have the parts in my drawer, want to try this! Is the sourceode available somewhere?

  Are you sure? yes | no

jeremy.geppert wrote 10/23/2023 at 00:23 point

Excellent! The code is currently embarrassingly messy. I'll get it cleaned up and added as a download in this project soon so you can try it out!

  Are you sure? yes | no

jeremy.geppert wrote 11/15/2023 at 22:51 point

I added the code finally under files on this project. Let me know if you get it working. 

  Are you sure? yes | no

C. M. Herron wrote 10/22/2023 at 16:06 point

Another idea:  maybe have it play a quick game of Pong every now and then just to add some more fun to the display.  :-)

  Are you sure? yes | no

jeremy.geppert wrote 10/22/2023 at 17:23 point

I like it!!! 

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates