I was recently working on a project in which I wanted to drive a simple piezo buzzer attached to a GPIO pin on a Raspberry Pi. I was already using the RPi.GPIO module in my project so that seemed like a logical place to start, but I ran into a few issues.
You drive a piezo buzzer by generating a PWM signal with the
appropriate frequency. The RPi.GPIO
module implements PWM via
software, which is tricky on a non-realtime system. It’s difficult to
get the timing completely accurate, which results in sounds that are a
little wobbly at best. Since I’m simply generating tones with a
buzzer (rather than, say, controlling a servo) this is mostly just an
annoyance.