■飯田の百葉箱
温湿度気圧センサーBME280が壊れたので、Aliexpressで再購入して交換したところ、米国のNIST(https://tf.nist.gov/tf-cgi/servers.cgi)からの時間が取得できない。あるいは時々データが取れるが不安定である。(それで、富士見の雨量データも日付がずれているのだ・・・。)
しかし、ネット検索してもNISTのタイムサーバーに問題があるような記事は見当たらない。さて困ったとさらにネット検索すると、日本のNICTもタイムサーバーを公開していることがわかった。(参考URL:http://arms22.blog91.fc2.com/blog-entry-445.html)
そこで、ArduinoのProgramを下記のように書き換えたところ、正常に時刻を取得することができた。ただ、いつタイムサービスが終了するからわからないので、定期的な確認が必要かも。
[code lang=”js”] ///// execute NTP HTTP PHP every 120sec (2min)/////////———————————————————————-
if ( millis() – lastSendPacketTime > 120000 ){
// NTPサーバへ時刻リクエストを送信
sendNTPpacket(timeServer);<a href="https://miyasan.sakura.ne.jp/wordpress/wp-content/uploads/2018/11/tcave_temp.png"><img class="alignnone size-full wp-image-6753" src="https://miyasan.sakura.ne.jp/wordpress/wp-content/uploads/2018/11/tcave_temp.png" alt="" width="800" height="600" /></a>
// 時間を更新
lastSendPacketTime = millis();
// NTPサーバからのパケット受信
if ( Udp.parsePacket() ) {
// バッファに受信データを読み込む
Udp.read(packetBuffer, NTP_PACKET_SIZE);
// 時刻情報はパケットの40バイト目からはじまる4バイトのデータ
unsigned long highWord = word(packetBuffer[40], packetBuffer[41]);
unsigned long lowWord = word(packetBuffer[42], packetBuffer[43]);
// NTPタイムスタンプは64ビットの符号無し固定小数点数(整数部32ビット、小数部32ビット)
// 1900年1月1日0時との相対的な差を秒単位で表している
// 小数部は切り捨てて、秒を求めている
unsigned long secsSince1900 = highWord &amp;amp;lt;&amp;amp;lt; 16 | lowWord;
Serial.print("Seconds since Jan 1 1900 = " );
Serial.println(secsSince1900);
// NTPタイムスタンプをUNIXタイムに変換する
// UNITタイムは1970年1月1日0時からはじまる
// 1900年から1970年の70年を秒で表すと2208988800秒になる
const unsigned long seventyYears = 2208988800UL;
// NTPタイムスタンプから70年分の秒を引くとUNIXタイムが得られる
unsigned long epoch = secsSince1900 – seventyYears;
Serial.print("Unix time = ");
Serial.println(epoch);
// Timeライブラリに時間を設定(UNIXタイム)
// 日本標準時にあわせるために+9時間しておく
setTime(epoch + (9 * 60 * 60));
Serial.print("JST is ");
Serial.print(year());
Serial.print(‘/’);
Serial.print(month());
Serial.print(‘/’);
Serial.print(day());
Serial.print(‘ ‘);
Serial.print(hour());
Serial.print(‘:’);
Serial.print(minute());
Serial.print(‘:’);
Serial.println(second());
Serial.println();
}
//————————————————————-
// send an NTP request to the time server at the given address
unsigned long sendNTPpacket(IPAddress&amp;amp;amp; address)
{
// set all bytes in the buffer to 0
memset(packetBuffer, 0, NTP_PACKET_SIZE);
// Initialize values needed to form NTP request
// (see URL above for details on the packets)
packetBuffer[0] = 0b11100011; // LI, Version, Mode
packetBuffer[1] = 0; // Stratum, or type of clock
packetBuffer[2] = 6; // Polling Interval
packetBuffer[3] = 0xEC; // Peer Clock Precision
// 8 bytes of zero for Root Delay &amp;amp;amp; Root Dispersion
packetBuffer[12] = 49;
packetBuffer[13] = 0x4E;
packetBuffer[14] = 49;
packetBuffer[15] = 52;
// all NTP fields have been given values, now
// you can send a packet requesting a timestamp:
// NTP requests are to port 123
Udp.beginPacket(address, 123);
Udp.write(packetBuffer, NTP_PACKET_SIZE);
Udp.endPacket();
}
■横穴と池の水の温度トレンド
昨年10月に作成した温度計の1年分のデータを整理してみた。(計測間隔1分のデータを1時間ごとに平均化してプロット)
赤線:外気温、青線:池の底の温度、緑色:横穴内の温度
・横穴の温度は11~18度。外気温の変化に対して約1か月から40日遅れての変化を示す。
・水温の範囲は4~28度。
コメント