04_API_OpenWeather
天気情報APIを利用する
OpenWeather APIから天気情報を取得し、シリアルモニターに表示します。
準備する
CherryIoTをPCに接続する
CherryIoTをPCのUSB-A挿入口に接続します。
Wi-Fiの情報を確認する
CherryIoTを接続する2.4GHz Wi-FiのSSID(ネットワーク名)とパスワードを確認します。Wi-Fiルーター本体のラベルや設定画面に記載されています。分からない場合は、ネットワークの管理者に確認してください。
OpenWeatherを準備する
OpenWeatherアカウントを準備する
OpenWeatherのWebサイトを開き、右上の「Sign up」をクリックしてアカウント作成を始めます。すでにOpenWeatherアカウントを持っている場合は、サインインして「APIキーを確認する」へ進んでください。

アカウントを作成する
Username、メールアドレス、Password、Repeat Passwordを入力します。年齢と利用規約への同意にチェックを入れ、reCAPTCHAを確認して「Create Account」をクリックします。

メールアドレスを認証する
OpenWeatherから届いたメールを開き、「Verify your email」をクリックします。

APIキーを確認する
ログイン後、右上のユーザー名をクリックして「My API keys」を開きます。DefaultのAPIキーを確認します。APIキーは重要な認証情報なので、第三者へ公開しないでください。

天気を取得する都市を確認する
OpenWeatherのトップページにある「Search City」で、天気を取得したい都市を検索します。検索結果に表示される英語の都市名と国コードを、サンプルコードのendpointに設定します。

サンプルコード
GitHubで公開しているサンプルコードです。コードをコピーして Arduino IDEで使用します。
GitHubからコードを読み込んでいます...プログラムを書き込む
上のサンプルコードをコピーし、Arduino IDEに貼りつけます。
設定情報を書き換える
コード内の以下の箇所を、「1 準備する」で確認・取得した情報に 書き換えます。
| コード内の項目 | 入力する情報 |
|---|---|
ssid | 接続するWi-FiのSSID |
password | Wi-Fiのパスワード |
endpoint | 天気を取得する都市名と国コード(コードのq=から&の間に、Tokyo,JPのように「都市名,国コード」の形で入力します) |
key | OpenWeatherのAPIキー |
const char* ssid = "ここにSSIDを入力";const char* password = "ここにパスワードを入力";const String endpoint = "http://api.openweathermap.org/data/2.5/weather?q=matsue,jp&APPID=";const String key = "ここにAPIキーを入力";コードの左側にある項目名や記号は残し、例を参考に値の部分だけを 書き換えます。値を囲む"、行末の;、 証明書の開始・終了行などは削除しません。書き換えたあと、xxxxxなどの仮の文字が残っていないことを確認してください。
Wi-Fiのパスワード、APIキー、トークン、証明書などを入力したコードは、 Webサイト、SNS、GitHubなどへ公開しないでください。
ボードとポートの設定を確認し、左上の 「→(書き込みボタン)」を押してCherryIoTに書き込みます。
初めて書き込む方は「はじめてのCherryIoT」で詳しい手順を確認してください。
動作確認
シリアルモニターで確認する
取得した天気情報を確認する
CherryIoTがWi-Fiへ接続すると、「Connected to the WiFi network」と表示されます。その後に「200」とOpenWeatherから受信したJSON形式の天気情報が表示されれば、正常に取得できています。

OpenWeatherから受信したJSON形式の天気情報がシリアルモニターに表示されるなら成功です。
コードの解説
Wi-Fiへ接続してOpenWeatherへHTTPリクエストを送り、受信した応答を表示します。
GitHubからコードを読み込んでいます...Serial.begin(115200);シリアルモニターへ文字や測定値を表示するため、通信速度を115200bpsに設定します。
#include <HTTPClient.h>WebサーバーやAPIとHTTP通信するため、HTTPClientライブラリを読み込みます。HTTPは、Web上でデータを送受信するための通信ルールです。
const char* ssid = "xxxxx";CherryIoTを接続するWi-FiのSSIDを設定します。passwordにはWi-Fiのパスワードを設定します。
const String endpoint = "http://api.openweathermap.org/data/2.5/weather?q=matsue,jp&APPID=";取得する地域を含むOpenWeather APIの接続先を設定します。
const String key = "xxxxxxxxxxxxxxxxx";OpenWeatherで取得したAPIキーを設定します。
WiFi.begin(ssid, password);設定したSSIDとパスワードを使ってWi-Fiへの接続を開始します。
if ((WiFi.status() == WL_CONNECTED)) {Wi-Fiへ接続できているときだけAPI通信を行います。
http.begin(endpoint + key);APIへ送るHTTPリクエストの接続先を設定します。APIは外部サービスの機能やデータをプログラムから利用するための窓口で、ここでは接続先URLの末尾に本人確認用のAPIキーを追加します。
int httpCode = http.GET();OpenWeatherへGETリクエストを送り、返されたHTTPステータスをhttpCodeへ保存します。GETは、サーバーから情報を取得するときに使う送信方法です。
if (httpCode > 0) {HTTPステータスが0より大きく、OpenWeatherから応答を受け取れたかを確認します。
String payload = http.getString();APIから返された応答本文を文字列として取得します。JSONは、項目名と値を組み合わせてデータを表す形式で、天気や温度など複数の情報をまとめて受け取るときによく使われます。
Serial.println(httpCode);HTTPステータスと、受信したJSON全文をシリアルモニターに表示します。
else {ifの条件(HTTP応答が返された)を満たさないとき、次の処理を実行します。
Serial.println("Error on HTTP request");HTTPリクエストでエラーが起きたことを表示します。
http.end();HTTP通信を終了します。通信を使い終わったあとに終了処理を行い、メモリーや接続を解放するために必要です。
delay(30000);30秒待ちます。