Skip to content
Cross-platform bluetooth control of LEDs
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.


Blume is a platform for LED projects. It combines the ESP32, a cheap Bluetooth- and WiFi-enabled Arduino-compatible microprocessor, with a cross-platform Cordova app. This app lets you control LEDs connected to the device with any smartphone or tablet. See the browser-based demo or download the app from the iOS App Store or Android Play Store. Demo video.

Running the App

  • Install npm if you don't have it
  • npm install -g cordova
  • From inside this repository: cd cordova/www/
  • cordova prepare
  • cordova run ios (or android, etc.)

Running the Arduino Code

NOTE: These instructions are for the Bluno Beetle by DFRobot, which was used in earlier versions of the software. The setup is mostly the same but you'll need to install the ESP32 Arduino Core and choose the ESP32 Board/Port accordingly.

  • Install the latest Arduino IDE
  • Open blume.ino
  • Under Tools > Board choose Arduino/Genuino Uno
  • Under Tools > Port it's something like /dev/cu.usbmodem1411 on macOS or whichever one identifies as Arduino/Genuino Uno
  • Default settings for DATA_PIN_0, CLOCK_PIN_0, etc. should work if you're using the recommended wiring layout and APA102 LEDs. Refer to FastLED's documentation to use other LED chipsets etc.
  • Change NUM_LEDS, BASE_WIDTH, STAGGERED, and ZIGZAG to suit your project.
    • The code currently assumes that projects with BASE_WIDTH greater than 1 are using flexible LED strips wrapped around an object, and BASE_WIDTH is the number of LEDs per "wrap".
    • If the LEDs of one wrap are offset from the LEDs above and below, setting STAGGERED to true will account for this alignment, adding 1 to BASE_WIDTH for every other row.
    • ZIGZAG should be set true if your LEDs are arranged in rows like a snake, where the direction of data alternates each row.
  • Upload code to board


  • Investigate over-air programming options
  • Add "locking" so a Blume can be "paired" with and only accessed by a certain app instance, or passphrase, etc.
  • Some new modes:
    • 2 or 3-color palette mode
    • "Sparkle" ("random" is the start of this)
    • Text to POV
    • Monochrome POV with color setting after data is sent
    • Full-color POV? Very limited frame storage available...
  • Make a custom board that works even better with LEDs
  • Develop for other bluetooth-enabled Arduinos
  • Evaluate/refactor easyble and other Evothings remnants (a bit one-size-fits-all)
You can’t perform that action at this time.