【Arduino/ESP8266】HttpClientを使ってHTTPをGETする

Arduino

ESP8266でHttpのGETリクエストをする

こんにちは、くろべこです。

今回もESP8266の記事になります。

前回はサーバー構築をしましたが、今回はESP8266がクライアント側になりサーバー側にGETリクエストをしてみたいと思います。

ESP8266をクライアントにしてリクエストコマンドを送る方法として、何種類かあると思うのですが、今回は<ESP8266HTTPClient.h>を使用してlivedoorお天気情報の【Weather Hacks】からJSON形式の天気情報をGETしていきたいと思いますよ!

リンク:WeatherHacks

JsonとはJava Script Object Notationの略でテキストベースのデータフォーマットです。JSONのフォーマットでは、四つの基本的な型(文字列、数値、ブール値、null値)と、 二つの構造型(オブジェクト、配列)を表現できます。JavaScriptに限らず様々な言語で利用可能であり、Arduinoに関してもArduinoJsonというライブラリも公開されており、JsonObject⇔文字列の変換も容易に出来ます。

HttpClientのGETリクエストでJSONデータを取得する

プログラムはESP8266の開発環境にデフォルトで入っている【BasicHttpClient】を使用します。サンプルコードから参照してください。
BasicHttpClientコード【WeatherHackのurl挿入】

このコードを書き込むだけでJSONデータを取得することが出来ます。取得した時のシリアル画面は下記のようになると思います。

この状態ではJSON形式の文字の羅列だけなので分かりませんよね?Arduino自身も、文字列データのJSONにオブジェクトにはアクセスすることが出来ません。なので、JSONをオブジェクト形式のデータに変換して値を取り出してあげる必要があります。この行為をPase(解析)と言います。

本記事ではJSONのパースに関しては触れませんが、ArduinoにはArduinoJSONというJSON形式をPaseしてくれるライブラリが存在します。このArduinoJSONについては後日取り上げたいと思いますのでよろしくおお願いします。

HttpClientについて少し解説

話を戻しまして、今回はWeather Hackという天気予報APIからJSONデータをGETしたわけですが、コード中でどのようにゲットしているか簡単に説明したいと思います。

WiFiMultiライブラリを使用していますが、一般的なESP8266WiFiでも問題ありません。そもそも、自宅内での利用用途なので複数登録する必要ないですね、、、

WiFiMultiとは複数のSSIDを登録しておき信号強度(RSSI)が最大の物に接続を開始するライブラリです。

はじめは、WiFi接続のお作法とclientオブジェクトの作成です。

HttpClientの開始はまずClient.beginでアクセスするURLを指定するところから始まります。次に、GETリクエストをアクセス先のURLに対して送ってあげて、HTTPステータスコードの戻り値を受け取ります。このHTTPステータスコードはエラーの場合はマイナス値を返し、何らかのアクセスが出来た場合はESP8266HTTPClient.hに登録されているコードが返ってきます。

リンク:ESP8266HTTPClient.h

このHTTPステータスコードに対して条件分岐をして、正常な場合とリダイレクトされた場合はボディ部分を読み取ります。そして、Client.end()によりHTTP通信を終了するといった流れになります。

HTTPSの場合にはフィンガーコードの認証が必要になってきますので次回の記事にでもHTTPSにアクセスする方法について書いていこうなと思っております。

 

 

コメント

タイトルとURLをコピーしました