ESP8266-01ピンとLEDの使用方法

2018年7月1日に更新-GPIO0を出力として使用する場合の再プログラミングに関する注記を追加。

ESP8266-01 LEDを表示するために2018年4月2日に更新されました。 これらのLEDは、接続されているピンから制御できます。

前書き

ESP8266-01は、非常に低コストのWiFi対応チップです。 ただし、I / Oは非常に限られています。 一見、プログラミング用に構成すると、すべてのピンが使用されます。

この説明可能なビルドは、ESP8266 GPIO0 / GPIO2 / GPIO15ピンの使用に基づいており、次のESP8266-01プロジェクトで使用可能な4つの入力/出力を取得する方法と、IC2を使用してさらに入力を取得する方法を示します。

ここでのコードは、//github.com/esp8266/arduinoのボードマネージャーによるインストールで説明されているように、Arduino IDEセットアップを使用してモジュールをプログラミングしていることを前提としています。 Tools→BoardメニューからBoards Managerを開き、Type Contributedを選択してesp8266プラットフォームをインストールします。

これらの手順は、www.pfod.com.auのESP8266-01 Pin Magicからも入手できます。

ステップ1:ESP8266-01ピン

ESP8266-01は最小のESP8266モジュールであり、8ピンのみです。 これらのVCC、GND、RST(リセット)およびCH_PD(チップセレクト)はI / Oピンではありませんが、モジュールの動作に必要です。 これにより、GPIO0、GPIO2、TX、およびRXは可能なI / Oピンとして使用可能になりますが、これらにも事前に割り当てられた機能があります。 GPIO0およびGPIO2は、モジュールが起動するモードを決定し、TX / RXピンはモジュールのプログラミングと、一般的にデバッグに使用されるシリアルI / Oに使用されます。 GPIO0およびGPIO2には、モジュールが正しく起動するようにプルアップ抵抗を接続する必要があります。

ステップ2:ESP8266プログラミングのヒント(espcomm Failed)

Arduino IDEを使用してESP8266をプログラミングする場合(ESP8266-01 Wifiシールドを参照)、Arduino IDEで次のようなエラーメッセージが表示されることがあります:
esp_comのオープンに失敗しました
エラー:COM33を開けませんでした
エラー:espcomm_openが失敗しました
エラー:espcomm_upload_memが失敗しました

その場合、次の手順に従って動作させてください:

  1. Arduinoの[ツール]メニューでESP8266ボードが選択されていることを確認してください
  2. Arduinoの[ツール]メニューでCOMポートを選択したことを確認してください
  3. GPIO0を接地した状態でESP8266の電源を入れ直します(クリーンパワーアプリケーション、以下を参照)
  4. 3)解決しない場合は、USBケーブルをコンピューターから取り外し、数秒待ってから再び接続します
  5. 4)で解決しない場合は、PCからUSBケーブルを差し込み、Arduino IDEを閉じ、Arduino IDEを開き、USBケーブルを再び差し込みます。

ESP8266に電源を印加する場合、GPIO0を接地した後、きれいに印加されていることを確認してください。 接続を揺らさないでください。 ESP8266 ledは、点滅することなく点灯し続けます。

ステップ3:ベストトリック– I2Cを使用する

ESP8266-01に追加の入力を取得するための最善の方法は、I2Cインターフェイスを使用することです。

1つの選択肢は、GPIO0およびGPIO2をI2Cバスとして使用することです。

モジュールを正常に起動するために必要なプルアップ抵抗は、I2Cバスプルアップ抵抗とバス上の他のスレーブコンポーネントがオープンコレクターであり、電源投入時にバスをプルダウンしないため、2倍になることがあります。 ただし、場合によっては、スレーブ、特にバッテリーバックアップを備えたスレーブがスタックし、バスが停止することがあります。 そのような場合、ESP8266がブート段階を完了するまでバスを分離する必要があります。

I2CバスにTXとRXを使用すると、この問題を回避できます

注意すべき点がいくつかあります。

  1. GPIO1(TX)はデータラインとして使用されます。これは、電源投入時に常にGPIO1でデバッグ出力が得られるためです。 この出力を抑制する方法はありませんが、クロックライン(RX)はHighに保持されるため、このデータはスレーブにクロックされません。
  2. ESP8266をプログラミングするとき、RXラインはプログラマーの出力に接続されます。 プログラミングの最後に、ESP8266が再起動し、330保護抵抗器がRXがプログラマーの出力ドライブを短絡するのを防ぎます。
  3. I2Cシリーズ抵抗は、TX、RXをI2Cバスの短絡から同様に保護します

