Пример #1
0
    def step(self, amt = 1):
        t = time.localtime()
        hex = "#{0:0>2}{1:0>2}{2:0>2}".format(t.tm_hour, t.tm_min, t.tm_sec)
        log.info(hex)
        c = colors.hex2rgb(hex)
        self._led.fill(c)

        self._step = 0
Пример #2
0
    def step(self, amt=1):
        t = time.localtime()
        hex = "#{0:0>2}{1:0>2}{2:0>2}".format(t.tm_hour, t.tm_min, t.tm_sec)
        log.info(hex)
        c = colors.hex2rgb(hex)
        self._led.fill(c)

        self._step = 0
 def next_draw_obj(self):
     self.cur_vis += 1
     if self.cur_vis >= len(self.vis_list):
         self.cur_vis = 0
     if self.draw_obj:
         del self.draw_obj
     name = self.vis_list[self.cur_vis]
     log.info("Loading {}".format(name))
     self.draw_obj = self.vis_dict[name]
Пример #4
0
 def next_draw_obj(self):
     self.cur_vis += 1
     if self.cur_vis >= len(self.vis_list):
         self.cur_vis = 0
     if self.draw_obj:
         del self.draw_obj
     name = self.vis_list[self.cur_vis]
     log.info("Loading {}".format(name))
     self.draw_obj = self.vis_dict[name]
Пример #5
0
    def wrapped(self, *args, **kwargs):
        if self.internal_delay != beam_state.delay:
            log.info('delay changing from {} to {}'.format(
                self.internal_delay, beam_state.delay))
        self.set_delay(beam_state.delay)
        self.set_brightness(beam_state.brightness)

        if self._step > 10000000:
            self._step = 0

        return fn(self, *args, **kwargs)
Пример #6
0
def main_loop(led):
    t = threading.Thread(target=app.run, kwargs={'port': 5555}, daemon=True)
    t.start()

    while True:
        animation_class = get_new_input_class(beam_state.animation)
        anim = animation_class(led)
        anim.set_runner(None)

        log.info('starting {} sequence'.format(anim.__class__.__name__))

        try:
            anim.run_all_frames()
        except Interrupt:
            pass
Пример #7
0
    def _printError(error):
        fatal = True
        msg = "Unknown error occured."
        if error == RETURN_CODES.ERROR_SIZE:
            msg = "Data packet size incorrect."
            fatal = False
        elif error == RETURN_CODES.ERROR_UNSUPPORTED:
            msg = "Unsupported configuration attempted."
        elif error == RETURN_CODES.ERROR_PIXEL_COUNT:
            msg = "Too many pixels specified for device."
        elif error == RETURN_CODES.ERROR_BAD_CMD:
            msg = "Unsupported protocol command. Check your device version."

        if not fatal:
            log.info("%s: %s", error, msg)
            return

        log.error("%s: %s", error, msg)
        raise BiblioSerialError(msg)
Пример #8
0
def change_beam_state():
    request_dict = flask.request.get_json()

    input_delay = request_dict.get('delay')
    if input_delay is not None and 0.0001 <= input_delay <= 100:
        beam_state.delay = input_delay

    input_brightness = request_dict.get('brightness')
    if input_brightness is not None and 0 <= input_brightness <= 255:
        beam_state.brightness = math.floor(input_brightness *
                                           (config.max_brightness / 255.))

    input_animation = request_dict.get('animation')
    if input_animation in animation_dict.keys():
        beam_state.animation = input_animation
        log.info('setting beam_state.animation to {}'.format(input_animation))
    else:
        log.info('unknown animation: {}'.format(input_animation))

    input_colors = request_dict.get('colors', [])
    if input_colors:
        try:
            input_colors = list(map(color_util.hex2rgb, input_colors))
            beam_state.colors = input_colors
        except KeyError:
            log.info('invalid color passed')

    if flask.request.data:
        response_dict = _get_state()

        return flask.Response(json.dumps(response_dict), 200)

    else:
        return flask.redirect('/')
Пример #9
0
    def __init__(self,
                 type,
                 num,
                 dev="",
                 c_order=ChannelOrder.RGB,
                 SPISpeed=2,
                 gamma=None,
                 restart_timeout=3,
                 deviceID=None,
                 hardwareID="1D50:60AB",
                 baud_rate=1000000):
        super(DriverSerial, self).__init__(num, c_order=c_order, gamma=gamma)

        if SPISpeed < 1 or SPISpeed > 24 or not (type in SPIChipsets):
            SPISpeed = 1

        self.set_baud_rate(baud_rate)
        self._hardwareID = hardwareID
        self._SPISpeed = SPISpeed
        self._com = None
        self._type = type
        self._bufPad = 0
        self.dev = dev
        self.devVer = 0
        self.deviceID = deviceID
        if self.deviceID is not None and (self.deviceID < 0
                                          or self.deviceID > 255):
            raise ValueError("deviceID must be between 0 and 255")

        resp = self._connect()
        if resp == RETURN_CODES.REBOOT:  # reboot needed
            log.info(
                "Reconfigure and reboot needed, waiting for controller to restart..."
            )
            self._com.close()
            time.sleep(restart_timeout)
            resp = self._connect()
            if resp != RETURN_CODES.SUCCESS:
                DriverSerial._printError(resp)
            else:
                log.info("Reconfigure success!")
        elif resp != RETURN_CODES.SUCCESS:
            DriverSerial._printError(resp)

        if type in SPIChipsets:
            log.info("Using SPI Speed: %sMHz", self._SPISpeed)
