Configuring LED Lights with SUSI Smart Speaker

To make the SUSI Smart Speaker more interactive and to improve the visual aesthetics, we configured SUSI Smart Speaker’s response with 3 RGB led lights. We have used a new piHat as an external hardware to configure the LEDs. Now the new hardware specs of the SUSI Smart Speaker are: Raspberry Pi ReSpeaker PiHat 2 Mic Array External Speakers Using an external PiHat not only added the RGB light functionality but also eliminated the need to use a USB microphone and configured a factory reset button Configuring the PiHat as the default Audio driver To Use the PiHat as the default input driver, we use the package called PulseAudio. And we use the following command in the installation script. pacmd set-sink-port alsa_output.platform-soc_sound.analog-stereo analog-output-headphones Configuring PiHat’s GPIO Button with Factory Reset There is an onboard User Button, which is connected to GPIO17. We use the python library RPi.GPIO to detect the user button. The python script is used in the following way GPIO.setmode(GPIO.BCM) GPIO.setup(17,GPIO.IN) i = 1 while True: if GPIO.input(17) == 1:        time.sleep(0.1)        pass    elif GPIO.input(17) == 0 :        start = time.time()        while GPIO.input(17) == 0 :            time.sleep(0.1)        end = time.time()        total = end - start        if total >= 7 :            subprocess.call(['bash','factory_reset.sh'])  # nosec #pylint-disable type: ignore        else :            mixer = alsaaudio.Mixer()            value = mixer.getvolume()[0]            if value != 0:                mixer.setvolume(0)            else:                mixer.setvolume(50)        print(total)        time.sleep(0.1)   This script checks on the button which is configured on GPIO port 17 on the PiHat. If the button is pressed for than 7 secs, the factory reset process takes place, else the device is muted. Configuring PiHat’s LED with Speaker’s Response We use a python library called SPIDEV to sync the LED lights with SUSI’s response. SPIDEV is usually used to send a response to the bus devices on the Raspberry Pi. The first step was installing spidev sudo pip install spidev Now we create a class where we store all the methods where we send the signal to the bus port. We treat the LED lights as a circular array and then have a rotation of RGB lights class LED_COLOR:     # Constants    MAX_BRIGHTNESS = 0b11111    LED_START = 0b11100000     def __init__(self, num_led, global_brightness=MAX_BRIGHTNESS,                 order='rgb', bus=0, device=1, max_speed_hz=8000000):        self.num_led = num_led        order = order.lower()        self.rgb = RGB_MAP.get(order, RGB_MAP['rgb'])        if global_brightness > self.MAX_BRIGHTNESS:            self.global_brightness = self.MAX_BRIGHTNESS        else:            self.global_brightness = global_brightness         self.leds = [self.LED_START, 0, 0, 0] * self.num_led        self.spi = spidev.SpiDev()        self.spi.open(bus, device)        if max_speed_hz:            self.spi.max_speed_hz = max_speed_hz     def clear_strip(self):         for led in range(self.num_led):            self.set_pixel(led, 0, 0, 0)        self.show()     def set_pixel(self, led_num, red, green, blue, bright_percent=100):        if led_num < 0:            return          if led_num >= self.num_led:            return        brightness = int(ceil(bright_percent * self.global_brightness / 100.0))        ledstart = (brightness & 0b00011111) | self.LED_START         start_index = 4 * led_num        self.leds[start_index] = ledstart        self.leds[start_index + self.rgb[0]] = red        self.leds[start_index + self.rgb[1]] = green        self.leds[start_index + self.rgb[2]] = blue     def set_pixel_rgb(self, led_num, rgb_color, bright_percent=100):        self.set_pixel(led_num, (rgb_color & 0xFF0000) >> 16,                       (rgb_color & 0x00FF00) >> 8, rgb_color & 0x0000FF, bright_percent)     def rotate(self, positions=1):        cutoff = 4 * (positions % self.num_led)        self.leds = self.leds[cutoff:]…

Continue ReadingConfiguring LED Lights with SUSI Smart Speaker