#Compilation error: call to 'HTTPClient::begin' declared with attribute error: obsolete API, use ::begin(WiFiClient, url) と Compilation error: DynamicJsonBuffer is a class from ArduinoJson 5. Please see https://arduinojson.org/v7/upgrade-from-v5/ to learn how to upgrade to ArduinoJson 7 のエラーを治しました
理由
- Arduinoライブラリ「Dusk2Dawn」で日の出や日の入り時刻を利用できますね
- そして OpenWhetherMap を発見して知識を深めたい
- しかし http.begin(url); で躓いたっ
- また ArduinoJson 7から DynamicJsonBuffer jsonBuffer; でも躓いた
- 悔しいから諦めないで治しました
目的
- OpenWhetherMapの理解と使い方
- http.begin(url);のコードのエラーを治したい
- DynamicJsonBuffer jsonBuffer;のコードのエラーを治したい
コードを見て自宅のWiFi設定と現在位置の東経と西経と個人のKeyを入力してください
実行結果は個人情報が表示されるので発表しません
自宅のWiFi設定をして自宅の東経と西経とOpenWhetherMapのAIPKeyを入力すれば動きます
setup()で自宅のWiFiに接続とESP-01Sのled_builtin_Pinを設定して
Connecting to 自宅のWiFiとかの表示をします
void loop()で自宅のWiFiに接続完了ならばled_builtin_Pinの点滅や
天気を表示 気温を表示 湿度を表示 気圧を表示 日の出時間を表示 日の入り時間を表示 他を
表示します
必要な条件
- Arduino IDE バージョン 2.3.0
- ESP-01 及び ESP-01S
- ArduinoJson 7
sketch__ESP-01S_OpenWhetherMap.ino
//
// sketch__ESP-01S_OpenWhetherMap.ino
//
// Created by 福田敏一 on 2024/2/10.
// Copyright © 2019 株式会社パパスサン. All rights reserved.
//
// ❇️ ℹ️ 🚨 🎀 📅 ☼ ☕︎ 👀 💼 👑 📢 🧨 💎 🎡 🏕 🏖 🚗 🖲 🎁 📌 ⛑ ✚ 😍 ♻️ 💠 🔆 🅿️ 🔰 ✅ 🌏 ☀️ 🌙 💌 1️⃣ 2️⃣ 3️⃣ 4️⃣ 5️⃣ 6️⃣ 7️⃣ 8️⃣ 9️⃣ 🔟 🧼 🆎 🅰️ 🅱️ ㊗️ ☯️ 📚 🚬 🖨 🗑 🤡 🤖 💍 🍰 🖼️
///////////////////////////////////////////////
//2024/1/16・参考サイト・
//2024/1/16・Amazonより購入・https://www.amazon.co.jp/Beizuu-ESP-01S-ESP8266シリアルWIFIモデル(ESP-01更新バージョン)信頼性保証モノのインターネット/dp/B09F3V1M66/ref=sr_1_2?__mk_ja_JP=カタカナ&crid=37SWMIZT6V0V9&keywords=ESP-01S&qid=1707516830&sprefix=esp-01s%2Caps%2C191&sr=8-2
//2024/1/16・
//ファイル名・sketch__ESP-01S_OpenWhetherMap
//ボード・Generic ESP8266 Module
//デバイス・
//センサー・
//
//ネットワークポート :
//2024/1/16・IP address :
//
/////////////////////////////////////////////////
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <ArduinoJson.h>
#include <TimeLib.h>
const char* ssid = "arduino";
const char* password = "0120881081";
//2023/12/20・ledPinから変更しました
#define led_builtin_Pin 2//LED_BUILTINは10です
void setup() {//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Serial.begin(115200);
delay(100);
WiFi.begin(ssid, password);//ssidで指定したアクセスポイントに接続します
Serial.println("");
while (WiFi.status() != WL_CONNECTED) {//現在の接続状態を返却します。アクセスポイントに接続しているときは、WL_CONNECTEDが返ってきます
delay(1500);
// We start by connecting to a WiFi network
Serial.println("");
Serial.print("Connecting to ");
Serial.print(ssid);
Serial.println("");
}
Serial.println("");
pinMode(led_builtin_Pin, OUTPUT);
}//ここまで setup()//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void loop() {//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
if ((WiFi.status() == WL_CONNECTED)) {
Serial.println("loop()");
//2023/・参考サイトhttps://pointofviewpoint.linclip.com/archives/2505
digitalWrite(led_builtin_Pin, LOW);//点灯
delay(1000);//1000=1秒 上記の状態の点灯を継続
digitalWrite(led_builtin_Pin, HIGH);//消灯
delay(1000);//1000=1秒 上記の状態の消灯を継続
Serial.print("IP address: ");
Serial.println(WiFi.localIP());//現在割り当てられているIPアドレスを返却します
Serial.print("Led Builtin is ");
Serial.println((LED_BUILTIN, DEC));
}
if ((WiFi.status() == WL_CONNECTED)) {
//2023/・参考サイトhttps://pointofviewpoint.linclip.com/archives/2505
digitalWrite(led_builtin_Pin, LOW);//点灯
delay(100);//1000=1秒 上記の状態の点灯を継続
digitalWrite(led_builtin_Pin, HIGH);//消灯
delay(100);//1000=1秒 上記の状態の消灯を継続
digitalWrite(led_builtin_Pin, LOW);//点灯
delay(100);//1000=1秒 上記の状態の点灯を継続
digitalWrite(led_builtin_Pin, HIGH);//消灯
delay(100);//1000=1秒 上記の状態の消灯を継続
digitalWrite(led_builtin_Pin, LOW);//点灯
delay(100);//1000=1秒 上記の状態の点灯を継続
digitalWrite(led_builtin_Pin, HIGH);//消灯
delay(100);//1000=1秒 上記の状態の消灯を継続
digitalWrite(led_builtin_Pin, LOW);//点灯
delay(100);//1000=1秒 上記の状態の点灯を継続
digitalWrite(led_builtin_Pin, HIGH);//消灯
delay(100);//1000=1秒 上記の状態の消灯を継続
Serial.println();
}
if ((WiFi.status() == WL_CONNECTED)) {
String hostOpenWeatherMap = "http://api.openweathermap.org/data/2.5/weather";
String lat = "自宅の東経を入力してください";
String lon = "自宅の西経を入力してください";
String apiKey = "個人のKeyを入力してください"; // Sustituye por tu API Key
String url = hostOpenWeatherMap;
url += "?lat=";
url += lat;
url += "&lon=";
url += lon;
url += "&APPID=";
url += apiKey;
Serial.print("Requesting_url is ");
Serial.println(url);
Serial.print("URL. is ");
Serial.println("http://api.openweathermap.org/data/2.5/weather?lat=自宅の東経を入力してください&lon=自宅の西経を入力してください&APPID=個人のKeyを入力してください");
Serial.println();
//2023/・参考サイトhttps://pointofviewpoint.linclip.com/archives/2505
digitalWrite(led_builtin_Pin, LOW);//点灯
delay(100);//1000=1秒 上記の状態の点灯を継続
digitalWrite(led_builtin_Pin, HIGH);//消灯
delay(100);//1000=1秒 上記の状態の消灯を継続
digitalWrite(led_builtin_Pin, LOW);//点灯
delay(100);//1000=1秒 上記の状態の点灯を継続
digitalWrite(led_builtin_Pin, HIGH);//消灯
delay(100);//1000=1秒 上記の状態の消灯を継続
digitalWrite(led_builtin_Pin, LOW);//点灯
delay(100);//1000=1秒 上記の状態の点灯を継続
digitalWrite(led_builtin_Pin, HIGH);//消灯
delay(100);//1000=1秒 上記の状態の消灯を継続
// Cliente web
HTTPClient http;
WiFiClient client;//このコードがエラー use ::begin(WiFiClient, url)のWiFiClientの部分で必要です
//下記はエラーです Compilation error: call to 'HTTPClient::begin' declared with attribute error: obsolete API, use ::begin(WiFiClient, url)
//http.begin(url);// 変更 --> http.begin(WiFiClient, url); --> http.begin(client, url);
//http.begin(client, url);
http.begin(client, "http://api.openweathermap.org/data/2.5/weather?lat=自宅の東経を入力してください&lon=自宅の西経を入力してください&APPID=個人のKeyを入力してください");
int httpCode = http.GET();
if (httpCode > 0) { //返答がある場合
String payload = http.getString(); //返答(JSON形式)を取得
Serial.print("httpCode is ");
Serial.println(httpCode);
//2024/2/9・payloadで設定地のデータをOpenWeatherMapより取得しました
Serial.print("payload is ");
Serial.println(payload);
//payload is {"coord":{"lon":自宅の東経を入力してください,"lat":自宅の西経を入力してください},"weather":[{"id":804,"main":"Clouds","description":"overcast clouds","icon":"04d"}],"base":"stations","main":{"temp":283.61,"feels_like":281.68,"temp_min":282.09,"temp_max":284.86,"pressure":1017,"humidity":37,"sea_level":1017,"grnd_level":1016},"visibility":10000,"wind":{"speed":2.02,"deg":81,"gust":1.94},"clouds":{"all":95},"dt":1707456229,"sys":{"type":2,"id":2091017,"country":"JP","sunrise":1707428126,"sunset":1707466489},"timezone":32400,"id":1858729,"name":"自宅の場所","cod":200}
//2024/2/9・・jsonオブジェクトの作成
//下記はエラーになります Compilation error: DynamicJsonBuffer is a class from ArduinoJson 5. Please see https://arduinojson.org/v7/upgrade-from-v5/ to learn how to upgrade to ArduinoJson 7
//DynamicJsonBuffer jsonBuffer;// 変更 --> JsonDocument jsonBuffer;
JsonDocument weatherdata;
String json = payload;
//下記はエラーです Compilation error: conflicting declaration 'ArduinoJson::V703PB2::JsonObject weatherdata'
//JsonObject weatherdata = weatherdata,.parseObject(json);// 変更 --> deserializeJson(weatherdata, json);
// ❌ JsonObject& obj = jb.parseObject(input);
// ⭕️ DeserializationError error = deserializeJson(doc, input);
DeserializationError error = deserializeJson(weatherdata, json);
//パースが成功したかどうかを確認
//if (!obj.success()) { ❌
if(error){ // ⭕️
Serial.println("parseObject() failed");
}
//各データを抜き出し
const char* weather = weatherdata["weather"][0]["main"].as<const char*>();
const double temp = weatherdata["main"]["temp"].as<double>();
const double humidity = weatherdata["main"]["humidity"].as<double>();
const double pressure = weatherdata["main"]["pressure"].as<double>();
const double sunrise = weatherdata["sys"]["sunrise"].as<double>();
const double sunset = weatherdata["sys"]["sunset"].as<double>();
const double sunrise0 = weatherdata["sys"]["sunrise"].as<double>();
const double sunset0 = weatherdata["sys"]["sunset"].as<double>();
const double sunrise00 = sunrise0 + (3600 * 9);
const double sunset00 = sunset0 + (3600 * 9);
char sunrise1[32];
char sunset1[32];
Serial.println();
//天気を表示
Serial.println(weather);
//気温を表示
Serial.println(String(temp-273.15) + "°C");
//湿度を表示
Serial.println(String(humidity) + " %");
//気圧を表示
Serial.println(String(pressure) + " hPa");
Serial.println();
//日の出を表示
Serial.println("SunriseCode is " + String(sunrise00));
//sprintf(sunrise1, "%02d.%02d.%02d %02d:%02d:%02d", year(sunrise0), month(sunrise0), day(sunrise0), hour(sunrise0), minute(sunrise0), second(sunrise0));
//Serial.println("Sunrise is " + String(sunrise1));
sprintf(sunrise1, "%02d.%02d.%02d", year(sunrise00), month(sunrise00), day(sunrise00), hour(sunrise00), minute(sunrise00), second(sunrise00));
Serial.println("SunriseDate is " + String(sunrise1));
sprintf(sunrise1, "%02d:%02d:%02d", hour(sunrise00), minute(sunrise00), second(sunrise00));
Serial.println("SunriseTime is " + String(sunrise1));
Serial.println();
//日の入りを表示
Serial.println("SunsetCode is " + String(sunset00));
//sprintf(sunset1, "%02d.%02d.%02d %02d:%02d:%02d", year(sunset0), month(sunset0), day(sunset0), hour(sunset0), minute(sunset0), second(sunset0));
//Serial.println("Sunset is " + String(sunset1));
sprintf(sunset1, "%02d.%02d.%02d", year(sunset00), month(sunset00), day(sunset00), hour(sunset00), minute(sunset00), second(sunset00));
Serial.println("SunsetDate is " + String(sunset1));
sprintf(sunset1, "%02d:%02d:%02d", hour(sunset00), minute(sunset00), second(sunset00));
Serial.println("SunsetTime is " + String(sunset1));
} else {
Serial.println("Error on HTTP request");
}
Serial.println();
Serial.println("http.end()");
http.end();//Free the resources
Serial.println();
}
delay(30000);//30秒おきに更新
}//ここまで・loop()//////////////////////////////////////////////////////////////////////////////////////////////////////////////////