Пример #10
0
    parser.add_argument('--delay', '-d', type=float)
    parser.add_argument('--brightness', '-b', type=int)
    args = parser.parse_args()

    if args.animation:
        beam_state.animation = args.animation
    if args.brightness:
        beam_state.brightness = math.floor(args.brightness *
                                           (config.max_brightness / 255.))
    if args.delay:
        beam_state.delay = args.delay

    num_pixels = config.pixels_per_strip * config.num_strips
    if config.driver == 'sim':
        # simulator on osx
        log.info('using sim driver')
        driver = SimPixel.SimPixel(num=num_pixels)
    else:
        # hardware on pi
        c_order = getattr(ChannelOrder, config.channel_order)
        log.info(
            'using neopixel driver with channel order: {}'.format(c_order))
        driver = Serial(num=num_pixels,
                        ledtype=LEDTYPE.WS2811,
                        c_order=c_order)

    led = Matrix(
        driver,
        width=config.pixels_per_strip,
        height=config.num_strips,
        brightness=beam_state.brightness,
Пример #11
0
        def nt_grab(bbox=None):
            if bbox is None:
                img = getScreenAsImage()
            else:
                img = getRectAsImage(bbox)
            return img

        grab = nt_grab
    except:
        pass

if grab is None:
    try:
        from mss.linux import MSS as mss
        from PIL import Image
        log.info('Using mss module')

        sct = mss()
        monitor = sct.enum_display_monitors()[0]

        def mss_grab(bbox):
            sct.get_pixels(monitor)
            img = Image.frombytes('RGB', (sct.width, sct.height),
                                  sct.image).crop(bbox)
            return img

        grab = mss_grab
    except:
        try:
            from pil import ImageGrab
            log.info("Using PIL ImageGrab module")
Пример #12
0
    def test_serial(self):
        # Code taken from
        # https://gist.github.com/adammhaile/1b43fdde6ae6cbbd35560c68a9b90beb

        from bibliopixel import Strip
        from bibliopixel.drivers.channel_order import ChannelOrder
        from bibliopixel.drivers.serial import Serial, LEDTYPE
        from bibliopixel.drivers.serial.devices import Devices
        from bibliopixel.animation import StripChannelTest

        import bibliopixel.log as log
        import time

        log.setLogLevel(log.DEBUG)

        devs = Devices(hardware_id="1D50:60AB", baudrate=921600)

        log.info("Serial devices:")
        dev_list = devs.find_serial_devices()
        log.info(dev_list)

        first_dev = dev_list[list(dev_list.keys())[0]][0]

        log.info('Default device:')
        log.info(devs.get_device())

        log.info('Device ID for: ' + first_dev)
        old_id = devs.get_device_id(first_dev)
        log.info(old_id)

        log.info('Setting device ID to 42')
        devs.set_device_id(first_dev, 42, baudrate=921600)

        log.info('New Device ID for: ' + first_dev)
        log.info(devs.get_device_id(first_dev))

        log.info('Restoring device ID to ' + str(old_id))
        devs.set_device_id(first_dev, old_id, baudrate=921600)

        log.info('Device version for: ' + first_dev)
        log.info(devs._get_device_version(first_dev))

        driver = Serial(LEDTYPE.APA102,
                        600,
                        SPISpeed=4,
                        c_order=ChannelOrder.RGB)
        layout = Strip(driver)

        for b in range(7, 256, 8):
            log.info('Set brightness ' + str(b))
            layout.set_brightness(b)
            time.sleep(0.25)

        log.info('Run StripChannelTest')
        anim = StripChannelTest(layout)

        anim.run(amt=1, max_steps=8)

        layout.all_off()
        layout.update()

        print("Test Complete!")
Пример #13
0
    def _connect(self):
        try:
            if self.dev == "" or self.dev is None:
                DriverSerial.findSerialDevices(self._hardwareID)

                if self.deviceID is not None:
                    if self.deviceID in DriverSerial.deviceIDS:
                        self.dev = DriverSerial.deviceIDS[self.deviceID]
                        self.devVer = 0
                        try:
                            i = DriverSerial.foundDevices.index(self.dev)
                            self.devVer = DriverSerial.deviceVers[i]
                        except:
                            pass
                        log.info(
                            "Using COM Port: %s, Device ID: %s, Device Ver: %s",
                            self.dev, self.deviceID, self.devVer)

                    if self.dev == "" or self.dev is None:
                        error = "Unable to find device with ID: {}".format(
                            self.deviceID)
                        log.error(error)
                        raise ValueError(error)
                elif len(DriverSerial.foundDevices) > 0:
                    self.dev = DriverSerial.foundDevices[0]
                    self.devVer = 0
                    try:
                        i = DriverSerial.foundDevices.index(self.dev)
                        self.devVer = DriverSerial.deviceVers[i]
                    except:
                        pass
                    devID = -1
                    for id in DriverSerial.deviceIDS:
                        if DriverSerial.deviceIDS[id] == self.dev:
                            devID = id

                    log.info(
                        "Using COM Port: %s, Device ID: %s, Device Ver: %s",
                        self.dev, devID, self.devVer)

            try:
                self._com = serial.Serial(self.dev,
                                          baudrate=DriverSerial.baud_rate,
                                          timeout=5)
            except serial.SerialException as e:
                ports = DriverSerial.findSerialDevices(self._hardwareID)
                error = "Invalid port specified. No COM ports available."
                if len(ports) > 0:
                    error = "Invalid port specified. Try using one of: \n" + \
                        "\n".join(ports)
                log.info(error)
                raise BiblioSerialError(error)

            packet = DriverSerial._generateHeader(CMDTYPE.SETUP_DATA, 4)
            packet.append(self._type)  # set strip type
            byteCount = self.bufByteCount
            if self._type in BufferChipsets:
                if self._type == LEDTYPE.APA102 and self.devVer >= 2:
                    pass
                else:
                    self._bufPad = BufferChipsets[self._type](self.numLEDs) * 3
                    byteCount += self._bufPad

            packet.append(byteCount & 0xFF)  # set 1st byte of byteCount
            packet.append(byteCount >> 8)  # set 2nd byte of byteCount
            packet.append(self._SPISpeed)
            self._com.write(packet)
            resp = self._com.read(1)

            if len(resp) == 0:
                # Hack I had to add for my Arduinos to correct IOError
                # self._com.write(packet)
                # resp = self._com.read(1)
                # if len(resp) == 0:
                DriverSerial._comError()

            return ord(resp)

        except serial.SerialException as e:
            error = "Unable to connect to the device. Please check that it is connected and the correct port is selected."
            log.error(traceback.format_exc())
            log.error(error)
            raise e
Пример #14
0
 def __exit__(self, type, value, traceback):
     if self._com is not None:
         log.info("Closing connection to: %s", self.dev)
         self._com.close()
Пример #15
0
    def test_serial(self):
        # Code taken from
        # https://gist.github.com/adammhaile/1b43fdde6ae6cbbd35560c68a9b90beb

        from bibliopixel import Strip
        from bibliopixel.drivers.channel_order import ChannelOrder
        from bibliopixel.drivers.serial import Serial, LEDTYPE
        from bibliopixel.drivers.serial.devices import Devices
        from bibliopixel.animation import StripChannelTest

        import bibliopixel.log as log
        import time

        log.setLogLevel(log.DEBUG)

        devs = Devices(hardware_id="1D50:60AB", baudrate=921600)

        log.info("Serial devices:")
        dev_list = devs.find_serial_devices()
        log.info(dev_list)

        first_dev = dev_list[list(dev_list.keys())[0]][0]

        log.info('Default device:')
        log.info(devs.get_device())

        log.info('Device ID for: ' + first_dev)
        old_id = devs.get_device_id(first_dev)
        log.info(old_id)

        log.info('Setting device ID to 42')
        devs.set_device_id(first_dev, 42, baudrate=921600)

        log.info('New Device ID for: ' + first_dev)
        log.info(devs.get_device_id(first_dev))

        log.info('Restoring device ID to ' + str(old_id))
        devs.set_device_id(first_dev, old_id, baudrate=921600)

        log.info('Device version for: ' + first_dev)
        log.info(devs._get_device_version(first_dev))

        driver = Serial(
            LEDTYPE.APA102, 600, SPISpeed=4, c_order=ChannelOrder.RGB)
        layout = Strip(driver)

        for b in range(7, 256, 8):
            log.info('Set brightness ' + str(b))
            layout.set_brightness(b)
            time.sleep(0.25)

        log.info('Run StripChannelTest')
        anim = StripChannelTest(layout)

        anim.run(amt=1, max_steps=8)

        layout.all_off()
        layout.update()

        print("Test Complete!")
Пример #16
0
 def stop(self):
     self._stop_event.set()
     log.info("Stopping Receiver...")
     self.thread_cleanup()
Пример #17
0
 def start(self):
     self._t = threading.Thread(target=self._recv_thread_obj)
     self._t.setDaemon(True)  # don't hang on exit
     self._t.start()
     log.info("Receiver Listening on %s", self.address)