はじめに

部屋の温度と湿度、それに CO2 と粉塵。「なんとなく空気が悪い気がする」を数字にしたくなって、センサーを買ってきました。ここで普通ならブレッドボードに挿して終わりなのですが、どうせ何枚も欲しくなるので基板から作ることにしました。

その基板がこれから4回にわたって出てきます。今回はその1枚目、KiCad で回路図を描いて、JLCPCB に投げて、届いた基板に全部手ではんだ付けするまでの通しの記録です。

できあがったのは 50 × 45 mm の2層基板です。ESP32-S3-WROOM-1 に I2C 1バスでセンサを3つぶら下げ、USB-C 1本で給電と書き込みをまかなっています。USB シリアル変換チップは載せていません。 0603 のチップ抵抗から USB-C レセプタクルまで、実装した21点は全部手はんだです。

USB-Cケーブルを挿して通電中の自作センサー基板。BME280とBH1750のモジュールが挿さり、奥にSEN63Cが置かれている

組み上がって動いている1枚。中央の金属シールドが ESP32-S3-WROOM-1、右が BME280、手前が BH1750、奥の黒い箱がファン内蔵の SEN63C。挿さっているケーブルは USB-C 1本だけで、給電も書き込みもこれで足りる

道中でミスも2件踏んでいて、それも後半で書きます。とはいえ大半は、部品選定から回路設計・発注・実装までをひととおり通した記録です。

🗓️ 連載「自宅センサー基盤」#1(全4回予定)

自作のセンサー基板から Grafana のダッシュボードまで、自宅の環境を測る仕組みを丸ごと作る連載です。基板 → ファームウェア → サーバー → 可視化の4回で、1枚の基板が部屋のグラフになるところまで通します。

  • 第1回 基板設計・製造(この記事)— KiCad で回路図を描いて JLCPCB に発注し、全部手はんだで組む
  • 第2回 ファームウェア — ESP-IDF でセンサ3種のドライバを自前で書き、MQTT で飛ばす
  • 第3回 サーバー — Mosquitto・Telegraf・InfluxDB の受け皿を Docker で立てる
  • 第4回 ダッシュボード — Grafana の8パネルで、部屋の空気を1画面にする
