ESP8266-01は、IOTプロジェクトに対するすべての渇望を和らげる優れたモジュールです。リリース以来、強力なコミュニティを開発し、使いやすく、安価で強力なWi-Fiモジュールに進化しました。はるかに人気のあるもう1つのオープンソースプラットフォームはArduinoであり、すでに多くのプロジェクトが構築されています。これら2つのプラットフォームを組み合わせると、多くの革新的なプロジェクトへの扉が開かれるため、このチュートリアルでは、ESP8266-01モジュールをArduinoとインターフェースする方法を学習します。このようにして、Arduinoとインターネットの間でデータを送受信できるようになります。
このチュートリアルでは、ESP8266-01でAPIを使用して、インターネットから時刻、日付、温度、湿度を読み取ります。次に、これらの値をArduinoボードに送信し、16 * 2LCD画面に表示します。かっこいいですね!それでは始めましょう。
必要な材料:
- Arduinoボード(任意のバージョン)
- ESP8266-01
- 3.3Vオプション付きFTDIプログラマーボード
- 16x2 LCD
- ポテンショメータ
- ボタンを押す
- 接続線
- ブレッドボード
どうやって動くか?
飛び込む前に、これが実際にどのように機能するかを知ることが重要です。基本的に、ESP8266-01モジュールから始める必要があります。Arduino IDEを使用してESP8266をプログラムし、APIを使用してhttpリクエストを介してJSONファイルを読み取るようにコードを記述します。次に、このJSONファイルを表現して、完全なJSONファイルから必要な情報のみを抽出します。
情報が表現されたら、シリアル通信を使用して印刷します。これらのシリアルラインはArduinoに接続され、ArduinoはESP8266から送信された情報を読み取ることができます。情報が読み取られて処理されると、LCD画面に表示されます。
これを完全に理解していなくても大丈夫です。このチュートリアルの残りの部分でも同じことを学習します。
ESP8266-01のプログラミング:
このチュートリアルは、ESP8266モジュールの経験があることを前提としています。そうでない場合は、次の3つのチュートリアルを読んで、完全に理解することをお勧めします。
- ESP8266-01の使用を開始する
- ATコマンドを使用したESP8266-01のプログラミング
- ArduinoIDEを使用したESP8266-01のプログラミングとそのメモリのフラッシュ
ここですべてのESP8266プロジェクトを確認することもできます。
ここでは、ArduinoIDEを使用してESP8266-01モジュールをプログラムします。ハードウェアについては、3.3VのFTDIボードを使用してESP8266をプログラムしています。これにより、ハードウェアが非常にシンプルになります。ESP8266をFTDIボードに接続するための回路図を以下に示します。
以下の条件が満たされていることを確認してください
1. ESP8266-01は3.3V耐性のみであり、5Vは使用しないでください。したがって、FTDIは3.3Vモードでのみ設定してください。
2. GPIO_0は、プログラミングモード用に接地する必要があります
3.リセットピンはボタンを介してグランドピンに接続する必要があります。このボタンは、コードをアップロードする直前に押す必要があります。ボタンを押すたびに、ESP8266-01モジュールの青いLEDが点灯し、モジュールがリセットされたことを示します。
接続が完了したら、Arduino IDEを開き、サンプルプログラムを正常にアップロードできるかどうかを確認します。Arduino IDEを使用してプログラムをESP8266にアップロードする方法がわからない場合は、Arduinoを使用したESP8266のプログラミングに従って学習してください。この時点で、まばたきプログラムが正常にアップロードされたと思います。
。完全なプログラムは、このページの最後のさらに下にあり、小さなスニペットとして説明しています。このプログラムでは、コンパイルするためにArduino JSONライブラリも必要です。したがって、ライブラリをArduino IDEにまだ追加していない場合は、GithubのArduinoJSONライブラリからダウンロードして追加してください。
ESP8266は、日付、時刻、温度、湿度に関するデータを取得するためにインターネットに接続する必要があります。したがって、以下の行でSSIDとパスワードを証明して、Wi-Fiへの接続を許可する必要があります
const char * ssid = "JIO-Fi"; // Wi-FiSSIDを入力しますconstchar * password = "Pas123"; // Wi-Fiパスワードを入力します
setup() 関数内で、ESPがWi-Fiに接続できるかどうかを確認し ます。 接続できない場合は、シリアルモニターに「Connecting..」と出力するだけで永久に待機します。
while(WiFi.status()!= WL_CONNECTED){// Wi-Fiが接続されるまで待機 delay(1000); Serial.print( "Connecting.."); //接続が確立されるまで接続を印刷します }
次のステップは非常に重要なステップです。Wi-Fi接続が成功した場合、インターネットからJSONファイルを読み取るためにhttpgetリクエストを呼び出す必要があります。このチュートリアルでは、wunderground.comが提供するAPIを使用しています。したがって、同じものを使用することを計画している場合は、リンクにアクセスして無料のAPIキーにサインアップするか、任意のAPIを使用できます。APIを完成させると、次のようなリンクが表示されます。
注:このリンクのAPIキーを変更したため、これは機能しません。APIキーを保護し、共有しないでください。
ここでの私のAPIは、チェンナイの気象データを取得するために使用されます。任意のAPIを使用できます。ただし、任意のブラウザにAPIをロードすると、JSONファイルが返されます。たとえば、私のAPIは次のJSONファイルを返します
異なるデータを含むファイルが返される場合があります。このJSONファイルがESP8266でも受信されているかどうかを確認するには、次の行を使用して、JSONを読み取り、シリアルモニターに出力します。
int httpCode = http.GET(); //取得リクエストを渡す if(httpCode> 0){//返されるコードを確認する //ペイロード= http.getString(); //デバッグ用に値をvaribalePayloadに保存します//Serial.println(payload ); //デバッグ用のペイロードを出力します。それ以外の場合は両方の行にコメントします
これらの行はテストにのみ必要なので、コメントしました。ESP8266がJSONデータを取得できることを確認したら、データを表現します。ご覧のとおり、このデータは膨大であり、日付、時刻、温度、湿度など、私たちに必要な値を除いて、ほとんどの値は役に立ちません。
そのため、JSON Arduinoライブラリを使用して、必要な値を分離し、変数に格納します。これが可能なのは、JSONファイルの値が名前と値のペアとして割り当てられているためです。したがって、この名前は、必要な値を保持する文字列です。
これを行うには、JSONファイルを分析してArduinoコードを提供するWebサイトに移動する必要があります。はい、それはそれと同じくらい簡単です。https://arduinojson.org/assistant/に進み、ブラウザにロードしたJSONファイルを貼り付けてEnterキーを押します。完了すると、私のものは以下のようになりました
少し下にスクロールすると、自動的に作成されるフレージングプログラムが表示されます。
あなたがしなければならないで、あなたがしたい変数を選択してコピーし、ArduinoのIDEに貼り付け、私がここで行われているように、
/ * JSONライブラリを使用したデータのフレーズ化* / // https://arduinojson.org/assistant/を使用して、JSON文字列のフレーズ値を取得しますconst size_t bufferSize = JSON_OBJECT_SIZE(0)+ JSON_OBJECT_SIZE(1)+ JSON_OBJECT_SIZE(2) + 2 * JSON_OBJECT_SIZE(3)+ JSON_OBJECT_SIZE(8)+ JSON_OBJECT_SIZE(12)+ JSON_OBJECT_SIZE(56)+ 2160; DynamicJsonBuffer jsonBuffer(bufferSize); JsonObject&root = jsonBuffer.parseObject(http.getString()); / *フレージングデータの終了* ///値sinを目的の変数にアドレス指定します JsonObject¤t_observation = root; // current_observationの下で JsonObject¤t_observation_observation_location = current_observation; // observation_locationの下 constchar * current_observation_station_id = current_observation; // "ICHENNAI1" //ロケーション詳細を取得 const char * current_observation_local_time_rfc822 = current_observation; //現地時間//現地時間を取得 constchar * current_observation_temperature_string = current_observation; // "90.7 F(32.6 C)" //温度値を取得 constchar * current_observation_relative_humidity = current_observation; // "73%" //湿度値を取得
変数 current_observation_station_id、current_observation_local_time_rfc822、current_observation_temperature_string、current_observation_relative_humidityを コピーしました。LCD画面にはこれら4つのデータのみを表示する予定です。
最後に、インターネットから必要なデータを取得し、快適に使用できる変数として保存しました。これらのデータをArduinoに送信するに は、シリアルモニターを介してシリアルに書き込むだけです。次の行はまったく同じことをします
//シリアルモニターを介して変数を出力します Serial.print(current_observation_station_id); //場所の詳細をArduinodelay (100);に 送信します//安定性の遅延Serial.print(current_observation_local_time_rfc822); //現地時間の詳細をArduinodelay (100);に 送信します//安定性の遅延Serial.print(current_observation_temperature_string); //温度の詳細をArduinodelay (100);に 送信します//安定性の遅延Serial.print(current_observation_relative_humidity); //湿度の詳細をArduinodelay (100);に送信します//安定性の遅延
私が使用していることに注意してください Serial.print() とない Serial.println() コマンド以来 Serial.println()は、 私たちのために必要とされていないデータと一緒に/ n、および/ Rを追加します。また、ESPがこれらの値を10秒間隔でのみArduinoに送信するように、10秒の遅延を追加しました。
ESP8266-01とArduinoの接続:
これまでのところ、10秒間隔でインターネットから必要なデータを読み取り、それをシリアルに送信するようにESP8266-01をプログラムしました。次に、このシリアルデータを読み取ることができるように、ESPをArduinoとインターフェイスさせる必要があります。また、ESP8266モジュールから受信したデータを表示できるように、Arduinoに16 * 2LCDディスプレイを追加する必要があります。ESP8266モジュールをArduinoとインターフェースするための回路図を以下に示します。
GPIO_0ピンが空いていることを確認し、Arduinoの3.3Vピンのみでモジュールに電力を供給し、プッシュボタンを押してESPモジュールをオペレーティングモジュールに配置します。これで、ESPにアップロードしたプログラムが動作を開始し、モジュールがシリアルピンを介してArduinoにデータを送信するはずです。これらのシリアルピンは、Arduinoのピン番号6と7に接続されています。したがって、Arduinoのソフトウェアシリアルオプションを使用して、ピンからこれらのシリアルデータを読み取ることができます。
Arduinoプログラムと作業:
完全なArduinoのプログラムも、このページの末尾にESPコードと一緒に与えられています。プログラムを理解したい場合は、下にスクロールしてプログラムを表示するか、さらに読むことができます。
インターフェースプログラムは非常にシンプルです。ソフトウェアシリアルライブラリを使用して、ピン6と7からデータを読み取り、LCD画面に表示するだけです。受信するデータは文字列形式であるため、substringオプションを使用して、ペイロードを要件に合わせて分割するか、必要に応じて整数に変換する必要があります。したがって、LCDが接続されているピンを定義することから始めます。
const int rs = 8、en = 9、d4 = 10、d5 = 11、d6 = 12、d7 = 13; //ピンはLCDに接続されている 液晶LCD (RS、EN、D4、D5、D6、D7)を、
我々が接続されているので、6と7でESP8266のRxおよびTxピンを目のArduinoのピン我々は初期化する必要がある ソフトウェアのシリアルを 、我々は.Iは、することができますESP_Serialなどの名前にこれを持って、そこからシリアルデータを受信できるように、これらのピンのために好きな名前を付けてください
SoftwareSerial ESP_Serial(6,7); // Tx、Rx
setup() 関数内で、シリアルモニターとソフトウェアシリアルのシリアル通信を初期化します。思い出していただければ、ESPプログラムを9600ボーレートで通信するようにしたので、ソフトウェアのシリアルポートに同じボーレートを使用する必要があります。また、LCDに2秒間小さな紹介メッセージを表示します。
void setup(){lcd.begin(16、2); // 16 * 2 LCDディスプレイを使用していますlcd.print( "Arduino&ESP"); //紹介メッセージを表示しますSerial.begin(115200); ESP_Serial.begin(9600); delay(2000); lcd.clear(); }
main loop() 関数内で、ESP8266が何かを送信しているかどうかを確認する必要があります。そうである場合は、ESP8266から文字列を読み取り、ペイロードと呼ばれる変数に保存します。可変ペイロードは文字列型であり、ESP8266モジュールから送信された完全な情報を保持します。
while(ESP_Serial.available()> 0){ペイロード= ESP_Serial.readString();
次に、この文字列を小さなチャンクに分割して、自分の目的に使用できるようにする必要があります。この場合、文字列を分割してLCD画面に表示する必要があります。これは、Arduinoの 部分文字列 関数を使用して 簡単に実行できます。この 部分文字列 関数を使用するには、各文字の位置を知っている必要があります。ペイロードをシリアルモニターに印刷して文字の位置を把握し、それらを使用して以下に示すように部分文字列を分類できます。
local_date = payload.substring(14、20); local_time = payload.substring(26、31); 温度= payload.substring(48、54); 湿度= payload.substring(55、60);
これで、これらの変数を使用して、シリアルモニターに印刷するか、LCDに印刷することができます。ただし、シリアルモニターに印刷すると、部分文字列が正しく分割されているかどうかを確認するのに役立ちます。次に、次の行を使用してLCDディスプレイに印刷します。
lcd.clear(); lcd.setCursor(1、0); lcd.print(local_date); lcd.setCursor(8、0); lcd.print(local_time); lcd.setCursor(1、1); lcd.print(温度); lcd.setCursor(10、1); lcd.print(湿度);
プログラムをArduinoにアップロードし、接続が上の回路図に示されているとおりであることを確認します。物がはっきり見えるまで、LCDディスプレイのコントラストを調整します。LCDにイントロメッセージが表示され、数秒後、日付、時刻、温度、湿度などの詳細が次のようにLCD画面に表示されます。
また、データが受信されるたびにESP8266の青色のLEDが点滅していることにも気付くでしょう。これが表示されない場合は、ESPがプログラミングモードになっていないことを意味します。リセットボタンを押して、接続も確認してください。
これと同様に、任意のAPIを使用して、インターネットから必要なデータを取得し、それをArduinoにフィードして、Arduinoでの作業を処理できます。インターネット上にはたくさんのAPIがあり、それらすべてを使用して、無制限の数のプロジェクトを作成できます。あなたがプロジェクトを理解し、それを構築することを楽しんだことを願っています。問題が発生した場合は、以下のコメントセクションまたはフォーラムに投稿してください。
ESP8266に関連するすべてのプロジェクトはここにあります。