Skip to main content

Modular interface for controlling the Merkury Innovations LED Matrix Display via BLE.

Project description

Merkury Innovations Multicolor Matrix LED Display Interfacing Library


Whew, what a mouthful, huh? MILI for short, provides automatic, high-level interfacing with the Merkury Innovation's Multicolor Matrix LED Display.

Why?

I went to Walmart one day, and picked up this LED panel. Naturally, it had an app, and every API developer's worst nightmare is other people's apps to control their technology. So, I started looking into alternatives.

I had come across this reverse-engineering of the model, specifically how it interfaces over BLE. Out of curiosity, I decided to start tinkering with it too.

While the reverse-engineering was perfect, and the protocol worked as expected, what didn't work as expected was trying to interface it like a library... because it wasn't a library. It's a toolkit. So, I decided to use the effort that was already there, and develop a library that plays nicer with developers who want to get things done their way, with their product.

Because of the nature of libraries, I felt it was best to provide an open-source, pip install ready iteration, versus the toolkit of scripts that was provided by the initial developer, offe. Without them, this project would not be possible. Thank you.

Download

You can install it from PyPi, once I have it listed, or you can download the source code and build it with Poetry.

Examples:

from mi_led_interface.client import PanelClient
from mi_led_interface.pixels import PixelGrid

# Until the script is stopped, if you have a model of the Matrix LED display close by,
# it will display a 16x16 rendition of "silly_picture.png" in the directory with the running script.
client = PanelClient()
pixel_grid = PixelGrid.from_image("silly_picture.png")
client.show_image(pixel_grid)
from mi_led_interface.client import PanelClient
from mi_led_interface.pixels import PixelGrid

# This works with animated images, too!
client = PanelClient()
pixel_grid = PixelGrid.from_image("silly_animation.gif")
client.show_image(pixel_grid)
from mi_led_interface.client import PanelClient
from mi_led_interface.pixels import PixelGrid
from PIL import Image

# You can also use PILlow's images...
client = PanelClient()
image = Image.open("a_pillow.png")
pixel_grid = PixelGrid.from_image(image)
client.show_image(pixel_grid)
from mi_led_interface.client import PanelClient
from mi_led_interface.pixels import PixelGrid, Pixel
from asyncio import run

# ...or go a little deeper, and represent individual bits and bytes!
def binary_representation(number: int):
    if isinstance(number, int) is False: return "0"*256
    string = bin(number).split("0b")[-1]
    if len(string) >= 256: return "0"*256
    iterations = 256 - len(string)
    returned_string = ""
    for _ in range(iterations):
        returned_string += "0"
    returned_string += string
    return returned_string

async def __main():
    panel_client = PanelClient()

    while True:
        pixel_grid = PixelGrid()
        b_r = binary_representation(floor(time()))
        for index, i in enumerate(b_r):
            pixel_grid.set_pixel(index%16, index//16, Pixel.from_bool(int(i)))
        await panel_client.draw_to_panel(pixel_grid)

run(__main())

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

mi_led_interface-1.0.0.tar.gz (6.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

mi_led_interface-1.0.0-py3-none-any.whl (7.8 kB view details)

Uploaded Python 3

File details

Details for the file mi_led_interface-1.0.0.tar.gz.

File metadata

  • Download URL: mi_led_interface-1.0.0.tar.gz
  • Upload date:
  • Size: 6.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.2.1 CPython/3.14.0 Windows/11

File hashes

Hashes for mi_led_interface-1.0.0.tar.gz
Algorithm Hash digest
SHA256 02139566646668b9cabe08bd7d40fa498c32107a2716010d4faedae368cddc09
MD5 8087d668e600bfdf38fd8546035185b0
BLAKE2b-256 9c3a3b912f5f487b6742ab001544ea6626a7416ae97270a8165b2448d8300aa9

See more details on using hashes here.

File details

Details for the file mi_led_interface-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: mi_led_interface-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 7.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.2.1 CPython/3.14.0 Windows/11

File hashes

Hashes for mi_led_interface-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 49d1fe8153fbdc9ccc3a24080aed866ee369dca6eb7dd9a7fec8f0bbb11cd6f8
MD5 658f84d1a7edb18e50ce569941f10c65
BLAKE2b-256 db46d5c42460dfd718902ba597718db7e833dbb01a1983d5f23f95801c2838d3

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page