BJ_LED_M is a Python library designed to control MohuanLED brand lights via Bluetooth, directly from your laptop or PC (you’ll need a Bluetooth adapter if it’s not built-in). This library allows you to perform simple actions like turning the lights on/off, changing colors, and applying animations or reactions to external events. It also includes a PyQt6-based GUI for more intuitive control over the lights. 🌟
The library is fully asynchronous, so you'll need to use asyncio and await. Here's an example of how to establish a direct connection, knowing the UUID and MAC address of the LEDs:
from bluelights import BJLEDInstance
import asyncio
ADDRESS = '64:11:a8:00:8b:a6' # Example address
UUID = '0000ee02-0000-1000-2000-00805f9b34fb' # Example UUID
async def main():
led = BJLEDInstance(address=ADDRESS, uuid=UUID)
try:
await led.turn_on()
await led.set_color_to_rgb(255, 0, 0) # Change color to red (RGB)
await asyncio.sleep(5) # Wait 5 seconds
await led.turn_off() # Turn off LEDs and disconnect
except Exception as e:
print(e)
finally:
await led._disconnect() # Clear the buffer
asyncio.run(main())To preform a dynamic connection, you need to use .initialize() to make the Scanner look any LED, here an example:
from bluelights import BJLEDInstance
import asyncio
async def main():
led = BJLEDInstance() # The Scanner will look for 'BJ_LED_M' (name of the devices) and connect
try:
await led.initialize()
await led.turn_on()
await led.set_color_to_rgb(255, 0, 0) # Change color to red (RGB)
await asyncio.sleep(5) # Wait 5 seconds
await led.turn_off() # Turn off LEDs and disconnect
except Exception as e:
print(e)
finally:
await led._disconnect() # Clear the buffer
asyncio.run(main())Warning
If you do not proive a MAC Address or a UUID the code WILL requiere initialize()
- Control MohuanLED lights via Bluetooth (BLE)
- Turn the LEDs on and off 💡
- Change colors across the full RGB spectrum 🎨
- Apply effects like:
- 🔄 Color fade
- 💡 Color strobe
- 🌬️ Breathing effect between colors
- 🌈 Rainbow cycle
- 🌊 Wave effect
- Graphical user interface (GUI) using PyQt6 (In development 🛠️)
- Command Line Interface (CLI) for basic commands (In development 🛠️)
- Dynamic MohuanLED device scanner for easy connections (In development 🛠️)
- Automatic detection of UUIDs and MAC addresses
- Python 3.8 or higher
- PyQt6 and qasync
- Built-in or external Bluetooth adapter
- MohuanLED lights
You can install the library via pip:
pip install BlueLightsOr install it directly from the repository:
git clone https://github.com/Walkercito/MohuanLED-Bluetooth_LED
cd BlueLights
pip install .You can add various effects to the lights, such as rainbow_cycle, wave_effect, or strobe_light. Here are a few examples:
# Apply the 'rainbow_cycle' effect
await led.rainbow_cycle(duration_per_color=5.0)
# Apply the 'strobe_light' effect with 10 flashes
await led.strobe_light(color=(255, 255, 255), duration=5.0, flashes=10)The library also provides a graphical user interface (GUI) built with PyQt6 to visually control the lights.
To launch the GUI:
python -m bluelights.gui.appThe GUI includes sliders to adjust RGB values and buttons to control the lights and apply effects like fading and color cycling.
You can configure your setup using an .env file to store your MohuanLED light’s MAC address and UUID.
Create a .env file in the project directory with the following structure:
LED_MAC_ADDRESS=xx:xx:xx:xx:xx:xx
LED_UUID=0000xxxx-0000-1000-8000-00805f9b34fbThe library will automatically load these values when you instantiate the LEDs.
If you want to contribute or modify the project, you can set up the development environment as follows:
Clone the repository:
git clone https://github.com/Walkercito/MohuanLED-Bluetooth_LEDInstall the dependencies:
pip install -r requirements.txtThis project is licensed under the MIT License. See the LICENSE file for more details.
- Bleak: For Bluetooth Low Energy (BLE) device control 🔗
- PyQt6: For creating the graphical interface 🖼️
- asyncio: For asyncronus tasks
- qasync: For handling asynchronous processes in PyQt6 ⚡
- python-dotenv: For auto-loading of LED_MAC_ADDRESS and LED_UUID in case of a
.envfile - nest_asyncio: For asyncio control