eupolicy.social is one of the many independent Mastodon servers you can use to participate in the fediverse.
This Mastodon server is a friendly and respectful discussion space for people working in areas related to EU policy. When you request to create an account, please tell us something about you.

Server stats:

192
active users

#circuitpython

1 post1 participant0 posts today

Missed the live episode of The Bootloader last Friday and don't have time to watch a video? Take the show on the go with today's new episode - a replay of our live #CircuitPythonDay2025 episode. Tod and I each share a few of our favorite things from the #CircuitPython community over the last year. thebootloader.net/blog/2025/08

The Bootloader · CircuitPython Day 2025 Special EditionThe Bootloader LIVE on CircuitPython Day 2025

My latest blog post: Installing CircuitPython on a Freenove ESP32-S3-WROOM CAM Board

mikecoats.com/circuitpython-on

In celebration of CircuitPython Day 2025, here's how I installed CircuitPython on one of my favourite, but unsupported, boards, the Freenove ESP32-S3-WROOM CAM Board.

mikecoats.comInstalling CircuitPython on a Freenove ESP32-S3-WROOM CAM Board
More from Mike Coats 🏴󠁧󠁢󠁳󠁣󠁴󠁿🇪🇺🌍♻️

Pico Touch Board Audio

I wanted to go back to my Pico Touch Board PCB Design and see if there was a way to make it more stand-alone. The original design was to make it a MIDI controller, but that isn’t the only option.

https://makertube.net/w/tADSyrPrUdR1mx7yKRXZTC

Warning! I strongly recommend using old or second hand equipment for your experiments.  I am not responsible for any damage to expensive instruments!

These are the key Arduino tutorials for the main concepts used in this project:

If you are new to microcontrollers, see the Getting Started pages.

Parts list

  • Pico Touch Board PCB – built
  • Resistors: 1x 220Ω, 1x 1K
  • Capacitor: 1x 100nF ceramic, 1x 22uF electrolytic
  • Breadboard and jumper wires

The Circuit

Most of the GPIO are linked out to the touch pads, but the three analog inputs are still available. They are added on to the header on the right hand side of the board at the top, so we can use one of these as an audio output.

Initially, I thought of connecting it to an 8Ω speaker. If I was using an Arduino then I’d use a 220Ω resistor in series to limit the current to less than 20mA. But as I’m using a Pico, the maximum current has to be a lot less. I seem to recall it is a little complicated, and there are some options, but I have a figure of around 4mA that I tend to work to. It is also running at 3.3V, which means that it would need an in series resistor of 3.3 / 0.004 = 825Ω. This would work, but the speaker will be really quiet!

So I ditched that idea (there is a software reason too, but I’ll talk about that in a moment) and went straight to a PWM output with a low-pass filter to try to give me some vaguely useful as a line-out signal.

I’ve not done the calculations, but instead went a bit “hand-wavy”, combing a 1K and 220Ω resistor to drop the voltage, along with a 100nF capacitor. I’ve also added a 22uF capacitor to remove the DC bias.

That seems to give me something useful, but as you can see from the trace below of a square wave PWM output, there is a lot of room for improvement!

The Code

I wanted to stick with Circuitpython, so my initial thought was to use simpleio.tone() to generate a tone based on a frequency from an IO pin. However, this has the problem that the code is blocking whilst the tone is playing which isn’t very useful.

Instead I went straight to synthio. It turns out that using synthio was actually a lot easier than the “simple” simpleio…

Here is the basic code to generate an ASR-shaped square wave on a PWM audio output on GPIO 28 based on the touch pads as input.

import board
import touchio
import synthio
import audiopwmio
from adafruit_debouncer import Debouncer, Button

audio = audiopwmio.PWMAudioOut(board.GP28)
synth = synthio.Synthesizer(sample_rate=22050)
audio.play(synth)
synth.envelope = synthio.Envelope(attack_time=0.1, release_time=0.6, sustain_level=1.0)

touchpins = [
board.GP2, board.GP3, board.GP4, board.GP5,
board.GP6, board.GP7, board.GP8, board.GP9,
board.GP10, board.GP11, board.GP12, board.GP13,
board.GP14, board.GP15, board.GP16, board.GP17,
board.GP18, board.GP19, board.GP20, board.GP21, board.GP22
]

