Step 1: Acquire parts and get loosely working

Goal: Determine if all of the bits are going to fit together as I’d hoped.

The goal was to use CircuitPython. Just because I can program things in assembler (Or C++) doesn’t mean I should do it often. At the same time, I didn’t want to use a whole Raspberry Pi on it, because there’s too many ways that can go weird.

So I figured the desired configuration was a M4 Feather Express (because CircuitPython is going to require a lot more CPU and RAM and Storage than doing it in C++) and an OLED FeatherWing so I’d have something with buttons and a little display for debugging.

I did some pondering and adjusting and pulled the trigger on a DigiKey order on Tuesday, with an expected delivery date of Saturday.

They were out of the Adafruit packaged stacking headers, so I got some general-purpose 12 pin stacking headers and 16 pin stacking headers, which actually cost me more than just getting the Adafruit branded bundled product.

On Wednesday, AdaFruit posted an article about building it with a CLUE. I guess this provides me with a realism check that it’s totally a thing I could do, but at the same time, the CLUE is the least useful form factor for my needs (even as it’s totally an excellent form factor for a lot of other folks) so I’m diverging from their design on at least one hardware point regardless.

It was supposed to arrive on Saturday, but it turns out it showed up Thursday afternoon.

This is great, because I was taking a company-approved mental health day because Coronavirus on Friday.

Now, past me had done present me a solid. I had a bunch of random electronic bits that I’d sent off to DirtyPCBs. Pretty much, the goal was to fill a 5cm × 5cm space. In there was a tiny breakout that holds three APA102 LEDs in a string, so I soldered one up while I was putting the stacking headers on.

I wrote up a quick hello world sort of app to demonstrate that everything actually worked.

The big downside is that if you don’t have a LiIon battery connected, the charger circuit blinks the yellow charging light and that’s just plain not nice for a lightpainting.

Observations on CircuitPython, so far:

  • I tried using Mu. It’s OK. It’s probably great for the actual target audience, same as the Arduino GUI target audience. However, after it somehow doesn’t want to work in serial port mode, I switched to using my usual Sublime and using PuTTY to connect to the serial port.
  • The documentation is heavily weighted towards task-based intros and away from reference materials. This is weird, different, and strange for me. Again, this is probably actually perfect for the target audience and I have a huge amount of respect for the AdaFruit documentation team. It’s just that it doesn’t work the way I necessarily want.
  • The USB bootloader is really quite nice. I can just edit a Python source file as if it’s a keydrive attached to my computer. Device programmers are annoying. Can we have more embedded things that work like this?
  • The library support is fine for now. Basically, what you end up doing is… grabbing a tarball of all of the contrib libraries and dropping it into a folder. Eventually this is going to require them to make some sort of virtualenv sort of library manager, but I’d rather see this done right than punted.