I maintain this

Arduino-Filters library.

It supports Butterworth filters out of the box, as you can see in this example:

Butterworth.ino
Ideally, this example is all you need to filter some sensor data.

If you want to delve into it a little deeper, you can find the derivation of the Butterworth filter coefficients here:

Discretization of a Butterworth filter
Using these coefficients, you can use any library that supports BiQuad filters, like the Teensy Audio library, for example.

You can easily calculate the coefficients in your Arduino code, you don't need to use a filter design tool per se.

You don't have to go through all the mathematics of course, the only result you need are the coefficients (bₖ₀, bₖ₁, bₖ₂) and (aₖ₀, aₖ₁, aₖ₂), which are the coefficients of the k-th stage of the BiQuad filter, for k = 0..n/2-1, for n the order of the filter. If n is odd, you also need one first-order stage.

Many implementations expect aₖ₀ to be 1. You can just divide the other five coefficients by aₖ₀ in that case.

Other filter types like Chebyshev are similar, but I haven't had the time to implement them yet, and they have some additional design parameters like pass/stop band band ripple that you'd have to implement. Butterworth is simpler in that respect, you just have to select the order and the cut-off frequency.

Bessel functions aren't usually discretized because they lose some of their interesting properties in the process.

If you want to generate the filter beforehand and hard-code the coefficients in your code, you can use the SciPy “

butter”, “cheby1” and “cheby2” functions. You can find an example included with the Arduino-Filters library:

visualize-butterworth.py
By default, these functions return the coefficients of the entire transfer function polynomials, which is fine for low order filters, but prone to numerical errors for higher orders, so it's best to use a BiQuad implementation (each BiQuad filter is a second order filter, so implementing a filter using multiple BiQuads is referred to as “Second Order Sections” or SoS). You can pass the option output='sos' to the SciPy functions to get the BiQuad coefficients.

Pieter