I was not going to do a Holiday project but there hasn't been a lot of joy and there has been a lot of stress this year, so I thought that it would be good to do something simple and colorful to lift our spirits.
I recently got an Adafruit QT Py and a NeoPixel LED ring that I thought I could use to make a simple lighted Christmas ornament. I'm going to add a 128x64 OLED display and use the capacitive sensing built into the SAMD21 to select different color patterns for the NeoPixel ring.
Here's a sketch of the concept:
I'll also print a base to hold the QT Py. I'm still in the proto stage so I'll use a breadboard initially. I need to figure out what I'm going to use for the capacitive touch buttons.
I planned to use CircuitPython to program the QT Py as Adafruit has some great python libraries available for display graphics and neopixels. Unfortunately, I discovered that with the 32KB of SRAM on the SAMD21 that you can't load many complex libraries simultaneously. I could run different functions individually (OLED, NeoPixel, CapSense), but when I tried to import all the libraries in the same program I ran into "out of memory" errors. I made sure that I was using the smaller footprint "mpy" libraries and I tried different load order and even added garbage collection between imports. I think the SSD1306(OLED) library is the worst offender because it also requires the bus_device and framebuf libraries. I almost got it to work, but finally decided just to use the Arduino IDE.
Here's my first pass. Hopefully it will evolve over the next few weeks. I still need to add the capacitive sense buttons and possibly a small speaker for sound. And to clean up the wiring.
A short video that shows the OLED and NeoPixel ring working.