This is untested, but something like this.
From https://github.com/microsoft/ArduinoHidForWindows/blob/main/src/LampArrayReportDescriptor.h and https://learn.adafruit.com/adafruit-pixel-trinkey/hid-lamparray
| # espnow-simple_hacky_receiver.py -- show ESPnow working broadcast on CircuitPython | |
| # 9 Jul 2025 - @todbot | |
| # tested on QTPY ESP32-S2 and FunHouse (ESP32-S2) | |
| import time | |
| import wifi | |
| import espnow | |
| # https://github.com/adafruit/circuitpython/issues/9380#issuecomment-2463013607 | |
| # hack to switch channel that is used for ESPNow | |
| # this takes just a few milliseconds, so doesn't waste a lot of power |
| import time | |
| import usb_hid | |
| import adafruit_hid | |
| keyboard_hid = adafruit_hid.find_device(usb_hid.devices, usage_page=1, usage=6) | |
| print("waiting for LED commands from computer") | |
| while True: | |
| out_report = keyboard_hid.get_last_received_report() # out from computer | |
| if out_report: |
This is untested, but something like this.
From https://github.com/microsoft/ArduinoHidForWindows/blob/main/src/LampArrayReportDescriptor.h and https://learn.adafruit.com/adafruit-pixel-trinkey/hid-lamparray
| # derpnote2-rp2350.py - My sound piece attempting to recreate the THX "Deep Note" sound, with display | |
| # 14 Aug 2024 - @todbot / Tod Kurt | |
| # | |
| import asyncio | |
| import board, audiopwmio, audiomixer, audiocore, synthio, random, time | |
| import busio, displayio, terminalio, vectorio | |
| import keypad | |
| import neopixel | |
| import adafruit_displayio_ssd1306 | |
| from adafruit_display_text import bitmap_label as label |
| #!/bin/bash | |
| # | |
| # Create a small video clip of a podcast-like video on youtube. | |
| # 4 March 2026 - Tod Kurt / @todbot | |
| # | |
| # This script does the following: | |
| # - Download the video of the podcast | |
| # - Download the subtitles of the podcast video | |
| # - Create a copy of the entire video with the captions burned in | |
| # - Snip the specified section of that video with audio waveform overlay |
| # wavetable_render_code.py - Render wavetables to PyGamer display | |
| # | |
| # 27 Aug 2023 - @todbot / Tod Kurt | |
| # | |
| # This code is currently a mess but it does function. :) | |
| # video demo: https://www.youtube.com/watch?v=O9iZOytzOHg | |
| # | |
| # Needs wavetables in WAV format from http://waveeditonline.com/ | |
| # loaded in the "/wav" directory. Just download a few and stash them in "/wav" | |
| # |
| """ | |
| LilyGo T-Display S3 display hand-setup. Not normally required if using https://circuitpython.org/board/lilygo_tdisplay_s3/ | |
| """ | |
| import time | |
| import board | |
| import digitalio | |
| import displayio | |
| import paralleldisplaybus | |
| import adafruit_st7789 |
| # synthio_midi_synth.py - pretty usable MIDI-controlled synth using synthio in CircuitPython | |
| # 11 May 2023 - @todbot / Tod Kurt | |
| # Uses cheapie PCM5102 DAC on QTPY RP2040 | |
| # Video demo: https://www.youtube.com/watch?v=N-PbbWWDE6k | |
| # Features: | |
| # - midi velocity controls attack rate (gentle press = slow, hard press = fast) | |
| # - notes have small random detune on all oscillators to reduce phase stacking | |
| # - adjustable number of detuned oscillators per note 1-5 (midi controller 83) | |
| # - five selectable waveforms: saw, squ, sin, noisy sin, noise (midi controller 82) | |
| # - vibrato depth on mod wheel (midi controller 1) |