flowchart LR A["第1回 基板設計・製造
(この記事)
KiCad / JLCPCB / 手はんだ"] --> B["第2回 ファームウェア
ESP-IDF / I2Cドライバ
Wi-Fi + MQTT送信"] B --> C["第3回 サーバー
Mosquitto / Telegraf
InfluxDB"] C --> D["第4回 ダッシュボード
Grafana"]

📝 この記事でやること

  • KiCad で回路図を描いてから基板が届くまでの流れをおさらいする
  • センサー3種の選定と、温湿度が2系統重複しているという設計判断の理由
  • 回路設計のポイント(USB-C 給電・USBシリアル変換チップを載せない書き込み・I2C 1バスに3センサ)
  • JLCPCB への発注(5枚・2層・HASL)と、全21点を手はんだで組むための設計
  • 組んでから見つかった配線ミス2件と、発注前に何を見ていれば防げたのか
💡 対象読者

Arduino や ESP32 の開発ボードを使ったことがあって、「そろそろ基板を自分で作ってみたい」 と思っている方を想定しています。KiCad を触ったことがなくても読めるように、基板ができるまでの流れから説明します。


🧭 前提:KiCad と JLCPCB で「基板1枚」ができるまで

設計の話に入る前に、そもそもプリント基板を自分で作るとは何をすることなのかを整理しておきます。すでにご存じの方は次の章へ飛んでください。

KiCad — 無料で全部できる基板設計ソフト

KiCad は、回路図エディタと基板(PCB)エディタがセットになったオープンソースの EDA ツールです。個人でも商用でも無料で使え、日本語 UI もあります。この基板は KiCad 10 で設計しました。

💡 ワード解説:EDA / 回路図 / PCB

EDA(Electronic Design Automation)は電子回路設計を支援するソフトの総称。KiCad の中では作業が2段階に分かれていて、前半の回路図(schematic)で「何と何を電気的につなぐか」を決め、後半の PCB(Printed Circuit Board)で「その配線を実際の板の上のどこに通すか」を決めます。回路図では部品の位置に意味はなく、PCB では位置がすべてです。

KiCad 10 の新機能については別記事にまとめてあるので、バージョン間の差が気になる方はそちらもどうぞ → KiCad 10.0 新機能まとめ

JLCPCB — ガーバーを投げると基板が届く

JLCPCB は中国の基板製造サービスです。KiCad が吐き出したガーバーファイル(各層の絵とドリル穴の座標を書いた業界標準フォーマット)を ZIP にまとめてアップロードすると、実物の基板が届きます。個人でも数枚から試作を出せるので、日本の電子工作でも定番になっています。

全体の流れ

flowchart TD A["1. 回路図を描く
部品を置いて線でつなぐ"] --> B["2. アノテーション
R1, C1... と番号を振る"] B --> C["3. ERC
回路図の電気的チェック"] C --> D["4. フットプリント割当
部品ごとに実物の形を指定"] D --> E["5. PCB へ取り込み
ラットネストが出る"] E --> F["6. 部品配置と配線"] F --> G["7. DRC
製造ルールのチェック"] G --> H["8. ガーバー出力"] H --> I["9. JLCPCB へ発注"] I --> J["10. 部品を実装する"] style A fill:#e3f2fd style H fill:#fff3e0 style J fill:#e8f5e9
💡 ワード解説:フットプリント / ネットラベル / ラットネスト / ERC・DRC
  • フットプリント:部品1個ぶんの「銅箔パッドの形と位置」。回路図の記号(シンボル)と、基板上の実体をつなぐもの。ここがずれると、正しい回路図から間違った基板ができます
  • ネット:電気的につながっている一群の端子のこと。ネットラベルは、線を引く代わりに同じ名前を付けることで「ここは同じネット」と宣言する書き方
  • ラットネスト:PCB エディタで、まだ配線されていないネットを結ぶ細い直線。これが全部消えたら配線完了、という進捗バーの役割を持つ
  • ERC(Electrical Rules Check)は回路図側、DRC(Design Rules Check)は基板側の自動チェック。ただしどちらも「設計者の意図」は知らないので、意図と違うが電気的には成立する回路は通してしまいます

この最後の一文は、記事の後半でもう一度効いてきます。


🎯 何を測る基板か — 要件と部品選定

測りたいもの

部屋の環境として押さえたかったのは、温度・湿度・気圧・照度・CO2・粉塵(PM)の6項目です。1個のセンサーで全部は測れないので、3個に分担させました。

センサー 測るもの インターフェース 基板上の接続
BME280 温度・湿度・気圧 I2C J1(1×6 ピンヘッダ)
BH1750 照度 I2C J2(1×6 ピンヘッダ)
SEN63C PM1.0/2.5/4.0/10・CO2・温度・湿度 I2C J3(JST XH 6ピン)

3つとも I2C なので、マイコン側は SDA と SCL の2本だけで済みます。センサーはいずれも既製のモジュール基板を、基板上のコネクタに挿す形にしました。センサー本体を直付けすると、壊れたときも仕様変更のときも基板ごと作り直しになるためです。

温湿度が2系統ダブっている

上の表をよく見ると、温度と湿度が BME280 と SEN63C で重複しています。 これは設計ミスではなく、意図的にそうしています。

✅ 重複を許容して、取捨選択は受信側でやる

動機は2つあります。実利のほうと、単純な興味のほうです。

実利のほう。 SEN63C は粉塵を吸い込むためにファンを内蔵していて、自己発熱の影響を受けます。 一方 BME280 は小さく、基板やモジュール自体の熱の影響を受けます。どちらが「部屋の温度」として正しいかは、設置してみないと分かりません。

そこで基板側では判断せず、両方測って両方送り、どちらを採用するかはサーバー側で決める方針にしました。この判断が、第3回temperature_bme / temperature_sen という2系統のフィールド設計につながります。センサーを減らすより、判断を後ろに倒せる設計のほうが安いという考え方です。

興味のほう。 SEN63C は粉塵も CO2 も測れる上位のセンサで、BME280 とは値段も構造もまるで違います。その2つを同じ部屋・同じ基板に並べたら、温度と湿度がどれくらい食い違うのか。 これを見てみたい、というのが正直なところでした。片方だけ載せてしまうと、この比較は永久にできません。

同じ量を2つの方法で測ると、どちらが正しいかは分からなくても、「どれくらいずれるか」は分かります。2系統を重ねて眺めるのは第4回の Grafana からで、そこまで行って初めて答え合わせができる、という組み立てです。

MCU は ESP32-S3-WROOM-1(モジュール)

マイコンは ESP32-S3 を採用しました。ただし重要なのは「S3 を選んだ」ことより、裸のチップではなくモジュールを選んだことです。

裸のチップ(QFN56) モジュール(ESP32-S3-WROOM-1)
はんだ付け QFN。手はんだはかなり厳しい castellated(半月)パッド。手はんだで載る
アンテナ 自分で設計。インピーダンス整合が必要 モジュールに実装済み
水晶・フラッシュ・PSRAM 外付けで自分で用意 モジュールに内蔵
無線の認証 自分で取得(現実的でない) 取得済みのモジュールを選べる

個人が1枚だけ試作するなら、モジュール一択です。 実際、この基板の書き込み時にツールが報告するチップ情報は「ESP32-S3 (QFN56) rev v0.2」ですが、これはモジュールの中身のチップを見ているだけで、基板に載っているのは 18×25.5mm のモジュールです。

⚠️ モジュールでも無線認証の確認は自分の責任

モジュールを使えばアンテナ設計と各国の無線認証をモジュール側に任せられますが、購入したモジュールが技適取得品かどうかは、買う前に必ず確認してください。 同じ型名でも流通経路によって扱いが違うことがあります。

ESP32 のどのシリーズを選ぶかで迷っている方は、ESP32 シリーズの選び方に S3・C3・C6・H2・P4 の違いをまとめてあります。

部品表

KiCad のプロジェクトから拾った、この基板の全部品です。設計上は 26点で、このうち 5点は今回実装していません。 内訳は U2(SCD41)と、LED 2組ぶん(D2・D3 と、その電流制限抵抗 R8・R9)です。実際にはんだ付けしたのは 21点ということになります。

記号 部品 値・型番 フットプリント
U1 ESP32-S3 モジュール ESP32-S3-WROOM-1 専用(castellated)
U2 CO2センサ(直付け用パターン) SCD41-D-R2 10.1×10.1mm
U3 3.3V LDO LD1117S33 SOT-223
J4 USB-C レセプタクル USB 2.0・16ピン 水平・トップマウント
J1 / J2 センサ用ヘッダ 1×6 ピンヘッダ 2.54mm
J3 センサ用コネクタ JST XH 6ピン 2.50mm
J5 UART ヘッダ 1×3(GND / RX / TX) 2.54mm
S3 / S4 タクトスイッチ ALPS SKRPACE010 4.2×3.2mm SMD
D1 / D2 / D3 LED 0603 手はんだ用
R5 / R6 USB-C CC 抵抗 5.1kΩ 0603 手はんだ用
R7 / R8 / R9 LED 電流制限 1kΩ 0603 手はんだ用
R10 EN プルアップ 10kΩ 0603 手はんだ用
R11 / R12 I2C プルアップ 10kΩ 0603 手はんだ用
C1 / C2 電源デカップリング 10µF 1206 手はんだ用
C4 / C6 / C7 パスコン・EN 遅延 0.1µF 0603 手はんだ用

U2 は SCD41 を基板に直付けするためのパターンですが、この1号機では部品を載せず、空きパターンのまま残してあります。 ファームウェアが読んでいるのも J1〜J3 の3センサだけです。

LED 側も同じで、実装したのは D1 と R7 の1組だけです。D2・D3(と R8・R9)を載せなかった理由は、後述の「配線ミス②」で書きます。

✅ CO2 は「直付けの SCD41」ではなく「コネクタの SEN63C」で測る

1号機で試したかったのは SEN63C のほうです。CO2 に加えて粉塵(PM1.0〜10)と温湿度まで1個で測れるので、まずはこの1個でどこまで賄えるかを見たいというのが出発点でした。

ただし、これは試して初めて分かる類の話です。そこで U2 に SCD41 の直付けパターンも引いておきました。 SEN63C を外して U2 に SCD41 を載せれば、CO2・温度・湿度はそのまま取得できます(粉塵だけは SEN63C にしかない項目です)。どちらを選んでも成立するように、両対応で設計してあるということです。

たとえば、いちばん現実的な懸念は音でした。SEN63C はファンを回すので、部屋に置いてうるさかったら使いたくありません。 そうなったら SCD41 に切り替えればいい——という逃げ道を、基板の側に用意しておいたわけです。SCD41 の単価が高く1号機でそこまで掛けたくなかった、という事情も後押ししています。

このパターンが占めるのは 10mm 角ほどの面積です。試験基板なのだから、いろいろ試せるように作っておく。 選ばなかったほうを載せないまま終わっても、失うのはその面積だけで済みます。


🔌 回路設計のポイント

回路図の中身を、電源・書き込み・I2C・配置の4つに分けて見ていきます。まずは1枚に収まった全体像から。

ESP32-S3センサー基板の全体回路図。USB-Cレセプタクル、LD1117S33、ESP32-S3-WROOM-1、センサ用コネクタ3つ、LED3組が並んでいる

この基板の回路図1枚ぶん。左上の USB-C(J4)から LD1117S33(U3)で 3.3V を作り、右の ESP32-S3-WROOM-1(U1)へ渡す。左下がセンサ用コネクタ J1〜J3 と LED 3組で、後半で書く配線ミス2件は、どちらもこの1枚の中に写っている

電源と信号の流れだけを取り出すと、こうなります。

flowchart LR USB["USB-C
J4"] -->|"+5V"| LDO["LD1117S33
U3"] USB -->|"D+ / D-"| ESP["ESP32-S3-WROOM-1
U1"] LDO -->|"+3.3V"| ESP LDO -->|"+3.3V"| SENS ESP -->|"SDA=IO6
SCL=IO7"| SENS["I2C 1バス
J1 BME280
J2 BH1750
J3 SEN63C"] SW["S3 = EN
S4 = IO0"] --> ESP ESP -.->|"IO8 / IO10
つながっていない"| LED["D1 / D2 / D3"] style LED fill:#ffebee style USB fill:#e3f2fd

① 電源:USB-C から LDO 一段だけ

給電は USB-C 1本です。J4 の VBUS(+5V)を LD1117S33(SOT-223)で 3.3V に落とし、入出力に 10µF、モジュール脇に 0.1µF を置いています。スイッチング電源は使っていません。

USB-C レセプタクルで忘れがちなのが CC1 / CC2 のプルダウン抵抗です。この基板では R5 / R6 の 5.1kΩ を両方に入れています。

⚠️ USB-C は 5.1kΩ を入れないと給電されない

USB-C では、受電側(シンク)が CC ピンを 5.1kΩ で GND に落とすことで「私は電気が欲しい側です」と申告します。 これが無いと、USB-C 同士のケーブルで PD 対応の充電器につないだとき、電源側が相手を認識せず VBUS を出しません。

「USB-A → USB-C のケーブルなら動くのに、USB-C → USB-C だと電源が入らない」という症状は、たいていこれです。CC1 と CC2 の両方に入れる(ケーブルの裏表どちらでも効くように)のがポイント。

LDO は入出力の差がそのまま熱になります。5V から 3.3V なら 1.7V ぶんで、流れる電流を I とすると損失は次のとおりです。

P = (5.0 - 3.3) \times I = 1.7 \times I \; [\mathrm{W}]

ESP32-S3 は Wi-Fi 送信時に数百 mA まで跳ねるので、たとえば 0.5A なら 0.85W が LDO の上で熱になる計算です。SOT-223 のような放熱タブ付きパッケージを選び、その足元の銅箔を広く取っておくと効いてきます。

② 書き込み:USBシリアル変換チップを載せない

この基板には CP2102 や CH340 のような USB シリアル変換チップが載っていません。

USB-C の D+ / D- を、ESP32-S3-WROOM-1 の 13番(USB_D-)と 14番(USB_D+)に直結しているだけです。ESP32-S3 は USB-Serial-JTAG ペリフェラルを内蔵しているので、変換チップなしで PC から COM ポートとして見えます。

変換チップあり DP/DM 直結(この基板)
部品点数 +1個(+周辺部品) 0個
基板面積 必要 不要
ドライバ チップごとに要インストール OS 標準の CDC で認識
書き込み 変換チップ経由の UART 内蔵 USB-Serial-JTAG
デバッグ 別途 JTAG が必要 JTAG も同じ USB で通る

部品が減って、面積が減って、ドライバの面倒も減る。ESP32-S3 / C3 / C6 世代で基板を起こすなら、変換チップを載せる理由はほとんどありません。

冒頭の写真で基板に挿さっているケーブルが USB-C 1本きりなのは、これが理由です。給電も書き込みも、その1本で足りています。

念のため、変換チップ経由で見たい場合に備えて J5(GND / RX / TX の1×3ヘッダ) を残してあります。UART0 の TXD0 / RXD0 が出ているので、市販の USB-TTL 変換を挿せば従来どおりのシリアルも取れます。

③ I2C:1バスに3センサ、プルアップは10kΩ

I2C は SDA = GPIO6 / SCL = GPIO7 の1バスに3センサをぶら下げています。プルアップ抵抗は R11 / R12 の 10kΩ を1組だけ、基板側に置きました。

⚠️ モジュール側のプルアップと並列になる

既製のセンサーモジュールには、モジュール基板の上にすでにプルアップ抵抗が載っていることがあります。 その場合、基板側の 10kΩ と並列になって実効値が下がります。10kΩ が3個ぶん並列になれば、3.3kΩ 相当まで落ちる計算です。

100kHz 動作なら下がっても大きな問題にはなりませんが、使うモジュールにプルアップが載っているかどうかは現物を見て確認しておくと後で悩まずに済みます。I2C のプルアップ値は信号の立ち上がり時間で決まり、バスにぶら下げる数が増える(=容量が増える)ほど小さい抵抗が要るという向きも覚えておくと便利です。

I2C そのものの仕組みや、SPI・UART との使い分けについては I2C・SPI・UART の違い にまとめてあります。

④ EN / BOOT スイッチとモジュール配置

S3 が EN(リセット)、S4 が IO0(ブートモード) のスイッチです。EN には R10(10kΩ)でプルアップし、C7(0.1µF)で GND に落として、電源投入時の立ち上がりを少し遅らせています。

配置で1点だけ意識したのが、モジュールのアンテナ側を基板の端に合わせることです。KiCad の RF_Module:ESP32-S3-WROOM-1 フットプリントにはアンテナ用のキープアウト領域(銅箔・配線・ビア・部品すべて禁止)が最初から含まれていて、この基板ではその領域がほぼ基板の外側に出る位置に U1 を置いています。アンテナの下にベタ GND を敷いてしまうと飛距離が落ちるので、ここはフットプリントの設計に素直に従うのが正解です。

基板スペック

KiCadのPCBエディタで開いた基板データ。上部にアンテナ用のKEEP-OUT ZONEが表示されている

KiCad の PCB エディタで見た基板データ。上端の斜線が ESP32-S3-WROOM-1 のアンテナ用キープアウト領域で、これが基板の外へ抜ける位置に U1 を置いている。青が裏面、赤が表面の配線

項目
外形 50 × 45 mm(⌀4mm の取り付け穴 ×4)
層数 2層
板厚 1.6 mm
配線幅 信号 0.2 mm / 電源(GND・+3.3V・+5V)0.4 mm
クリアランス 0.2 mm
ビア ⌀0.6 mm / ドリル 0.3 mm
ベタ GND を表裏の両面に展開
部品点数 26(うち5点は今回未実装。実装は 21点)

配線幅もクリアランスも、JLCPCB の標準プロセスに対して十分な余裕があります。2層で足りる規模なら、無理に4層にする必要はありません。


🏭 JLCPCB発注と全手はんだ実装

ガーバーを出して投げる

KiCad の PCB エディタから、各層のガーバーとドリルファイルを出力して ZIP にまとめます。この基板で出したのは12ファイルです。

種類 ファイル
銅箔 F_Cu / B_Cu
レジスト F_Mask / B_Mask
シルク F_Silkscreen / B_Silkscreen
メタルマスク F_Paste / B_Paste
外形 Edge_Cuts
ドリル PTH(めっきあり)/ NPTH(めっきなし)
ジョブ .gbrjob

この ZIP をアップロードすると、JLCPCB 側が各層を重ねてプレビューを出してくれます。外形(Edge_Cuts)が閉じた形になっているかをこのプレビューでちゃんと見るのがコツで、ここが開いていると板が切り出せません。

何を選んで、何枚頼んだか

発注時に選んだのは次のとおりです。

項目 選んだもの
枚数 5枚
層数 / 板厚 2層 / 1.6mm
ソルダーレジスト
表面処理 HASL
💡 ワード解説:ソルダーレジスト / 表面処理(HASL・ENIG)
  • ソルダーレジスト:銅箔の上に乗る絶縁の膜。基板の「色」はこの膜の色です。パッドの部分だけ膜が開いていて、そこにはんだが乗ります
  • 表面処理:レジストが開いたパッドの銅を、酸化から守るための仕上げ。HASL(Hot Air Solder Leveling)は溶かしたはんだを吹き付けて平らにならす方式、ENIG は無電解ニッケル+金めっき。ENIG は表面が平坦で細かいピッチに強く、HASL はパッドにすでにはんだが乗っているぶん、こてを当てたときの食いつきがよいのが特徴です

この基板でいちばん端子が細かいのは USB-C レセプタクルで、BGA のような極端に細かい部品はありません。 全部を手はんだで組む前提なら、HASL は素直な選択です。

5枚あるということは、1枚目で手順を間違えても、まだ4枚残っているということでもあります。手はんだで基板を初めて組むなら、この余裕は効いてきます。

JLCPCBから届いた、部品を何も載せていない緑色のプリント基板5枚

届いた5枚。緑のソルダーレジストに HASL 仕上げなので、パッドにはすでにはんだが乗っている。シルクに見える S3 / S4 が、このあと90度回して載せることになるタクトスイッチの枠

全部、手ではんだ付けする

届いた基板には、載せると決めた 21点すべてを自分ではんだ付けしました(設計上の 26点から、U2 と LED 2組ぶんを引いた数です)。0603 のチップ抵抗も、SOT-223 の LDO も、USB-C レセプタクルも、ESP32-S3-WROOM-1 も手はんだです。

これができるのは、設計の時点で手はんだ用のフットプリントを選んでいたからです。KiCad のライブラリには、同じ 0603 でも HandSolder が付いた版があり、パッドが外側に長く伸びています。

標準フットプリント _HandSolder
パッドの長さ 部品の端子ぶん 外側に長い
こて先の当てどころ 部品の下に隠れがち 部品の脇に露出する
リフロー 最適 問題なく使える
手はんだ 難しい 明らかにやりやすい

この基板では抵抗・コンデンサ・LED をすべて HandSolder 版にしています。リフロー炉を持っていないなら、最初から HandSolder 版で設計してしまうのが素直です。

✅ 手はんだの順番は「高さ」ではなく「付けにくさ」で決めている

教科書には「背の低い部品から付けるのが鉄則」と書かれています。ただし私は、表面実装のぶんについては高さをほとんど見ていません。 見ているのは アクセス性——基板をにらんで「先にこれを付けたら、こっちにこてが入らなくなる」を1個ずつ潰していくほうです。

この基板で実際にやった順番はこうです。

  1. USB-C レセプタクル — この基板でいちばん付けづらい部品。周りに何も無いうちに片付けます
  2. ESP32-S3-WROOM-1・SOT-223 の LDO などの IC — 繊細で、位置出しに気を使うもの
  3. チップ部品(0603 / 1206) — 数は多いが、隙間があれば入る
  4. タクトスイッチなどのメカニカル部品
  5. ピンヘッダ・コネクタなどのスルーホール品ここは必ず最後

スルーホール品を最後に回すのは教科書どおりです。裏面に足が飛び出すので、先に付けると基板を平らに置けなくなります。違うのはその手前で、高さの順ではなく、他の部品に囲まれると困る順に並べています。USB-C を最初に持ってくるのは、まさにそれが理由です。

ESP32-S3-WROOM-1 のような castellated パッドの部品は、まず対角の2か所を仮止めして位置を出してから、残りを流していくと楽です。


🔍 配線ミス①:タクトスイッチの内部結線を取り違えていた

ここまでが、基板が手元で組み上がるまでの流れです。ただし、この基板は最初から動いたわけではありません。 配線ミスが2件あって、1件目はタクトスイッチでした。まず現物を見てください。

シルクの枠に対して90度回転した状態ではんだ付けされたタクトスイッチ

タクトスイッチの実装。シルクの枠に対して部品が回っていて、使われていないパッドが残っている

シルクの枠に対して、スイッチが回った状態で載っています。 空いたままのパッドも見えます。これは実装ミスではなく、そうしないと動かないから、わざとこうしたものです。S3(EN)と S4(IO0)の2個とも、この向きで載せています。

発覚:組み上げてから、動かないので調べた

気づいたのは設計中ではありません。部品をはんだ付けし終えて、USB-C をつないで、それでも基板が起動しなかったところからです。

そこから回路図と部品を突き合わせて調べていって、タクトスイッチの内部結線が、回路図の前提としていた結線と食い違っていることに行き着きました。常時導通しているペアが、そのまま GND と EN を短絡していたわけです。

つまり「データシートを読んで未然に防いだ」ではなく、動かないので調べたら出てきた、というのが実際の順番でした。以下は、その調査で分かったことを整理したものです。

何が食い違っていたのか

このスイッチは ALPS の SKRPACE010 という 4.2×3.2mm の SMD タクトスイッチです。4本足ですが、4本足のタクトスイッチは実質2端子で、内部で2本ずつ短絡されています。問題は「どの2本が短絡されているか」でした。

KiCadの回路図でのS3・S4の結線と、SKRPACE010の内部結線図

左:KiCad の回路図(1番と3番を GND に、2番と4番を EN に接続)/右:SKRPACE010 の内部結線(1番-2番が導通、3番-4番が導通)

左が回路図で、右が実物の内部結線です。前提が90度ずれています。

端子の組 回路図が前提にしていた状態 実物のスイッチ単体
1番 ‐ 2番 押したときだけ導通 常時導通
3番 ‐ 4番 押したときだけ導通 常時導通
1番 ‐ 3番 常時導通(同じ端子として使用) 押したときだけ導通
2番 ‐ 4番 常時導通(同じ端子として使用) 押したときだけ導通

回路図では、1番と3番をまとめて GND に、2番と4番をまとめて EN につないでいます。「1と3で片方の端子、2と4でもう片方の端子」という前提です。

ところが実物は 1番-2番、3番-4番が常時導通です。この前提のまま素直に載せると、常時導通している 1番と2番が、GND と EN をつないでしまいます。

ここでいう「常時導通」は、押しても押さなくても導通したままという意味です。

そして表の右列について、もうひとつ補足が要ります。右列はスイッチという部品単体の性質で、「1番-3番は押したときだけ導通」と書いてあります。ところが基板の上では、その1番と3番を銅箔が最初から GND につないでいます。 2番と4番も同じように EN につながれています。つまり 基板に載せた時点で、1番-3番も 2番-4番も常時接続です。

そこへ部品内部の 1番-2番・3番-4番の常時導通が重なると、4本の足が全部ひとつながりになります。GND から EN までの経路は GND → 1番 →(部品内部)→ 2番 → ENGND → 3番 →(部品内部)→ 4番 → EN の2本。電源を入れた瞬間から GND と EN が短絡したままです。

しかも可動接点の両側(1番と3番、2番と4番)は、すでに銅箔で結ばれています。 つまりボタンを押して接点が閉じても、もともとつながっている端子どうしがもう一度つながるだけで、回路としては何も変わりません。 押しても押さなくても同じ、という状態でした。

⚠️ これが「組んでも起動しない」の正体

EN が GND に落ちっぱなしということは、ESP32-S3 はリセット状態から一度も出てきません。「ボタンを押しても効かない」以前に、電源を入れても何も起きない基板になります。組み上げて何も起きなかったのは、これが理由でした。

S3(EN)と S4(IO0)はまったく同じ結線パターンなので、食い違いも2個そろって同じです。S4 側は IO0 が GND に固定される=常にダウンロードモードのままという状態になります。回して載せ直したのが2個ともなのは、これが理由です。

対処:部品を90度回して載せる

ずれが「90度ぶん」なので、部品のほうを90度回して載せれば、番号の対応が正しい向きに戻ります。 S3・S4 の2個とも同じ処置です。 常時導通しているペアが GND 側と EN 側にそれぞれ収まり、押したときだけ GND と EN がつながる、本来の動きになります。

代償として、フットプリントのパッド配置と部品の端子位置がぴったりは合わなくなります。だから写真のように、はんだで無理やり渡した見た目になっているわけです。基板を作り直すより早くて確実、という判断でした。この基板が現に起動していること自体が、EN が GND に落ちていない証拠です。

なぜ気づけなかったのか

原因ははっきりしていて、シンボルに内部結線の情報が入っていなかったからです。

この SKRPACE010 のシンボルは、部品検索サービスからインポートしたものでした。中身を見ると、passive 属性のピンが1・2・3・4と4本並んだだけの箱で、内部でどれとどれが短絡しているかはどこにも描かれていません。

つまり 「どの2本が常時導通なのか」は、設計者がデータシートを見て自分で決めるしかない情報でした。そこで決め方を間違えた、というのが今回の全体像です。

そして KiCad の ERC はこれを絶対に捕まえられません。 ERC が見ているのは「ピンが未接続でないか」「出力同士がぶつかっていないか」といった回路図上の整合性で、シンボルに書かれていない内部結線については何も知らないからです。

✅ 発注前にやる3つのこと(機構部品)

1. インポートしたシンボルは、必ずデータシートの内部結線図と突き合わせる 部品検索サービスのシンボルは、ピン番号と名前が合っていればそれで通用します。内部が短絡しているかどうかは表現されないことがあると知っておく。

2. 4本足のタクトスイッチは「実質2端子」だと思って扱う どの2本がペアかを確かめてから結線する。ペアの向きは部品によって違います。

3. スイッチ・コネクタ・リレーなど「機構部品」を重点的に見る 抵抗やコンデンサは間違えようがありませんが、内部構造を持つ部品はシンボルとの食い違いが起きやすい。発注前に、この種類の部品だけリストアップして1個ずつ確認するだけで、かなり防げます。


🔍 配線ミス②:GPIO制御のはずのLEDが3個とも電源直結

もう1件。こちらは実装ではなく、回路図の中で完結しているミスです。

D1・D2・D3の3個のLEDがすべて1kΩ経由で+3.3Vに接続されている回路図

LED 3個ぶんの回路図。D1(LED_POW)・D2(LED1)・D3(LED2)が、いずれも 1kΩ を介して +3.3V につながっている

見てのとおり、3個とも 1kΩ を介して +3.3V に、カソードは GND です。

D1 は LED_POW という名前のとおり電源インジケータなので、これで正解です。問題は D2(LED1)と D3(LED2 で、この2個はマイコンの GPIO で点滅させるつもりで置いた LED でした。

基板データで確認する

回路図の別の場所には、確かに GPIO 側にラベルが振ってあります。基板データからネットの接続を洗い出すと、こうなっていました。

ネット名 つながっている端子 端子の数
/LED1 U1 の 12番(IO8)だけ 1
/LED2 U1 の 18番(IO10)だけ 1
Net-(D2-A) D2 のアノード ‐ R8 ‐ +3.3V 3
Net-(D3-A) D3 のアノード ‐ R9 ‐ +3.3V 3

/LED1/LED2 は、端子が1つしかないネットでした。 マイコンのピンにラベルを付けたところで手が止まっていて、LED 側には同じラベルが付いていなかったわけです。

💡 ネットラベルは「両側に付いて初めて」つながる

ネットラベルは、同じ名前を付けた地点どうしを電気的につなぐ仕組みです。裏を返すと、片側にしか付いていないラベルは、ただの文字列でしかありません。

回路図の上では「IO8 に LED1 って書いてあるな」と読めてしまうので、目視レビューではいちばん見落としやすいタイプのミスです。

なぜ ERC も DRC もすり抜けたのか

このミスは、自動チェックの網の目をきれいに通り抜けます。

flowchart LR A["IO8 にラベル
LED1 を付けた"] --> B["ERC:未接続ピン検査
ラベルがあるので
そもそも該当しない"] A --> C["ERC:isolated_pin_label
該当するが
既定は warning どまり"] A --> D["PCB:ラットネスト
1端子だと線が出ず
配線済みに見える"] B --> Z["3つとも素通り
→ そのまま発注"] C --> Z D --> Z style C fill:#fff3e0 style D fill:#ffebee style Z fill:#ffcdd2

理由は3つ重なっています。

  1. ERC の「未接続ピン」検査には引っかからない。 IO8 にはラベルが付いているので、KiCad から見れば「何かにつながっているピン」です。実際この基板のプロジェクト設定でも pin_not_connectederror ですが、そもそも該当しません
  2. 該当するチェックはあるが、既定が警告どまり。 KiCad の ERC には「ラベルは付いているのにピンが1つしかない」を見る isolated_pin_label という項目があり、この基板のプロジェクトでも設定は warning のままでした。エラー0件を合格条件にしていると、そのまま素通りします
  3. PCB 側では、そもそも「未配線」に見えない。 ラットネストは2つ以上の端子を結ぶ線なので、端子が1つしかないネットには線が1本も出ません。 配線し忘れたネットなら「白い線が残っている」で気づけますが、このミスは最初から線が出ないため、見た目には完了しています

つまり 「配線し忘れ」より「そもそも配線を作っていない」ほうが、はるかに気づきにくいという構図です。

判断:LED は1組だけ載せて、残り2組は空きパターンにする

気づいたのは基板が届いて動かしたあとでした。GPIO で光らせたい用途が今すぐ無かったので、この基板では作り直さずに受け入れています。

とはいえ、電源に直結された LED を3個そろって光らせても意味はありません。そこで 実装したのは D1 と R7 の1組だけにしました。D1 は本来の役どころである電源インジケータとして働きます。D2・D3 と、その電流制限抵抗 R8・R9 の計4点は、部品を載せずに空きパターンのままです。

このほうが、あとから直すときにも都合がよくなります。載っていない LED を GPIO で光らせたくなったら、ジャンパ線で IO8・IO10 から引っ張ってから部品を載せればいいからです。すでにはんだ付けされた LED のパターンを剥がす必要はありません。次の版で直せばいい類のミスという整理をしています。

✅ 発注前にやる3つのこと(ネットラベル)

1. ネットラベルを使ったら、その名前が何か所に出てくるかを数える KiCad ならラベル名をクリックしてハイライトすると、同じネットが光ります。光った箇所が1つしかないラベルは、全部あやしい。

2. ERC の重大度設定を見直して、isolated_pin_label を error に上げる 既定の warning のままだと、エラー0件でも生き残ります。自分が引っかかりたい項目は、error に格上げしておくのがいちばん確実です。

3. 「マイコンで制御したい部品」を先にリスト化して、指でたどる LED・リレー・ブザーなど、GPIO につながるべき部品だけを書き出して、1個ずつ「この部品からマイコンの何番ピンまで、線が本当につながっているか」をハイライト機能で追う。5分で終わります。

📌 2件に共通していること

どちらも「回路図としては正しく、ERC も通り、DRC も通る」ミスです。

  • 配線ミス①(スイッチ) は、シンボルに書かれていない情報(内部結線)を間違えた
  • 配線ミス②(LED) は、書いたつもりの情報(ラベル)が片側にしか無かった

自動チェックが見ているのは書かれた内容の整合性であって、書かれるべき内容が書かれているかではありません。そこは今も人間の仕事です。


✅ まとめ

📌 この記事のポイント
  • ESP32-S3 で基板を起こすなら、モジュール(WROOM-1)+ USBシリアル変換チップなしが定番。DP/DM を直結するだけで書き込みもデバッグも同じ USB で通り、部品も面積も減る
  • 温湿度が2系統ダブっているのは意図的。センサーを減らすより、どちらを採用するかの判断を受信側に倒すほうが安い
  • 手はんだで組むなら、設計の時点で _HandSolder フットプリントを選び、表面処理も HASL にしておく。載せる順番は高さではなく付けにくさで決める
  • 配線ミス①(スイッチ):インポートしたシンボルには内部結線が書かれていないことがある。4本足のタクトスイッチは「実質2端子」で、どのペアが常時導通かをデータシートで確かめてから結線する
  • 配線ミス②(LED):ネットラベルは両側に付けて初めてつながる。1端子だけのネットはラットネストが出ないので、PCB 上では配線済みに見える
  • どちらも ERC・DRC を通り抜けた。 自動チェックは「書かれた内容の整合性」しか見ない。書かれるべきものが書かれているかは人間が見る

基板ができたので、次はこの基板を動かすファームウェアです。次回は ESP-IDF でセンサー3種のドライバを自前で書き、起動時に I2C バスをスキャンして3センサのアドレスをログに残し、Wi-Fi と MQTT でデータを飛ばすところまでを扱います。I2C アドレスがピン1本の配線で決まる話も出てきます。


関連記事