IDEでのGPIOまわりを調査しなおしてみました。pinMode()まわりやアナログ入力のときにはどんなGPIOかを意識して利用する必要があります。種類GPIO34以降は入力専用です。PULLUPやPULLDOWNもできません。アナログ入力アナログ入力する場合にはADCに接続されているGPIOを利用する必要があります。Wi-Fiなどの無線を利用する場合にはADC2が利用できなくなります。一度でも無線を利用すると、再起動するか内部レジスタを書き換えない限りADC2は利用できないので、注意してください。タッチ入力タッチセンサーを利用できるGPIOです。タッチセンサーは無線を利用しても、利用できるGPIOが制限されません。実際に使ってみるとGPIO32とGPIO33が逆なようですが、おそらく修正されないので実験してから使ってみてください。RTCRTCは内部的なGPIOへのアクセス方法で、ULPからアクセスする場合に利用します。ADCが使えるGPIOは、RTCでも接続できます。ULPからアクセスする場合にはアナログ入力が可能であるGPIOである必要があります。RTCの端子番号の並びがGPIOとも、ADCとも違うので注意してください。PULLESP32はGPIOに対して、PULLUPとPULLDOWNを設定することができます。細かい設定はpinMode()で解説を行いますが、入力専用端子のGPIO34以降はPULL系の機能も使えないので注意してください。pinMode初期値GPIOの起動直後のピンモード設定です。Arduinoや、その他ライブラリなどにて再初期化されている場合があるので注意してください。Hi-ZINPUTデジタル入力としてLOW(0)かHIGH(1)を入力します。すべてのGPIOで利用可能です。ESP32は3.3V動作ですので、25%の0.825Vより低い電圧の場合LOWになり、75%の2.475Vより高いとHIGHになります。26%から74%までの間はどちらになるかわかりません。実測では大体50%の電圧で判定しています。閾値に近い電圧の場合には、ノイズなので入力値が変わったりするのでなるべくGNDか3.3Vかを入力されるようにしてください。未接続(フローティング)のGPIOに対して入力を行うと、端子の残っている静電気のようなものを入力してしまうので、値が信用できなくなりますので注意してください。INPUT_PULLUPINPUTと同じく、デジタル入力としてLOW(0)かHIGH(1)を入力します。入力専用のGPIO34以降のGPIOだと利用できないので注意してください。電源の3.3Vに抵抗経由で接続されている端子で、通常はHIGHの入力になりますが、スイッチなどでGNDに落とすことでLOWに変化します。未接続のGPIOでもHIGHが安定して入力することができます。通常がHIGHなので、ノイズの影響を受けにくいために利用されることがあります。INPUT_PULLDOWNINPUTと同じく、デジタル入力としてLOW(0)かHIGH(1)を入力します。入力専用のGPIO34以降のGPIOだと利用できないので注意してください。GNDに抵抗経由で接続されている端子で、通常はLOWの入力になりますが、スイッチなどで電源に接続することでHIGHに変化します。未接続のGPIOでもLOWが安定して入力することができます。通常のINPUTに比べるとノイズの影響は受けにくいです。4095の値を入力します。入力範囲はanalogReadResolution()にてADC取得解像度設定で、より荒い値に変更することができます。0は0V、4095は3.3Vに対応していますが、精度はそれほど高くないので注意して利用してください。ADCに接続されているGPIOでのみアナログ入力が可能です。GPIO32以降であればどんな状況でも利用可能です。無線を利用しない場合にはADC2に接続されている端子でも利用が可能です。GND)かHIGH(3.3V)を出力します。入力専用を除き、GPIO0からGPIO33までのGPIOで利用可能です。LOWの0Vに出力は、GPIOに接続されている端子をGNDとつなげることを意味します。外部からの電圧をそのGPIOに吸い込む方向になります。LEDなどのマイナス側をGPIOに接続して、LOWにすることでLEDを点灯させることが可能です。未接続)を出力します。入力専用を除き、GPIO0からGPIO33までのGPIOで利用可能です。HIGHのHi-Z(ハイインピーダンス)は未接続の状態です。I2Cなどで別の回路からPULLUPされている場合などにLOWを出力することでGNDに接続し、HIGHを出力した場合にはなにもしません。これは、PULLUPされている場合に3.3V出力をしても電源の無駄になるので、未接続にします。未接続GPIOに注意GPIOに何も接続していない場合に入力値が不安定になります。これはADCに静電気のような電荷が残っており、その値を取得しているため正しい値ではありません。この値は不安定で、変わることもありますし、直前に入力したGPIOの値に引きづられることもあります。接続されていないGPIOの値は読み取らないか、INPUT_PULLUPかINPUT_PULLDOWNなどで内部的に接続することで、値が安定します。ESP32のタッチセンサーは電荷をチャージして、その後入力値を取得することで、触っている場合には電荷が人に移動してLOWになったことを確認していたりします。pinMode()の未設定に注意アナログ入力の場合、pinMode()を設定していない場合、内部でアナログ入力モードに切り替わっておらず、デジタル入力相当の0か4095しか戻ってこないGPIOがあります。起動時にアナログ入力に初期化されているGPIOもあるのですが、安全のためすべてのGPIOを利用前にpinMode()の設定をすることを心がけてください。DEKOのアヤシいお部屋。関数解説アナログ入力(ADC)アナログ出力(DAC)デジタル入出力(GPIO)PWM(LEDC)タッチセンサー(touch)まとめあまり日本語でESP32のpinMode()に関する資料がありません。未設定の場合にアナログ入力が動いているように見えて、おかしな数値が戻ってくるので注意してください。GPIO34以降の入力専用GPIOはPULLUPやPULLDOWNが利用できないのもはまりやすいので注意してください。コメントをキャンセルメールアドレスが公開されることはありません。date*管理者承認後にページに追加されます。公開されたくない相談はその旨本文に記載するかTwitterなどでDM投げてください。スパム対策として、日本語が含まれない投稿は無視されますのでご注意ください。その1ESP32のGPIO入力について関連記事はこちらです。関連記事はこちらです。Themegraphy。