e-DIY
ノウハウ

ArduinoスケッチでESPをオープンドレイン出力させる方法

オープンドレイン

ラズパイだとGPIOのオープンドレイン出力はできなさそうでしたが、Arduinoでは簡単にできるようです。
今回は、ArduinoスケッチでESP WROOM02のGPIOをオープンドレイン出力させて見たいと思います。

オープンドレインとは

通常、GPIOの出力はCMOS出力とかプッシュプル出力とか呼ばれる形式になっています。
回路図で描くとこうなります。

CMOS出力

上側のMOSスイッチがオンすると出力がHigh(3.3V)に、下側がオンするとLow(0V)になります。

オープンドレインは、下側のMOSだけがある状態です。
MOSのドレインがどこにも繋がっていないのでオープンドレインと言われます。

オープンドレイン

MOSがオンすればLow、オフすればハイインピーダンスとなります。

オープンドレインの用途

  • レベルシフト
  • ワイヤードOR
  • 信号の割り込み、リセット

などがあります。

レベルシフト

High電圧を異なる電圧に乗り換えて、出力先のデバイスに合わせることができます。

レベルシフト

ESPの場合、電源電圧(3.3V)より高い電圧へのレベルシフトはできません。
電源側へ電流が回り込んで、最悪破壊してしまいます。

ワイヤードオア

複数のオープンドレインを接続してNORを構成することができます。

ワイヤードOR

マイコンの場合、ワイヤードORを使うメリットはほとんど無いかと思います。

コチラの記事が参考になります。

外部サイトワイヤードORとは?回路例と禁止されている接続方法

信号の割り込み、リセット

電圧をモニタしている箇所へ接続し、異常時などのトリガーでオープンドレインをオンさせて強制的にLowにさせることができます。

オープンドレイン

工作で使うことは無いと思いますが、製品開発でフェールセーフの論理を組む時などにはよく使います。

コードの書き方

pinModeをOUTPUT_OPEN_DRAINにすることでオープンドレイン出力にすることができます。

10msごとにオン・オフを繰り返すスケッチを書いてみました。

#define OD_PIN 14
void setup() {
    pinMode(OD_PIN, OUTPUT_OPEN_DRAIN);
}
void loop() {
    digitalWrite(OD_PIN, LOW);
    delay(10);
    digitalWrite(OD_PIN, HIGH);
    delay(10);
}

LOWでMOSがオンとなって出力がLOW、HIGHでMOSがオフとなって出力がHi-Zとなります。

回路図、接続図

出力がオープンドレインになっていることを確かめるために、このような回路で電圧をモニタします。

オープンドレインの動作確認

オープンドレインになっていれば、High電圧は1.65Vになるはずです。
もしCMOS出力のままなら、High電圧は3.3Vになります。

オシロで波形を確認すると、このようにHigh電圧が1.65Vになっていたので、オープンドレインになっていることを確認できました!

オシロ波形

関連キーワード

フリーワード検索