Ma configuration pour faire de l'électronique
2026-07-31 (updated: 2026-07-31 )
Depuis quelques mois j’essaie de me mettre à l’électronique. J’adore ça et je regrette chaque jours un peu plus de pas avoir fait un IUT GEII (Génie Electrique et Informatique Industrielle) mais malheureusement j’ai aucune Delorean sous la main pour réparer cette erreur. Donc je me dis, autant profiter de mes connaissances en informatique pour faciliter ma vie…
En ce moment je fais des petits circuits audio. C’est fun, c’est assez facile mais surtout: c’est chiant à débug sans oscillo. Mon multimètre est pratique pour voir si une tension est suffisante en un point donné, mais pour voir la gueule du signal bon courage :p.
Je me suis donc demandé comment je pouvais faire pour me faciliter un peu la vie, et pour l’instant ça donne quelque-chose comme ça:
TL;DR j’ai un petit setup pour voir comment est traité un signal donné avec Friture et une carte son, designer des circuits / PCB avec KiCad et faire des simulations un peu plus complexes au besoin avec QUCS-S, le tout dans une Flake évidemment disponible à la fin de l’article ou ici.
Un signal pour les gouverner tous
Le premier truc relou c’est de pas avoir d’oscilloscope. Pour tester des effets audio ça nous laisse juste l’oreille là où on aimerait bien avoir du signal temporel, de l’analyse fréquentielle et du spectrogramme. En plus ça serait cool de pouvoir créer 2/3 signaux de base. Pour ça, on va utiliser Friture, un analyseur audio en temps réel. Mais avant faut s’assurer d’avoir bien config son audio pour éviter d’être emmerdé bêtement.
J’ai eu 2/3 soucis avec Friture. En gros quand j’essayais de le faire marcher pour Wayland avec un paquet qtwayland ça avait tendance à Freeze, donc je devais forcer le backend XCB et en plus il manquait une lib QT pour gérer les Dialogs (qtquickcontrols). J’ai donc après quelques tentatives décidé de wrapper Friture afin de lui filer la lib au build puis de set la variable d’environnement QT_QPA_PLATFORM=xcb une fois pour toute.
Une fois tout ça setup, je branche ma carte son afin de pouvoir à la fois envoyer un signal et en recevoir un. Pour ça j’ai été au plus simple / schlague, en envoyant en sortie mon signal puis en piquant la prise casque vers l’entrée de mon circuit. Ensuite je fous la sortie du circuit dans une input de ma carte son configurée en mono et voilà. Au besoin, j’ai Helvum pour faire un patch histoire de filer l’audio de ma carte son à la fois à Friture et sur une sortie line (pour y foutre un casque et entendre le signal traité), et le signal non traité sort par défaut de ma carte son donc je peux l’envoyer dans un ampli sans soucis. L’inverse serait plus pratique mais surtout plus chiant à configurer donc ça le fait comme ça…
A la fin ça donne ça, en balançant un La pure à 440Hz avec le générateur configuré en sinus. On peut aussi envoyer du bruit blanc et du bruit rose ce qui est vraiment top pour tester un filtre ou quoi.

Design et simulation
Pour les simulations rapides, qucs-s est souvent plus pratique à sortir que KiCad, et pour pouvoir faire des design pour y foutre mes PCB un petit FreeCAD et c’est parti !
kicad freecad # so I can design PCBs and encasings
qucs-s ngspice # actually not really useful since I have kicad but might be useful later on when dealing with HF
Ce qui nous donne cette flake (en partant du template default de the-nix-way)
{
description = "Simple flake for electronic shits";
# Flake inputs
inputs.nixpkgs.url = "https://flakehub.com/f/NixOS/nixpkgs/0.1"; # unstable Nixpkgs
# Flake outputs
outputs =
{ self, ... }@inputs:
let
# The systems supported for this flake
supportedSystems = [
"x86_64-linux" # 64-bit Intel/AMD Linux
# "aarch64-linux" # 64-bit ARM Linux
# "aarch64-darwin" # 64-bit ARM macOS
];
# Helper to provide system-specific attributes
forEachSupportedSystem =
f:
inputs.nixpkgs.lib.genAttrs supportedSystems (
system:
f {
inherit system;
pkgs = import inputs.nixpkgs { inherit system; };
}
);
in
{
devShells = forEachSupportedSystem (
{ pkgs, system }:
{
default = pkgs.mkShellNoCC {
# The Nix packages provided in the environment
# Add any you need here
packages = with pkgs; [
self.formatter.${system}
# friture patched so that generators works
(friture.overrideAttrs (old: {
buildInputs = (old.buildInputs or [ ]) ++ [ libsForQt5.qtquickcontrols pkgs.makeWrapper ];
postInstall = (old.postInstall or "") + ''
wrapProgram $out/bin/friture \
--set QT_QPA_PLATFORM "xcb"
''; # needed to force xcb, else I experience random freezes when changing windows and that sucks
}))
helvum # we never know when a patch is needed ^^ mostly to route from Audio Interface both to Friture and another output (so that I can ear the signal)
kicad freecad # so I can design PCBs and encasings
qucs-s ngspice # actually not really useful since I have kicad but might be useful later on when dealing with HF
];
# Set any environment variables for your dev shell
env = {
};
# Add any shell logic you want executed any time the environment is activated
shellHook = ''
'';
};
}
);
formatter = forEachSupportedSystem ({ pkgs, ... }: pkgs.nixfmt);
};
}
Et voilà, avec ça on peut s’amuser un peu et surtout faciliter le debug et ça c’est top… Jsuis dev à la base sans mon GDB je suis perdu!