概要
今回はGPIOの説明。自作機器には重宝するGPIOですが幾つかのポートには制限が有ります。その辺も含めて
説明して行きます。
GPIOポート一覧
CPUの起動時またはリセット時の状態
- CPUの起動時またはリセット時の状態が右側から2列目の "Reset" の列に有ります。
| 記号 | 状態 |
| 0 | IE=0 input disabled |
| 1 | IE=1 input enabled |
| 2 | IE=1 WPD=1 input enabled, pull-down resistor |
| 3 | IE=1 WPU=1 input enabled, pull-up resistor |
- 自作機器を製作する上でこの情報が重要になります。
- 例えば自作機器で電源投入時どうしてもLowにしたい場合
- 3: は避ける。リセット時 High になるから
- 1: も避ける。入力設定だが状態が分からない
- 0: も避ける。入力設定ではないから
- そう考えると何もせずに使えるの "2" のみとなる。
- でも他のピンも手を加えれば使える。
- 3: ピンとGNDを約1kΩ位いの抵抗で繋ぐ。GPIO3はプルアップされている。その抵抗は数十Ωよって1kΩでGNDに繋げば Low になる。
- 1: プルアップ抵抗が無いが、同じ様に GND とピンを1kΩ位で繋げば Low になる。
- 0: 入力設定ではない(input disabled)でも Output とは書いていない。これらも
抵抗で行けそうに思えるが試していない。
ESP32起動後は一部のポートを除いて入出力の設定が出来る。
- 設定関数:pinMode(uint8_t pin, uint8_t mode)
| 引数 | 詳細 |
| uint8_t pin | 設定したいピン番号を指定 |
| uint8_t mode |
- INPUT: 入力状態。不安定
- INPUT_PULLUP: 入力状態(内部プルアップ有り)初期値:High
- INPUT_PULLDOWN: 入力状態(内部プルダウン有り)初期値:Low
- OUTPUT: 出力状態
|
- ポート入力関数: digitalRead(uint8_t pin)
- 引数: ポート番号
- 戻り値: 1 or High / 0 or Low
- ポート出力関数: digitalWrite(uint8_t pin, uint8_t val)
| 引数 | 詳細 |
| uint8_t pin | 出力したいピン番号を指定 |
| uint8_t val |
- 1 or High :ピンから3.3Vを出力します。
- 0 or Low :ピンを0V(GND)に落とす
|
- GPIO 34, 35, 36, 39は入力専用
- プルアップ・プルダウンが無いピン
- 使用時は外付けのプルアップ・プルダウン抵抗を付けないと値が安定しない
ストラッピングピン(注意が必要なピン)
ESP32には起動時の動作モードを決定するためのストラッピングピン(GPIO 0, 2, 5, 12, 15)があります。
これらのピンはリセット時に内部抵抗によって特定の状態に固定されています。
| ピン番号 | リセット時のデフォルト | 役割(起動時) |
| GPIO 0 | 内部プルアップ | LOWだと書き込みモードになる |
| GPIO 2 | 内部プルダウン | 起動のログ出力などに関係 |
| GPIO 5 | 内部プルアップ | SDIOのタイミング制御など |
| GPIO 12 | 内部プルダウン | フラッシュ電圧(3.3V/1.8V)の決定 |
| GPIO 15 | 内部プルアップ | ログ出力の有効/無効 |
ブート時のモードの設定
- MTDI(GPIO12):Flash電圧の設定。デフォルト 0
- 書き込み/実行の切り分けは GPIO0と2で行う
| GPIO0 | GPIO2 | 起動モード |
| 0 | 0 | Download Boot(プログラム書き込みモード |
| 1 | 0 | SPI Flash Boot(書き込まれたプログラムを実行) |
| 0 | 1 | 無効。通常使用しない。 |
| 1 | 1 | SPI Flash Boot(書き込まれたプログラムを実行) |
- GPIO5/MTDO(GPIO15):SDIOスレーブとしての動作やデバッグログの出力設定
| GPIO5 | GPIO15 | 起動モード |
| 0 | 0 | 起動時のログ出力が抑制されます。 |
| 1 | 0 | 起動時のログ出力が抑制されます。 |
| 0 | 1 | SDIO設定 |
| 1 | 1 | Default。起動時のログが出力。 |
- GPIO 0,2,5,12,15の設定。
- プログラム書込: 0,0,1,0,1
- プログラム実行: 1,0,1,0,1
- 書込/実行の切り替え
- GPIO0以外のポートはリセット時のDefault値
- GPIO0の値を変えてモードを選択する。
これ以外で気を付けたいポート
| GPIO No. | 説明 |
| 1,3 | シリアル通信に使用 |
| 6,7,8,9,10,11 | ESP内部で使用 |
| 16,17 | ESP32-WROVER moduleでは使用出来ない。 (内部で使用) |
最後に
ESP32は多くのGPIOポートを持ってますが、専用用途、初期設定、内部使用等の関係で
ユーザが自由に使えるポートが以外と少ないです。でも最近は SDカード、 LCD 等は SPI で
温度測定等は I2C と専用のインターフェイスが有るのでそれらを利用すればユーザが
自由に使えるポートだけでも色んな事が出来ます。