ESP32で天気APIから天気情報を取得し、OLEDディスプレイに表示させてみた

Pocket

ESP32で天気APIから天気情報を取得し、OLEDディスプレイに表示させてみた

タイトルの通り、OLEDディスプレイの「SSD1306」に天気情報を表示させてみました。

動いている様子

前提となる知識

これらのコードをそのまま切り貼りしたのが本記事になります。
ですので、OLEDの使い方や天気情報の取得方法などは上記リンクを参照してください。

参考ページ

実行環境

ソフトウェア関連

  • windows10 home
  • Arduino 1.8.5
  • ESP32 core for arduino 1.0.0

使用部品

回路


ソースコード

ssid,password,APIkeyの部分はご自身の環境に合わせて変更してください。

#include <Wire.h>
#include "SSD1306.h" 
#include <HTTPClient.h>
#include <ArduinoJson.h>
#include <stdio.h>

const char* ssid = "ssid";
const char* password =  "password";
 
const String endpoint = "http://api.openweathermap.org/data/2.5/weather?q=tokyo,jp&APPID=";
const String key = "your API key";

SSD1306  display(0x3c, 21, 22);
 
void setup() {
  Serial.begin(115200);
  
  display.init();//SSD1306を初期化
  
  WiFi.begin(ssid, password);
  
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("Connecting to WiFi..");
  }
  Serial.println("Connected to the WiFi network");
  

}
 
void loop() {
  if ((WiFi.status() == WL_CONNECTED)) {
 
    HTTPClient http;
 
    http.begin(endpoint + key); //URLを指定
    int httpCode = http.GET();  //GETリクエストを送信
 
    if (httpCode > 0) { //返答がある場合
 
        String payload = http.getString();  //返答(JSON形式)を取得
        Serial.println(httpCode);
        Serial.println(payload);

        //jsonオブジェクトの作成
        DynamicJsonBuffer jsonBuffer;
        String json = payload;
        JsonObject& weatherdata = jsonBuffer.parseObject(json);

        //パースが成功したかどうかを確認
        if(!weatherdata.success()){
          Serial.println("parseObject() failed");
        }

        //各データを抜き出し
        const char* weather = weatherdata["weather"][0]["main"].as<char*>();
        const double temp = weatherdata["main"]["temp"].as<double>();

        //LCDに表示
        display.clear();//画面を消去
        //天気を表示
        display.setFont(ArialMT_Plain_16);
        display.drawString(0, 0, weather);
        //気温を表示
        display.setFont(ArialMT_Plain_24);
        String temp_str = String(temp-273.15) + "°C";
        display.drawString(20,20,temp_str);
        display.display();
      }
 
    else {
      Serial.println("Error on HTTP request");
    }
 
    http.end(); //Free the resources
  }
 
  delay(30000);   //30秒おきに更新
 
  }

まとめ

これで部屋に居ながらいつでも現在の天気を知ることができますね!スマホをつける必要もなくなります。
これはかなり単純なウェザーステーションですが、これにアニメーションやリアルタイム時計機能などをつけて行けばどんどん実用的になってきます。
次はネット上から正確な時間を取得し、時計にする方向で考えています!

twitterアカウントの方で最新記事のお知らせや記事にならないような小さな情報を小出ししています。もしよろしければフォローお願いいたしますm(__)m

ご覧いただきありがとうございました!

Pocket

関連記事   ESP32のタッチセンサ3つでドレミファソラシまで鳴らせるピアノを作ってみた

返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です