0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ESP32‑S3 × Python で作る小型I/Oデバイス(第6回:デバイスとしてまとめる(設計編))

0
Last updated at Posted at 2026-03-24

連載一覧

はじめに

前回(第5回)では、Python から ESP32‑S3 を安全かつ直感的に扱うための ESP32IO API(Python クラス) を実装しました。

今回はその続きとして、ESP32‑S3 を 実際の「デバイス」としてまとめる工程 を紹介します。

本プロジェクトでは、入出力回路を以下の方針で作ります。

  • DIO_OUT:NPN トランジスタによるシンク出力
  • DIO_IN:ソース入力(NPN出力のセンサ接続を想定)
  • ADC:0〜10V に対応するため、可変抵抗による分圧回路 + 保護素子
  • PWM:信号線としてそのまま出力(外部負荷は別途駆動)

これらの構成は、単なる電子工作ではなく、
工場や設備で一般的に使われる 24V 系の産業信号を扱えるようにするための変更 です。
具体的には:

  • DIO_IN にトランジスタを入れたのは、工場で一般的な NPN シンク出力(24V)を安全に受けるため
  • DIO_OUT を NPN シンク出力にしたのは、PLC と同じ方式で外部ソース負荷を駆動できるようにするため
  • ADC を 0〜10V 対応にしたのは、工場のアナログ信号(圧力・温度・流量など)に対応するため

つまり今回の回路は、ESP32 を
「工場の 24V 機器とそのまま接続できる小型 I/O モジュール」
として成立させるための設計になっています。

この方針を前提に、ケース化・配線・電源・固定方法など、
プロトタイプを 現場で使える形 に仕上げる実践的な内容をまとめます。

デバイス化

デバイス化は大きく次の 5 ステップに分けられます。

  1. 外部と接続するためのコネクタを選ぶ
  2. 電源方式を決める(USB / 外部電源)
  3. 入出力回路を設計する
  4. 基板設計・製作をする
  5. 基板を収めるためのケースを製作する

この 5 つを押さえると、「製品らしいデバイス」になります。

1. 外部 I/O の接続方式

今回のデバイスでは、DIO(シンク出力/ソース入力)、ADC(0〜10V)、PWM をケース外に引き出すため 5.08mm ピッチのターミナルブロック を使用します。

image.png

2. 電源設計(USB / 外部電源)

ESP32‑S3 は USB だけで動作しますが、工場などでよく使われる一般的なリレーを駆動したり、24V 電源系に組み込んだりするには、入出力用の外部電源が必要になります。

構成

  • 本体電源は USB 5V
  • 入出力の電源として 3.3V~24V を ±COM へ供給

3. 入出力回路の設計

本プロジェクトでは、ESP32 を使った DIO(デジタル入出力)およびアナログ入力回路を、PLC と同じ感覚で扱えること を目標に設計しています。
産業機器との接続を前提にすると、外部信号は 12〜24V 系が一般的であり、そのまま ESP32 の 3.3V ロジックに接続することはできません。
そこで本設計では、以下の理由から 入力・出力・アナログ入力のすべてにトランジスタや分圧回路を用いた“保護とレベル変換”構成 を採用しています。

■ DIO入力(ソース入力:外部シンク出力を受ける)

  • NPN シンク出力(24V)を安全に受けるための入力回路

外部の 24V シンク出力をそのまま ESP32 に入れると破損するため、
トランジスタで電圧を分離し、レベル変換と保護を同時に行っています。
image.png

項目 仕様
入力方式 ソース入力(外部 NPN シンク出力を受ける)
許容入力電圧 3.3〜24V(推奨 5V 以上)
ESP32 側ロジック HIGH:外部シンク出力 ON / LOW:外部シンク出力 OFF
保護要素 トランジスタによる電圧分離、ベース抵抗、プルアップ抵抗、ツェナーダイオードによる過電圧保護
主な目的 レベル変換、ノイズ耐性、PLC 互換論理

■ DIO出力(シンク出力:外部ソース負荷を駆動)

  • 外部の負荷(リレー・ランプなど)を安全に駆動するための回路

ESP32 の 3.3V では 24V 負荷を直接駆動できないため、トランジスタを使って電流をスイッチングし、産業機器と互換の出力方式にしています。
image.png