ESP8266は3.3Vデバイスなので、3.3V I2Cスレーブを使用することが望ましいです。 すべてではありませんが、多くのI2Cデバイスは最近3.3Vです。 「一般に、1つのデバイスが別のデバイスよりも高い電圧にあるシステムでは、2つのデバイスをレベルシフト回路なしでI2C経由で接続することが可能です。 トリックは、プルアップ抵抗を2つの電圧の低い方に接続することです。」 (SparkFun I2Cチュートリアル)5Vデバイスと3.3Vデバイスが混在する場合、上記のようにプルアップ抵抗を3.3Vラインに接続します。

I2Cを使用することは、ESP8266-01にマルチチャネルA-Dコンバーターを追加する優れた方法であり、基礎となるモジュールの単一のADC入力を公開しません。 たとえば、Adafruit 12ビットI2C 4チャンネルADCを使用するか、アナログ出力にSparkFunのI2C DACブレイクアウト– MCP4725ボードを使用します。 I2Cバスでは、他の多くのタイプのセンサーも利用できます。

I2Cの問題を解決するための詳細については、// www.i2c-bus.org/i2c-primer/common-problems ...を参照してください。 バスをクリアするための簡単な方法については、I2CバッテリーバックアップRTCの信頼性の高いスタートアップも参照してください。

ステップ4:出力にGPIO0 / GPIO2を使用し、入力にRXを使用する

WiFi接続を介してデバッグメッセージを送信できますが、多くの場合、TX接続を使用すると便利です。 次の例は、GPIO0とGPIO2を出力として、RXを入力として使用する方法を示しています。

を使用して
Serial.begin(115200、SERIAL_8N1、SERIAL_TX_ONLY);
RXを汎用入力(または別の出力)として使用しながら、デバッグメッセージをシリアルに書き込むことができます。 繰り返しますが、RXプログラマーの330Ω抵抗は、フラッシュプログラマーに接続され、プログラマーのドライバーの短絡を防ぎます。 注:ESP8266をプログラムするには、S1が開いている必要があります。

GPIO1およびRXはGPIO3であるため、スケッチからTXピンにアクセスできます。

GPIO0を出力として使用する場合の再プログラミング方法

注:GPIO0は、プログラミングモードに入るために接地する必要があります。 スケッチがそれを高く駆動している場合、接地するとESP8266チップが損傷する可能性があります。 コードがGPIO0出力を駆動するときにESP8266を再プログラムする安全な方法は、次のとおりです。
a)ボードの電源を切ります
b)GPIO0をgndにショート
c)GPIO0のショートのためにプログラムモードになるボードの電源を入れます
d)GPIO0からショートを削除して、プログラムの実行時に出力がショートしないようにする
e)ボードを再プログラムする
f)必要に応じてボードの電源を入れ直します。

ステップ5:別のトリック-GPIO0 / GPIO2を使用してリレーを駆動し、プッシュボタンを読み取る

ピンを構成する別の方法を次に示します。 注:このトリックは、絶縁入力(N1およびN1-com)を備えたリレーモジュールがある場合にのみ機能します。 この制限とサポートコードの複雑さのため、入力としてRXを使用する前の例が望ましいです。

ESP8266のGPIO0 / GPIO2 / GPIO15ピンの使用では、GPIO0 / GPIO2を一緒に使用して追加の入力を取得する方法について既に説明しました。 ここでは、その例を拡張して、GPIO0をリレードライバー出力として、GPIO0 / GPIO2を入力として使用します。

これは、PDF形式の回路図です。

ここで、GPIO0はリレーを駆動するための出力として使用され、GPIO0 / GPIO2は瞬間的なプッシュボタンを読み取るための入力として使用されます。接続。 一時的なプッシュボタンは、電源が入っているときに押すと、設定モードを有効にするためにも使用されます。

ここでのコツは、ESP8266モジュールの初期化中にGPIO0とGPIO2をハイに保ちながら、これらすべてを行うことです。

プルアップ抵抗R1およびR3は、これら2つのピンに必要なHighを提供しますが、GPIO0およびGPIO2に接続された追加の回路がピンをLowにプルできないようにする必要があります。 光絶縁リレーは、+ 3.3VとGPIO0の間に接続されています。 これにより、起動時にGPIO0がハイに保たれますが、起動後にGPIO0を出力にして、リレー入力を接地してリレーを動作させることができます。 モジュールの初期化中にモーメンタリプッシュボタンを操作しても、GPIO0がGPIO2に接続され、これらの両方がプルアップ抵抗に接続されるだけなので、問題ではありません。

構成モードの検出

ESP8266を一時的なアクセスポイントとして使用すると、ここで説明するようにWebページを介して構成できます。 そのプロセスの一部は、起動時にプッシュボタンまたはショートリンクを使用して、設定モードに入ることをソフトウェアに指示することです。

