■飯田の百葉箱
温湿度気圧センサー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を下記のように書き換えたところ、正常に時刻を取得することができた。ただ、いつタイムサービスが終了するからわからないので、定期的な確認が必要かも。
///// execute NTP HTTP PHP every 120sec (2min)//// /////---------------------------------------------------------------------- if ( millis() - lastSendPacketTime &amp;amp;gt; 120000 ){ // NTPサーバへ時刻リクエストを送信 sendNTPpacket(timeServer);<a href="http://miyasan.sakura.ne.jp/wordpress/wp-content/uploads/2018/11/tcave_temp.png"><img class="alignnone size-full wp-image-6753" src="http://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度。