User Tools

Site Tools


Mini PC T9Plus RGB LED Control Program

This is the Python script t9plus-leds that I use to control the RGB LEDs of my Mini PC T9Plus. It requires the python3-serial package.

#!/usr/bin/env python3
# See:
import argparse
import serial
import sys
import time
__author__ = "Niccolo Rigacci"
__copyright__ = "Copyright 2024 Niccolo Rigacci <>"
__license__ = "GPLv3-or-later"
__email__ = ""
__version__ = "0.1.0"
# Define dictionaries for mode, brightness, and speed mappings
modes = {
    "Off": 0x04,
    "Auto": 0x05,
    "Rainbow": 0x01,
    "Breathing": 0x02,
    "Cycle": 0x03
brightness = {
    1: 0x05,
    2: 0x04,
    3: 0x03,
    4: 0x02,
    5: 0x01
speed = {
    1: 0x05,
    2: 0x04,
    3: 0x03,
    4: 0x02,
    5: 0x01
def calculate_check_digit(mode, brightness, speed):
    return (0xfa + mode + brightness + speed) & 0xff
def send_led_status(serial_port, baud_rate, mode, brightness, speed):
        # Open serial port
        s = serial.Serial(serial_port, baud_rate)
        # Send data with delays
        for b in (0xfa, mode, brightness, speed, calculate_check_digit(mode, brightness, speed)):
        # Close serial port
        print("LED status sent successfully.")
    except Exception as e:
        print("An error occurred:", str(e))
def main():
    modes_help = 'available modes: %s' % (', '.join(modes.keys()),)
    parser = argparse.ArgumentParser(description='Set the working mode of the RGB LEDs on T9 Plus and S1 Mini PC.')
    parser.add_argument('-d', '--device', type=str, default='/dev/ttyUSB0', metavar='DEV', help='the device the data is written to (default: /dev/ttyUSB0)')
    parser.add_argument('-r', '--rate', type=int, default=10000, metavar='BAUD', help='set the baud rate (default: 10000)')
    parser.add_argument('-m', '--mode', type=str, required=True, help=modes_help)
    parser.add_argument('-b', '--brightness', type=int, default=1, metavar='B', help='brightness value: from 1 to 5 (default: 1)')
    parser.add_argument('-s', '--speed', type=int, default=1, metavar='S', help='speed value: from 1 to 5 (default: 1)')
    args = parser.parse_args()
    mode_key = args.mode.lower().capitalize()
    if mode_key not in modes.keys():
        print("Invalid mode")
    if args.brightness not in brightness.keys():
        print("Invalid brightness")
    if args.speed not in speed.keys():
        print("Invalid speed")
    mode_input = modes[mode_key]
    brightness_input = brightness[args.brightness]
    speed_input = speed[args.speed]
    serial_port = args.device
    baud_rate = args.rate
    # Send LED status
    print('Setting codes Mode: %s, Brightness: %d, Speed: %d' % (mode_input, brightness_input, speed_input))
    send_led_status(serial_port, baud_rate, mode_input, brightness_input, speed_input)
if __name__ == "__main__":
doc/appunti/hardware/t9plus_mini_pc_rgb_led_control.txt · Last modified: 2024/03/25 09:57 by niccolo