ESP8266モジュールが初期化されると、 setup()コードが実行されます 。 そのコードでは、瞬間的なプッシュボタンが押されたかどうかを検出するために、プッシュボタンにGNDを供給するためにGPIO0をローにしてから、GPIO2入力をチェックしてローかどうかを確認する必要はありません。 このチェックの副作用は、ユニットが設定モードになっているときにリレーが常に動作することです。 リレーが作動したら、その時点で入力が検出されているため、プッシュボタンを放すことができます。 setup()でこれを行うサンプルコードを次に示します。

 boolean configMode = false; //通常は設定モードではありませんvoid setup(){pinMode(0、OUTPUT); digitalWrite(0、LOW); // GPIO0出力を低くする// GPIO2入力をチェックして、押しボタンが押されてGPIO0に接続するかどうかを確認するconfigMode =(digitalRead(2)== LOW); if(configMode){// APを起動し、構成Webページを提供する準備を整える//リレーをオンにして構成モードで示す// ......} else {//通常の使用// GPIO0をHIGHにしてオフにするリレーdigitalWrite(0、HIGH); // .....} // setup()の残り} 

手動オーバーライドプッシュボタンの検出

前のセクションでは、電源投入時に設定モードを有効にするためにプッシュボタンが押されたときの検出について説明しました。 また、WiFiリンクを介してリレーを制御できることに加えて、リレーをオンおよびオフにするための手動オーバーライドとしてそのプッシュボタンを使用したいと考えています。

ここでは、リレーのWiFi制御については説明しませんが、pfodAppを使用して簡単に実行できます。 ESP8266モジュールのpfodDesignerでArduinoコードを生成する方法については、OLIMEXメニュージェネレーターを参照してください。

このセクションでは、プッシュボタンが押されたことを検出する方法を説明します。これは、ユーザーがリレーを切り替えることを示します。つまり、リレーがオンの場合はオフにし、オフの場合はオンにします。 回路図は上記と同じで、すべてのトリックはコードにあります。 考慮すべき2つのケースがあります。

  1. リレーがオフであり、ユーザーがプッシュボタンを使用してオンにしたい場合、
  2. リレーがオンであり、ユーザーがプッシュボタンを使用してオフにしたい。

リレーがオフになっており、ユーザーがプッシュボタンを使用してオンにしたい。

この場合、GPIO0の出力はHIGHです。 この場合、実際にはGPIO0を入力にすることができます。これは、プルアップ抵抗R1によってリレーがオンにならないようにするためです。 それがトリックです。 この場合、GPIO0を入力にし、GPIO2出力をLOWにしてから、ユーザーがプッシュボタンを押すと、次の2つのことが起こります:-a)プッシュボタンを介してGPIO2によって提供されるグランドのためにリレーがオンになり、b)入力GPIO0はローになります。 コードは入力GPIO0の状態をチェックし、LOWになると、コードは使用がプッシュボタンを押し、リレーをオンにすることを知っています。 次に、コードはGPIO0を出力LOWにして、プッシュボタンが放されたときにリレーをオンに保ちます。

リレーがオンであり、ユーザーがプッシュボタンを使用してオフにしたい。

この場合、上記のケースに続き、GPIO0はリレーをオンに保持する出力LOWです。 この場合、GPIO2を入力(R3でプルアップ)にし、ユーザーがプッシュボタンを押すと、入力GPIO2はGPIO0のLOW出力によってLOWになります。 使用によりプッシュボタンが解放されると、コードはLOWからHIGHへの遷移を検出し、GPIO0を入力にし、プルアップ抵抗R1によりリレーを解放し、GPIO2を上記のケースi)に設定するために出力LOWにします。

もう一つのトリック。 ケースii)の場合、LOWからHIGHへの遷移を検出してリレーをオフにする入力としてGPIO2が必要です。 ただし、GPIO2を作成し、ケースi)の最後に入力すると、ユーザーが押したばかりのプッシュボタンを放してリレーをオンにすると、LOWからHIGHへの遷移が発生します。 すぐにリレーがオフにならないように、リレーをオンにした押しボタンをユーザーが放しただけなので、リレーをオンにした後の最初のLOWからHIGHへの遷移は無視されます。

リレー手動オーバーライドのサンプルloop()コード

このコードでは、簡単にするためにスイッチのデバウンスを無視しています。 実際のアプリケーションでは、入力をデバウンスする必要があります。

サンプルコードはESP8266_01pinMagic_1.inoです。

繰り返しますが、これにより、TX / RXピンはシリアルデバッグまたは他のI / Oとして使用可能になります。

結論

このページでは、ESP8266-01で利用可能な限られたピンを最大限に活用する方法を示します。 GPIO0 / GPIO2をI2Cバスとして使用すると最大の拡張が得られますが、プロジェクトでI2Cを使用しない場合でも、GPIO0 / GPIO2を使用してリレーを駆動し、プッシュボタン入力を検出できます。 いずれの場合も、TX / RXはシリアルデバッグにも使用できます。または、WiFiリンクを介してデバッグ印刷ステートメントを送信する場合、これらのピンは一般的なI / Oにも使用できます。

関連記事