Outil CLI pour importer en masse les composants d'une BOM CSV (LCSC / JLCPCB) directement dans des bibliothèques KiCad.
- Parse un fichier CSV de BOM avec colonnes flexibles (LCSC, JLCPCB, ou BOM manuelles)
- Détecte automatiquement les passifs (R/C/L) → footprints standard KiCad
- Télécharge les footprints
.kicad_mod, modèles 3D.step/.wrl, et symboles.kicad_symvia l'API EasyEDA - Écrit un CSV enrichi avec le statut de chaque composant (disponibilité footprint, 3D, symbole)
- Génère des fichiers
.kicad_schhiérarchiques depuis les en-têtes de section du CSV (--generate-sch) - Opération idempotente : les fichiers existants sont ignorés sauf avec
--overwrite
pip install requests pydanticL'outil cherche automatiquement le chemin de la bibliothèque dans cet ordre :
- Argument CLI
--lib-path /chemin/vers/libs - Variable d'environnement OS
EASYEDA2KICAD=/chemin/vers/libs - Configuration KiCad → Préférences → Configurer les chemins →
EASYEDA2KICAD
La méthode recommandée est de configurer EASYEDA2KICAD dans KiCad :
- Ouvrir KiCad → Préférences → Configurer les chemins...
- Ajouter une entrée : Nom =
EASYEDA2KICAD, Chemin =/home/user/Documents/Kicad/easyeda2kicad - Le chemin est stocké dans
~/.config/kicad/<version>/kicad_common.json
python main.py --csv bom.csvSi EASYEDA2KICAD est configuré dans KiCad, c'est tout ce qu'il faut.
python main.py --csv bom.csv --lib-path ~/Documents/Kicad/easyeda2kicadpython main.py --csv bom.csv --dry-run --verboseAffiche un rapport complet de chaque composant (footprint trouvé, 3D disponible, symbole créé) sans écrire aucun fichier.
python main.py --csv bom.csv --dry-run -vpython main.py --csv bom.csv --overwriteRe-télécharge tous les footprints, modèles 3D et symboles même s'ils existent déjà.
python main.py --csv bom.csv --skip-symbolsUtile si vous gérez vos symboles manuellement ou avec un autre outil.
python main.py --csv bom.csv --no-fetchNe fait aucun appel API. Seuls les composants passifs (R/C/L) seront associés aux footprints standard KiCad.
python main.py --csv bom.csv --output result.csvPar défaut le CSV enrichi est écrit dans <input>_enriched.csv.
python main.py --csv bom.csv --lib-name myproject_libsCrée myproject_libs.pretty/, myproject_libs.3dshapes/, et myproject_libs.kicad_sym.
python main.py --csv bom.csv --3d-path ~/Documents/Kicad/3d_modelspython main.py --csv bom.csv --register-libs ~/Documents/Kicad/MonProjet/Ajoute les entrées dans fp-lib-table et sym-lib-table du répertoire projet. KiCad verra les bibliothèques automatiquement au prochain chargement.
python main.py --csv bom.csv --rate-limit 1.01 seconde entre chaque appel API (défaut : 0.4s). Utile si vous rencontrez des erreurs 429.
python main.py --csv bom.csv --quietpython main.py --csv bom.csv --generate-sch ~/Documents/Kicad/MonProjet/projet.kicad_schLe CSV doit contenir des en-têtes de section (voir Format des sections). L'outil crée :
- Un schématique racine avec des blocs de feuilles hiérarchiques
- Un fichier
.kicad_schpar section, avec les composants placés automatiquement - Des rectangles nommés pour chaque bloc fonctionnel dans les sous-feuilles
Les schématiques générés sont au format KiCad 9 (version 20241209), taille A3.
python main.py --csv bom.csv --generate-sch projet.kicad_sch --no-fetchUtile pour regénérer les .kicad_sch sans appels API (les bibliothèques doivent déjà exister).
python main.py \
--csv bom_jlcpcb.csv \
--lib-path ~/Documents/Kicad/easyeda2kicad \
--lib-name easyeda2kicad \
--output bom_enriched.csv \
--generate-sch ~/Documents/Kicad/MonProjet/projet.kicad_sch \
--register-libs ~/Documents/Kicad/MonProjet/ \
--overwrite \
--rate-limit 0.5 \
--verbose --csv, -c Chemin vers le fichier CSV de BOM (requis)
--output, -o Chemin du CSV enrichi en sortie (défaut: <input>_enriched.csv)
--lib-path Répertoire de base pour les fichiers bibliothèque KiCad
(défaut: EASYEDA2KICAD depuis config KiCad ou variable d'env)
--lib-name Préfixe de nom de bibliothèque (défaut: easyeda2kicad)
Crée {name}.pretty, {name}.3dshapes, {name}.kicad_sym
--3d-path Chemin alternatif pour les modèles 3D
(défaut: {lib-path}/{lib-name}.3dshapes)
--overwrite Écraser les fichiers existants (footprints, 3D, symboles)
--skip-symbols Ne pas importer les symboles (footprints et 3D seulement)
--no-fetch Mode hors-ligne, pas d'appels API EasyEDA
--rate-limit Délai entre les appels API en secondes (défaut: 0.4)
--dry-run Afficher ce qui serait fait sans créer de fichiers
--register-libs DIR Enregistrer les bibliothèques dans fp-lib-table et
sym-lib-table du répertoire projet spécifié
--generate-sch ROOT Générer des fichiers .kicad_sch hiérarchiques depuis
les en-têtes de section du CSV. ROOT est le chemin du
schématique racine à créer (ex: projet/projet.kicad_sch)
--verbose, -v Afficher les logs détaillés (debug)
--quiet, -q N'afficher que les erreurs
Le parser accepte des noms de colonnes flexibles. Voici les alias reconnus :
| Champ | Alias acceptés |
|---|---|
| Reference | reference, ref, designator, references, comment, refdes, part reference |
| Value | value, val, part value, component value, nominal, part name |
| LCSC | lcsc, lcsc part, lcsc part number, jlcpcb part, part number, mpn |
| Package | package, pkg, case/package, package size, case, size, boitier |
| Description | description, desc, name, component description |
| Quantity | quantity, qty, count, nb, qte |
Les références multiples par ligne sont supportées (ex: R1, R2, R3 dans la colonne Reference).
Reference,Value,LCSC
R1,10k,C25804
R2,100k,C25999
C1,100nF,C14663
U1,STM32F103C8T6,C8734Designator,Comment,Footprint,LCSC Part #
R1,10k,0402,C25804
C1,100nF,0603,C14663
U1,STM32F103C8T6,LQFP-48,C8734Pour utiliser --generate-sch, le CSV doit contenir des lignes de section qui décrivent l'arborescence hiérarchique des schématiques :
Reference,Value,LCSC,Package
# POWER/power.kicad_sch (LDO + BUCK-BOOST + DECOUPLING)
U4,BQ24074RGTR,C54313,QFN-16
U5,TPS63020DSJR,C15483,VSON-14
C4,10uF,C15525,0402
C5,22pF,C52923,0402
# BATTERY/battery.kicad_sch (BAT-CONNECTOR + FUEL-GAUGE)
J2,"JST-PH 2P 2.0mm (LiPo)",C295747,JST-PH-SMD-2P
U6,MAX17048G+T10,C2682616,TDFN-8
C12,100nF,C1525,0402Format de la ligne de section :
# DOSSIER/fichier.kicad_sch (BLOC1 + BLOC2 + BLOC3)
DOSSIER/fichier.kicad_sch— Chemin relatif du sous-schématique (le dossier est créé automatiquement)(BLOC1 + BLOC2 + ...)— Noms des blocs fonctionnels, affichés comme rectangles étiquetés dans la sous-feuille (optionnel)- Les lignes de composants qui suivent sont assignées à cette section
- Les valeurs contenant des virgules dans des parenthèses sont gérées automatiquement (ex:
"47k (VBAT->ADC top, option)")
L'outil génère :
- Schématique racine : contient un bloc
(sheet ...)par section - Sous-schématiques : contiennent les composants placés en grille avec espacement automatique, plus les rectangles nommés pour chaque bloc
Le CSV de sortie contient toutes les colonnes d'origine plus les informations d'import :
| Colonne | Description |
|---|---|
| Reference | Référence du composant (R1, C1, U1…) |
| Value | Valeur (10k, 100nF, STM32F103…) |
| LCSC | Numéro LCSC (C25804) |
| Package | Taille du boîtier (0402, 0603, LQFP-48…) |
| Description | Description du composant |
| Manufacturer | Fabricant (depuis l'API) |
| Datasheet | URL de la datasheet |
| Footprint | Footprint KiCad assigné (ex: Resistor_SMD:R_0402_1005Metric) |
| Footprint_Source | KiCad_Standard, EasyEDA, ou vide |
| Footprint_Created | True si le fichier .kicad_mod a été créé |
| Has_3D_Model | True / False |
| 3D_Model_Source | KiCad_Standard, EasyEDA, ou vide |
| 3D_Model_Created | True si le(s) fichier(s) 3D ont été créés |
| Symbol_Name | Nom du symbole KiCad |
| Symbol_Created | True si le symbole a été ajouté dans .kicad_sym |
| EasyEDA_Footprint | Nom brut du footprint EasyEDA |
| Status | OK, WARNING, ou ERROR |
| Warnings | Messages d'avertissement |
| Errors | Messages d'erreur |
{lib-path}/
├── {lib-name}.pretty/ # Footprints (.kicad_mod)
│ ├── STM32F103C8T6.kicad_mod
│ └── AMS1117-3.3.kicad_mod
├── {lib-name}.3dshapes/ # Modèles 3D
│ ├── STM32F103C8T6.wrl
│ ├── STM32F103C8T6.step
│ ├── AMS1117-3.3.wrl
│ └── AMS1117-3.3.step
└── {lib-name}.kicad_sym # Symboles (fichier unique)
Les passifs (R/C/L) ne créent pas de fichiers ici — ils utilisent les bibliothèques standard de KiCad (Resistor_SMD, Capacitor_SMD, Inductor_SMD).
Les résistances, condensateurs et inductances sont automatiquement associés aux footprints de la bibliothèque standard KiCad :
R1+ package0402→Resistor_SMD:R_0402_1005MetricC1+ package0603→Capacitor_SMD:C_0603_1608MetricL1+ package0805→Inductor_SMD:L_0805_2012Metric
Les modèles 3D standard KiCad correspondants sont aussi référencés automatiquement. Aucun fichier n'est téléchargé, car tout est déjà dans KiCad.
Tailles supportées : 01005, 0201, 0402, 0603, 0805, 1206, 1210, 1806, 1812, 2010, 2512
Pour les ICs, connecteurs, etc. :
- L'outil récupère les données depuis l'API EasyEDA/LCSC
- Télécharge le footprint (
.kicad_mod) dans{lib-name}.pretty/ - Télécharge les modèles 3D (
.wrl+.step) dans{lib-name}.3dshapes/ - Crée l'entrée symbole dans
{lib-name}.kicad_sym - Les fichiers existants sont ignorés sauf avec
--overwrite
L'outil détecte la taille du boîtier depuis (par ordre de priorité) :
- La colonne
Packagedu CSV - Le nom du footprint EasyEDA (ex: "C0402" → 0402)
- La description du composant
easyeda_cli/
├── main.py # Point d'entrée CLI
├── README.md
├── easyeda/
│ ├── __init__.py
│ ├── easyeda_api.py # Client API EasyEDA/LCSC REST
│ ├── easyeda_importer.py # Parse les données API → objets structurés
│ ├── parameters_easyeda.py # Modèles de données EasyEDA (Pydantic)
│ └── svg_path_parser.py # Parsing SVG pour les arcs de symboles
├── kicad/
│ ├── export_kicad_footprint.py # EasyEDA → .kicad_mod
│ ├── export_kicad_3d_model.py # OBJ → .wrl + téléchargement .step
│ ├── export_kicad_symbol.py # EasyEDA → entrée .kicad_sym
│ ├── parameters_kicad_footprint.py# Structures de données footprint KiCad
│ └── parameters_kicad_symbol.py # Structures de données symbole KiCad
└── bom_cli/
├── __init__.py
├── csv_parser.py # Parsing du CSV BOM flexible + sections
├── passive_matcher.py # Auto-match R/C/L → KiCad standard
├── easyeda_fetcher.py # Récupération données EasyEDA avec cache
├── library_manager.py # Gestion des répertoires et lib-tables
└── kicad_sch_generator.py # Génération .kicad_sch hiérarchiques
- Aucun fichier
.kicad_schexistant n'est modifié. Avec--generate-sch, de nouveaux fichiers sont créés à partir de zéro. - Les appels API EasyEDA sont limités à 1 appel toutes les 0.4s par défaut pour éviter le rate limiting.
- Les résultats API sont mis en cache en mémoire : si plusieurs lignes CSV pointent vers le même numéro LCSC, l'API n'est appelée qu'une fois.
- L'opération est idempotente : relancer la commande ne re-télécharge que les fichiers manquants.
- Le code de sortie est 0 si tout est OK, 1 si au moins un composant est en erreur.