Alienware AW410K RGB Controller
This project provides control to the RGB lighting on an Alienware AW410K keyboard based on ADC readings from an attached light dependent resistor using a webpage served by a Raspberry Pi Pico (2). Each key on the keyboard is individually configurable from the webpage and can be set to automatically adjust brightness based off the ambient lighting.
Setup
Hardware
You will need the following hardware to make the device:
- Raspberry Pi Pico or Raspbery Pi Pico 2
- USB extension cable
- light dependent resistor such as GL5528 (specific part number may vary)
- 10k ohm resistor (resistance value may vary)
You will need to cut the USB extension in half and connect the wires from the female end to the Raspberry Pi Pico (2). The default configuration is to attach the USB's green wire to pin 1/GP0 and USB's white wire to pin 2/GP1. You will also need to connect the red to 5V VBUS/VSYS (since you'll be powering from the USB host device, VBUS should be fine) and the black to any ground pin. Pin 38 is the closest and most convenient. While you can connect the Raspberry Pi Pico (2) to the host device using the micro USB port and a micro USB cable, since you have already sacrificed half of the USB extension cable, you might as well use the male half to create a standard USB-A connection. If you wish to do so, then simply connect the red and black wires of the male connector end to VBUS (5V) and GND, respectively. For the data wires, you can solder them to the two test points TP2 and TP3 on the back of the Raspberry Pi Pico (2). The white cable goes to TP2 and the green cable to TP3.
The LDR should then be connected to the ADC2 pin (pin 34/GP28) and 3.3V (pin 36) or alternatively to the ADC_VREF (pin 35) and the regular resistor between ADC2 and any ground, including ADC_GND (pin 33). The results look something like the following.
The individual wires on the USB can be fragile, so hot glue or other strain relief is a good idea. There is also a model for a 3D printed enclosure that you can use to place the Pico (2) inside with a hole for the LDR to detect ambient light.
Software
Flash the aw410k_rgb.uf2 file found from the latest release to the Raspberry Pi Pico (2), and connect the keyboard to the female USB port and insert the male USB connector of the device into your host device such as PC.
To load the UI for configuring the RGB lighting, open a browser to the page at http://aw410k.usb, or if that doesn't load, to http://192.168.40.1. From the webpage, you can click on any individual key that you want to configure and change the color using the color selector or by manually inputting the RGB color value into the text boxes. To finalize setting the color for the selected key(s), click on the "Set Color" button.
To save the lighting configuration to the Pico (2) so that it loads the next time it is powered on, click on the "Save" button under the "Flash Memory" section. If you make unsaved changes and want to reload the configuration from memory, you can also click the "Load" button to reset to the last saved setting.
If the checkbox next to "Adaptive" is selected when setting the color, the key's brightness will automatically adjust with the ambient lighting, as determined by the ADC reading of the LDR. Leaving it unchecked will set the RGB color to be constant regardless of the ambient light level.
The mute button has special behavior when set to adaptive mode. It will toggle between the user-configured color and red each time that it is pressed as a way to indicate whether system sounds are muted or not. The keyboard will always boot in the "unmuted" setting, so if your system starts off muted, the LED color on the keyboard and your system may not match.
Licensing
This software is distributed under the GNU General Public License version 3, with the exception of the libraries in the following section.
Credits
The project uses code from the following sources:
- OpenRGB for code related to Alienware's RGB lighting protocol on the AW410K keyboard licensed under GNU-GPLv2
- Pico-PIO-USB for templates used from the host_hid_to_device_cdc example released under the MIT license
- TinyUSB for templates used from the net_lwip_webserver example distributed under the MIT license




