A passive FeatherWing adapter for stacking an Adafruit PyBadge or PyGamer onto a Crickit FeatherWing.
The semi-automatic device discovery configurator is working. Will perform some additional tests to see if it can be expanded to more than just I2C devices including SPI, UART, and devices on GPIO pins. Should be possible.
It would be nice to be able to discover Stemma devices automatically, but that's too encyclopedic for this project's scope. We're going semi-automatic instead: read a short list of possible devices, test 'em, and provide a "connected" list object. Will look at creating a text file of possible devices for a future version.
Using the Adafruit Crickit FeatherWing's on-board audio amplifier requires installation of the Audio jumper to connect the attached Feather's A0 pin. The jumper doesn't need to be permanent if a pair of 0.1-inch angled header pins are installed on the underside of the Crickit PCB.
The newest design provides improved cutouts, particularly for the Crickit's Signal I/O connector. The tolerance of the opening near the #1 I/O connector pins is tight given the proximity of the adjacent PyBadge mounting hole. The #1 connection works okay with standard header pins in spite of the issue, but we'll look to provide more clearance in the design of the next revision. It'll involve a trade-off of accessibility and mounting hole strength of the lower-right corner of the board.
The robot front panel pass a full bevy of tests for graphics, text, sound, buttons, motors, servos, neopixels, internal/external sensors, etc. Was very challenging and fun to find ways to use the standard Adafruit CircuitPython libraries to minimize resource competition, particularly for external Stemma devices.
Completed and submitted the PRs for adding features to the Adafruit Crickit and PyBadger libraries based on the latest testing. Thinking about another Crickit library PR to simplify I2C bus management when using a combination of on-board and Stemma-connected I2C devices.
Was able to get the PyBadger and Crickit libraries to work together after dropping the Seesaw library out of the primary code module. In the process, some library change pull requests were submitted. The changes include a function to toggle between graphics and text displays, set PyBadger default NeoPixel strip brightness, correct the auto display-dim routine to revert to the initially-set display backlight brightness (instead of maximum brightness), and to expose the Crickit's on-board NeoPixel through the Crickit library.
The remaining task is to confirm that Stemma-connected devices. Hope to get to that in the next couple of days.
The end result will likely be a hybrid library that combines the PyBadger and Crickit libraries into one that's focused on supporting a wide variety of sensors as well as robot-specific control and display text/graphics.
With some perseverance, was able to get the stock Adafruit CircuitPython PyBadger and Seesaw libraries to work without I2C conflicts. Tested all PyBadge functions (display, display brightness, NeoPixels, buttons, light sensor, accelerometer) and a few Crickit pins (motor, internal NeoPixel). Next steps are to 1) see if external Stemma devices work and 2) integrate the Adafruit CircuitPython Crickit library. The goal is to only use stock libraries if possible.
Spent some time to piece together a puzzle of CircuitPython helpers to test all of the Crickit features through the Robot Friend. Discovered that the level of abstraction provided by the Crickit, Seesaw, and Badger libraries locked the I2C bus so that the PyBadge accelerometer and the Stemma interface were unavailable for sensor testing. Given my Python programming skillset, using subclasses of the libraries for each Crickit function seemed to be a good workaround. Stay tuned to see if that was a reasonable premise.
Quickly threw together a draft chart to help remember the Crickit's Seesaw pinout. It'll be refined as the coding progresses.
The M0 HalloWing discovered the Crickit's Seesaw chip via I2C. Needs more testing...
So here's an interesting "feature" that was discovered when powering the PyBadge/PyGamer (PB/PG) +3.3 volts via Feather pin 3V from the Crickit FeatherWing.
The Crickit is capable of providing up to 150mA of 3.3-volt power to the attached PB/PG Feather. In normal operation without any of the NeoPixels lighted, the PB/PG will draw about 60mA from the Crickit's internal 3.3-volt regulator.
When the PB/PG is powered only by the Crickit via the Feather 3V pin, the PB/PG 3.3v regulator is reverse-biased by the Crickit-supplied +3.3 volts. The AP2112-3.3 regulator has an intrinsic MOSFET diode between its output and input that conducts when reverse-biased, raising the voltage of the input pin to the same as the output pin less the forward voltage drop of the diode. What that means is that 5-volt components like the PB/PG's NeoPixels and Stemma connectors will have approximately +3.2 volts available for operation. The PB/PG NeoPixels seem to work with the lower voltage, but might not be 100% reliable.
Caution: Since the reverse-biased "feature" of the PB/PG's internal regulator is not documented in the datasheet, it's probably a good idea to limit use of the PB/PG NeoPixels when stacked on the Crickit via the Robot Friend FeatherWing. If you need to brightly light the PB/PG NeoPixels, consider adding a small LiPo battery directly to the PB/PG or just use the Crickit's internal NeoPixel or drive a string via the Crickit's external NeoPixel connector.