#!/usr/bin/python import argparse import board import neopixel import time from os.path import exists # parse command line arguments # TODO parse multiple LEDs e.g. ./ledctl --led 1 red --led 2 white parser = argparse.ArgumentParser(description='Set LED colors') parser.add_argument('--led', type=int, help='LED number to control, starting at 1') parser.add_argument('color', type=str, help='color or command') args = parser.parse_args(); # initialize LED array leds_max = 6 leds_num = 0 leds_array = neopixel.NeoPixel(board.D18, leds_max) # restore LED array from state file statefile = '/tmp/ledctl.state' if exists(statefile): print('reading ' + statefile) with open(statefile, 'r') as f: lines = f.readlines() i = 0; for line in lines: values = line.split(' ') if (i < leds_num): leds_array[i] = (values[0], values[1], values[2]); i = i + 1 f.close() # figure out if we want to control a single LED or all of them if args.led: if (args.led < 1) or (args.led > leds_max): parser.error("led must be within range") else: leds_num = args.led; # default color is white leds_color = (255, 255, 255) def rgbval(colorname): switch = { 'on': (255, 255, 255), 'off': (0, 0, 0), 'white': (255, 255, 255), 'black': (0, 0, 0), 'red': (255, 0, 0), 'green': (0, 255, 0), 'blue': (0, 0, 255), 'yellow': (255, 255, 0), } return switch.get(colorname, 'Valid colors are black, white, ired, green, blue, yellow, on, off') if args.color: print('color ' + args.color) leds_color = rgbval(args.color); if (leds_num > 0): print('setting LED ' + leds_num) leds_array[leds_num] = leds_color else: print('setting all LEDs') leds_array.fill(leds_color) # write LED array to state file print('writing ' + statefile) with open(statefile, 'w') as f: for i in range(leds_max): for c in range(3): f.write ('%d ' % leds_array[i][c]) f.write('\n'); f.close()