第3章:skidlを自分のPCで動かす
この章から手を動かします。ゴールは、skidlを自分のPCに入れて、いちばん小さな回路を1つコードで書き、ネットリストが出力されるところまでを通すことです。今回のボードそのものは、まだ作りません。まずは道具が自分の環境で動くことを確かめます。ここでつまずきやすいのは回路の中身ではなく、環境まわり(部品ライブラリの在り処)なので、そこを重点的に案内します。
3.1 skidlは何を要求するか(Python前提・ローカル実行前提)
skidlは、Pythonのパッケージです。特別なアプリではなく、あなたのPCのPythonから読み込んで使う「部品」です。したがって前提は2つだけ。Pythonが動くことと、部品の形(シンボル)を参照するためにKiCadのライブラリがPCにあることです。KiCad入門でKiCadを入れていれば、後者はもう手元にあります。
このコースはすべて自分のPC(ローカル)で動かす方針で進めます。クラウドや外部サービスに送らず、コードもネットリストも手元で完結させます。理由は単純で、そのほうが速く、確実で、何が起きているかが見えるからです。まず、作業用のフォルダを1つ決め、そこにこのコースのコードを置いていきましょう。
Pythonでは、プロジェクトごとに使うパッケージを隔離する仮想環境(venv)を作るのが定番です。こうしておくと、skidlや関連パッケージが、PC全体のPython設定を汚さずに済みます。必須ではありませんが、後々のトラブルを減らせるので、このコース専用のvenvを1つ作ってから進めることをおすすめします。作り方はお使いのOS・Python版で少しずつ違うので、Python公式の手順に合わせてください。
3.2 導入:pipでskidlを入れる
skidlの導入自体は一行です。ターミナル(コマンドプロンプト/PowerShell/シェル)で、次を実行します。
pip install skidl
入ったかどうかは、Pythonを起動して読み込めるかで確かめられます。エラーなくバージョンが表示されれば、導入は成功です。
python -c "import skidl; print(skidl.__version__)"
skidlも、それが参照するKiCadも、版が上がるごとに細かい作法が変わります。対応するKiCadのバージョン、推奨されるインストール方法、パッケージ名の細部などは、時期によって変わります。本章はいちばん素直な入れ方を示しますが、うまくいかないときは、skidl公式(PyPI/GitHub/ドキュメント)の最新の案内を必ず確認してください。この講座は「考え方」を伝えるもので、具体的な版・手順は公式が正です。
3.3 いちばんのつまずき:KiCadのシンボルライブラリの在り処
skidlで最初にほぼ全員がつまずくのが、ここです。skidlは部品(抵抗やコンデンサ)を Part("Device", "R") のように名前で呼び出しますが、その「部品の実体」はKiCadのシンボルライブラリの中にあります。skidlに「ライブラリはここにあるよ」と教えていないと、部品を呼び出せず、エラーになります。
教え方は、環境変数 KICAD_SYMBOL_DIR に、KiCadのシンボルフォルダの場所を設定するのが基本です。フォルダの場所は、OSとKiCadの入れ方によって違います。代表的な在り処を早見表にします(あくまで“よくある場所”なので、見つからなければご自身の環境で探してください)。
| OS・入れ方 | よくあるパス(例) |
|---|---|
| Windows(標準インストール) | C:\Program Files\KiCad\...\share\kicad\symbols |
| Linux(パッケージ導入) | /usr/share/kicad/symbols |
| Linux(Flatpak) | /var/lib/flatpak/app/org.kicad.KiCad/current/active/files/share/kicad/symbols |
| macOS(アプリ) | /Applications/KiCad/KiCad.app/Contents/SharedSupport/symbols |
場所がわかったら、環境変数に設定します。設定の書き方もOSで違います。
- Linux / macOS(一時的に、そのターミナルだけ):
export KICAD_SYMBOL_DIR="/usr/share/kicad/symbols" - Windows(コマンドプロンプト、一時的):
set KICAD_SYMBOL_DIR=C:\Program Files\KiCad\...\share\kicad\symbols - ずっと有効にしたいなら、OSの環境変数設定(シェルの設定ファイルや、Windowsのシステム環境変数)に登録します。
Part("Device", "R") のところで「ライブラリが見つからない」「部品が解決できない」という趣旨のエラーが出たら、ほぼ KICAD_SYMBOL_DIR の設定漏れか、パスの間違いです。回路の書き方を疑う前に、(1) その環境変数が設定されているか、(2) 指し示すフォルダが実在するか、(3) その中に Device.kicad_sym のような .kicad_sym ファイルが並んでいるか――この3点を確認してください。ここさえ設定できれば、あとで大きく詰まる所はありません。
3.4 最小回路を書いてみる(分圧器)
環境が整ったら、いちばん小さな回路を1つ書きます。定番の分圧器(抵抗2本)で、skidlの“つなぐ順に書く”感触をつかみましょう。今回のボードとは関係ない、純粋な足慣らしです。次のコードを、作業フォルダに divider.py として保存します。
from skidl import *
# 3つのネット(電気的な網)を用意する
vin, vout, gnd = Net('VIN'), Net('VOUT'), Net('GND')
# 抵抗を2本、テンプレートから作る(フットプリントは2012/0805)
r1, r2 = 2 * Part("Device", 'R', dest=TEMPLATE,
footprint='Resistor_SMD.pretty:R_0805_2012Metric')
r1.value = '1k'
r2.value = '2k'
# つなぐ順に書けば、それが結線になる
# VIN -- r1 -- VOUT -- r2 -- GND
vin & r1 & vout & r2 & gnd
# 電気的ルールチェック(つなぎ忘れ等の点検)
ERC()
# ネットリストを出力する
generate_netlist()
注目してほしいのは、まん中の一行です。
vin & r1 & vout & r2 & gnd
これだけで、「VINに抵抗r1、その先がVOUT、さらに抵抗r2、その先がGND」という直列のつながりが表現できています。第2章で見た「つなぐ順に書けば、それが結線になる」が、まさにこれです。図を描かず、関係を文章のように書き下しています。
- ターミナルで、保存したフォルダに移動します。
python divider.pyを実行します。- エラーなく終わり、フォルダにネットリストのファイル(拡張子
.netなど)ができていれば成功です。
generate_netlist() は、引数で出力ファイル名や、対象とするKiCadの版(tool=)を指定できます。どの版の指定名が使えるか、既定でどの版に向くかはskidlの版によって変わるので、ここは公式の案内に合わせてください。まずは引数なしで動かし、出力された .net ファイルを次項で覗いてみるところから始めれば十分です。
3.5 出てきたネットリストを、目で確かめる
生成された .net ファイルを、テキストエディタで開いてみてください。中身は、「どの部品の、どのピンが、どのネットにつながっているか」の一覧――第2章で話した名前の対応表そのものです。たとえば VOUT というネットのところに、r1 の片脚と r2 の片脚がぶら下がっているのが読み取れるはずです。自分が書いた一行(vin & r1 & vout & r2 & gnd)が、確かにこの対応表になっている――それが確認できれば、この章のゴールです。
コード中の
ERC() は、つなぎ忘れ・電源の衝突・出力どうしのぶつかりといった、よくある電気的なミスを機械的に洗う点検です。KiCad入門の回路図で行ったERCと、ねらいは同じもの。絵を描かなくても、コードの段階で機械に間違い探しをさせられる――これが、第2章で挙げた「コードにすると効く」点の一つでした。警告が出たら、その内容を読んで、つなぎ忘れがないかを確かめてください。
第2章で触れたとおり、skidlは書いた結線からつながりの図も出せます(SVGのつながり図や、部品とネットのグラフ)。今の分圧器で試すと、2本の抵抗がネットで結ばれた素朴な図が得られます。見た目は簡素ですが、「意図どおりつながっているか」を目で確かめるのに便利です。これらの関数名や使い方も版で変わりうるので、使ってみたいときは公式の最新ドキュメントを参照してください。ここでは「ネットリストが出せた」だけで先へ進んで構いません。
3.6 次章への橋渡し
- skidlを自分のPCに導入した(
pip install skidl→ import できた) - 最大の関門
KICAD_SYMBOL_DIRを設定し、部品が呼び出せる状態にした - 最小回路(分圧器)を
vin & r1 & vout & r2 & gndの一行で結線し、実行した generate_netlist()でネットリストを出し、中身(名前の対応表)を目で確かめたERC()で機械に間違い探しをさせた
道具が動くことを確かめました。ここまで来れば、あとは「何をつなぐか」を書くだけです。次章では、今回のボード(第1章で決めた、電源部つきのCH32V003ボード)の結線を、コードで書き下します。基本形の結線と、新しく足した電源部(VIN_5V)を、この分圧器と同じ要領で組み上げ、ネットリストを作り、機械に検算させます。足慣らしは終わり。次は本番のボードです。