項目 仕様
出力方式 シンク出力(NPN オープンコレクタ)
許容負荷電圧 最大 24V(外部電源)
許容負荷電流 約 100mA 以下(2SC1815 の安全動作領域)→ 一般的な24Vリレーを駆動できる電流値
ESP32 → 出力論理 HIGH:出力 ON(シンク) / LOW:出力 OFF(開放)
保護要素 ベース抵抗、トランジスタによる電流分離
主な目的 外部ソース負荷を安全に駆動、PLC 互換論理

■ アナログ入力(0〜10V → 0〜3.3V)

  • 0〜10V アナログ信号を、ESP32 の 0〜3.3V ADC で読めるようにするための分圧回路

この回路は 0〜10V のアナログ信号を ESP32 の ADC(0〜3.3V)で読み取るための簡易分圧回路です。
固定抵抗と可変抵抗のみでスケーリングを行い、試作機向けの最低限の構成になっています。
image.png

項目 仕様
入力方式 0〜10V アナログ入力
ESP32 ADC レンジ 0〜3.3V
レベル変換方式 固定抵抗+可変抵抗による分圧
主な目的 0〜10V 産業アナログ信号の簡易測定

<⚠ 注意事項(重要)>

  • この方式は 分圧比の誤差・温度変化・可変抵抗の個体差の影響を受けやすく、精密測定には向きません
    あくまで試作機向けの簡易入力回路です。
  • 可変抵抗(RV1)の PIN1–PIN2 がほぼ短絡状態になると、分圧比が大きく変動し、ESP32 の ADC に 3.3V 以上が入力される可能性があります
  • 調整時は、入力電圧を 0V 付近から徐々に上げ、ADC が 3.3V を超えない位置で止めるようにしてください。

■ PWM出力回路(3.3V PWM出力)

  • ESP32 の PWM 信号をそのまま外部ドライバや SSR に渡すための“制御信号専用”のロジック出力

24V 負荷を直接駆動するのではなく、外部の MOSFET ドライバやリレーを制御するための 3.3V 信号として扱う構成にしています。

項目 仕様
出力方式 3.3V ロジック PWM(ESP32 直出し)
許容負荷電流 数 mA(ESP32 GPIO の仕様に準拠)
主な目的 外部ドライバ・SSR・アクチュエータの制御信号として利用

✔ 必要に応じて外部でレベル変換可能

24V PWM や大電流 PWM が必要な場合は、
MOSFET ドライバや SSR を外付けすることで対応できます。


4. 基板設計・製作

設計した入出力回路を、本プロジェクトで使用しているESP32-S3のピン配列に合わせて設計すると図のようになります。
image.png

使用ソフト : KiCad

作成したKiCadデータ : GitHub

KiCadのPCBエディターで基板設計をすると、そのデータを利用してJLCPCB などの 基板製造サービス から購入することができます。

image.png


5. ケース設計・製作

設計した基板を収めるケースはFreeCADで設計しました。
製作には3Dプリンタを使用します。

裏面にはタカチのDRP5-9Wを取り付けられる設計にしてあります。

image.png
※ESP32-S3のUSBコネクタをもう少し基板の端に寄せるべきでした…

作成したFreeCADデータ : GitHub

まとめ(今回の記事)

  • ESP32‑S3 を「デバイス」としてまとめるための工程を整理した
  • 入出力回路(シンク出力 / ソース入力 / 0〜10V ADC / PWM)の設計方針を解説
  • 基板設計(KiCad)とケース設計(FreeCAD)の流れを紹介
  • 産業用途(24V 系)を意識した回路構成の考え方をまとめた

今回は 設計編 として、デバイス化の全体像を示すところまでを扱いました。

次回:実装編(基板到着後に公開)

現在基板の納入待ちのため、基板が届いたら以下の内容を中心に 実際の製作工程 を紹介します。

実装予定の内容

  • 基板のはんだ付け
  • ケースへの組み込み
  • Python API(ESP32IO API)を使った動作確認
    • DIO_OUT(シンク)が正しく動作するか
    • DIO_IN(ソース入力)が正しく読めるか
    • ADC(0〜10V)がノイズなく読めるか
    • PWM が安定して出力されるか
    • get_io_state が正しい値を返すか

実際に組み上げた状態での写真や、動作確認のログも掲載する予定です。

次回予告(第7回)

次回は、基板が到着し次第、

  • 基板の実装
  • ケース組み込み
  • Python API を使った動作確認
  • GUI / アプリ化
  • 拡張の可能性(Wi-Fi化、ロギング)

をまとめた 実装編+応用編 を公開します。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?