« Arduinoで作ろう(44)  WeMos D1でNTP時計 | トップページ | Arduinoで作ろう(46) APIを叩いて現在の為替レートを取得する »

2020年4月12日 (日)

Arduinoで作ろう(45) OpenWeatherMapの天気情報を取得してみる

Wemos_d1_ntp_tokei__20200412094701

 WeMos D1 (ESP8266)をネットにつないで OpenWeatherMapの無料天気情報をAPIで取得し,現在の岐阜市の天気をLCDに表示してみました。「外出自粛中」でも,外の天気がよく分かって便利(?)
参考にしたのはこちらのサイト。とても丁寧な説明で勉強になりましたm(__)m

 APIを使うためには,API Keyが必要になりますから,Sign Upページで無料アカウントを作ってキーを取得します。
あと,APIを叩いて得られるJSON形式の天気情報を成型するためのライブラリArduinoJson.h (バージョンは5.13.4がいいみたい)をインストールしておきましょう。

↓ とりあえず岐阜市の「現在の天気」,「気温」,「湿度」,「気圧」を表示させてみました。

20200412

//OpenWeatherMapから天気情報を取得する

#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <ArduinoJson.h>
#include <ST7032.h>
const char* ssid = "あなたの無線LANのSSID";
const char* password = "あなたのパスワード";
const String endpoint = "http://api.openweathermap.org/data/2.5/weather?q=gifu,jp&units=metric&APPID=";
const String key = "あなたのAPIキー";
ST7032 lcd ;

void setup() {
  Serial.begin(115200);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.print("Connected to ");
  Serial.println(ssid);
  lcd.begin(16, 2) ;
  lcd.setContrast(30);
}

void loop() {
  if ((WiFi.status() == WL_CONNECTED)) {
   HTTPClient http;
   http.begin(endpoint + key); 
   int httpCode = http.GET();
   if (httpCode > 0) {
     String payload = http.getString();
     Serial.println(payload);
     DynamicJsonBuffer jsonBuffer;
     String json = payload;
     JsonObject& weatherdata = jsonBuffer.parseObject(json);
     const char* weather = weatherdata["weather"][0]["main"].as<char*>();
     const char* description = weatherdata["weather"][0]["description"].as<char*>();
     const double temp = weatherdata["main"]["temp"].as<double>();
     const double pressure = weatherdata["main"]["pressure"].as<double>();
     const double humidity = weatherdata["main"]["humidity"].as<double>();
     lcd.setCursor(0, 0);
     lcd.print(description);lcd.print("");
     lcd.setCursor(0, 1);
     lcd.print((int)temp); lcd.write(0b11011111); lcd.print("C");lcd.print(" ");
     lcd.print((int)humidity);lcd.print("%");lcd.print(" ");
     lcd.print((int)pressure);lcd.print("hPa");
    }
    http.end(); 
   }
 delay(10*60*1000); //10分おきに更新
}

 

| |

« Arduinoで作ろう(44)  WeMos D1でNTP時計 | トップページ | Arduinoで作ろう(46) APIを叩いて現在の為替レートを取得する »

Arduino」カテゴリの記事

ESP8266 , ESP32」カテゴリの記事