発端
Dusk2Dawnは、秋月で買ったesp32-wroom-32dを、リンビングの窓の電動シャッターを開閉するリモコンにつなぎ、外が暗くなったら(日の入時刻になったら)、自動でシャッターを閉める、という工作をしているときに、見つけたライブラリです。
日本語解説サイトがなさそうなので、メモがてらご紹介。
インストール方法
- Dusk2Dawnのgithubで「Clone or Download → Download ZIP」を選択して、zipファイルをダウンロード
- Arduino IDEを起動し、メニューから「スケッチ → ライブラリをインクルード → .ZIP形式のライブラリをインストール」を選択、さきほどのzipファイルを指定
サンプルコード
#include <Dusk2Dawn.h>
void setup() {
Serial.begin (115200);
// 経度, 緯度, タイムゾーン
Dusk2Dawn japan(36.2048, 138.2529, 9);
// 年, 月, 日, サマータイム
int jpSunrise = japan.sunrise(2020, 5, 24, false);
int jpSunset = japan.sunset(2020, 5, 24, false);
// 日の出時刻
char time0[] = "00:00";
bool response0 = Dusk2Dawn::min2str(time0, jpSunrise);
if (response0 == false) {
//Serial.println(time0); // print "ERROR"
Serial.println("Error!");
}
Serial.print("jpSunrise: ");
Serial.println(time0);
// 日の入り時刻
char time1[] = "00:00";
bool response1 = Dusk2Dawn::min2str(time1, jpSunset);
if (response1 == false) {
//Serial.println(time1); // print "ERROR"
Serial.println("Error!");
}
Serial.print("jpSunset: ");
Serial.println(time1);
}
void loop() {
}
実行結果
上記サンプルコードを実行すると、シリアルコンソールに以下が表示されます。
14:57:27.218 -> jpSunrise: 04:35
14:57:27.218 -> jpSunset: 18:52
手元にあったiPhoneの天気アプリに表示されている日の出時刻・日の入り時刻を見ると、それぞれ「04:29」「18:47」だったので、5分弱ずれています。
上記サンプルの経度・緯度は、「日本 経度 緯度」でググって出てきたものを、何も考えずにそのまま入れましたが、あとあと調べて見ると、今私がいる場所からだいぶ離れた地点のようです。
もしかすると、iPhoneのほうはGPSにより正確な経度・緯度を使っていて、そのせいで差がでたのかも?と思い、試しに上記サンプルの経度・緯度に、今いる場所の値を正確にいれたところ、ほぼ差がなくなりました。
私の用途的にはどちらにせよ、誤差の範囲なので、良しとします。
参考
「日没頃に自動で100均イルミネーションをつけてみる」という記事でも似たようなことをしていますが、こちらはWebAPIを使っているようです。
おしまい。