THRESHOLD = 1000
touchpads = []
for pin in touchpins:
t = touchio.TouchIn(pin)
t.threshold = t.raw_value + THRESHOLD
touchpads.append(Button(t, value_when_pressed=True))

while True:
for i in range (len(touchpads)):
t = touchpads[i]
t.update()

if t.rose:
synth.press(60+i)

if t.fell:
synth.release(60+i)

Battery Power

One last thing I wanted to explore was if it was possible to power the touchboard with batteries. I left in a number of power options, so for this one I’m using the 5V/GND pin header. I’ve included a couple of capacitors for smoothing, and need to add the 1N5817 diode as shown below.

This requires the following additional components:

  • 1x 1N5817 Schottky diode.
  • 1x 100nF ceramic capacitor.
  • 1x 47uF electrolytic capacitor.
  • Jumper wires.
  • 3 or 4 battery box.

The 5V/GND header pins connect to the Raspberry Pi Pico’s VSYS pin via the Schottky diode. The 1N5817 has a typical voltage drop of 0.45V, so combined with the Raspberry Pi’s accepted input voltage of 1.8V to 5.5V this means that ideally two or three AA batteries (at 1.5V each) would work. Four 1.2V rechargeables might be an option too.

It might be possible to get away with four 1.5V AAs, but that would give an input voltage of just over 5.5V, so I think that is probably pushing things too far. It might be a good use for some spent AAs though that are no longer reading a full 1.5V…

One of the downsides of battery power is that the touch works best when your fingers are at the same GND potential as the board. It works best if the GND pin of the (unpopulated) barrel jack is touched when using the board.

Closing Thoughts

With hindsight it would have been useful to have included a simple PWM output stage on the original board, but it is relatively straight forward to add one.

It might even be worth me making an add-on board that will connect to the header pins of the power and analog pins containing the simple passive filter components.

What is pretty impressive though, is how easy it is to use synthio with Circuitpython.

Kevin

For the last month or so I've been working on seeing how far I can push CircuitPython into emulating a TB-303 bass synth. With the new audiofilters library, you can "stack" filters to make two two-pole filters seem like a 4-pole filter, getting close to that squelchy sound we need. My efforts so far:
youtube.com/watch?v=1AflpXbEIno
#circuitpython #tb303 #synthdiy #raspberrypipico

I should be socializing with our host here in Aarhus but instead I've been doing some #circuitpython crimes. What if we could run synthio on desktop computers? It… sorta works? but only if you live code your synthio at the repl. and pitches seem wrong. and it clicks when changing notes.

github.com/adafruit/circuitpyt

aud.py: gist.github.com/jepler/6785f1d

$ cd ports/unix
$ make VARIANT=sound
$ ./build-sound/micropython
>>> import aud
>>> i = 72
>>> aud.s.release_all_then_press(i := i + 1)
>>> aud.s.release_all_then_press(i := i + 1)
>>> aud.s.release_all_then_press(i := i + 1)
>>> aud.s.release_all_then_press(i := i + 1)
>>> aud.s.release_all_then_press(i := i + 1)
>>> aud.s.release_all_then_press(i := i + 1)
>>> aud.s.release_all_then_press(i := i + 1)
>>> aud.s.release_all_then_press(i := i + 1)
GitHubComparing adafruit:main...jepler:unix-sound-sdl · adafruit/circuitpythonCircuitPython - a Python implementation for teaching coding with microcontrollers - Comparing adafruit:main...jepler:unix-sound-sdl · adafruit/circuitpython

My Raspberry Pi Pico 2-based Dub siren now has a simple synth engine in addition to a sample engine, so its sounds now range from classic siren sounds to air horns and vocal snippets.

In this short video I show off the synth engine: 🎹🔈🎶

v.basspistol.org/w/qmjJ3TY8Q8m

thx again 2 @todbot

And if you haven't seen it yet check out this video for yesterday's exploration of the sample engine: 📯🔈🎶

v.basspistol.org/w/pS4PrN9Wjo5