前回紹介したNode-RedからのI2Cデバイス制御する方法に続いて、応用例を紹介します。今回はDS1307搭載のRTCモジュールとUSB-I2C変換アダプタを使用して、RTCの読み込みと設定をしてみました。
Arduino等でRTCモジュールを使用するプロジェクトとして時計やちょっとしたデータロガーなどが考えられます。このような用途では主要機能は時刻を読み込むだけなので、RTCモジュールに時刻を設定する方法が悩みどころです。パソコンから時刻をUARTで送信するか、ディスプレイとスイッチをつけるなど少し作りこみが必要です。個人レベルであれば、ベタでコードに時刻を書いて、Arduino等から書き込むといったことが多いと思います。
そこでUSB-I2C変換アダプタを使えば、PCから簡単にRTCモジュールに時刻を設定することができます。Node-RedがPC上で動いている特徴を生かして、時刻を書き込む際にはPC上の時刻をjavascriptで取得してRTCに書き込み仕様にしています。その都度、時刻を書き換えてRTCモジュールに書き込む必要がありません。
読み込みはRTCから取得した情報をpayloadに格納してDebugに表示する仕様です。今回のサンプルコードはこちらで公開しています。活用してみてください。
なお、今回はDS1307を搭載したRTCモジュールを使用しましたが、個人的にDS1307を推奨しません。DS1307は時刻精度が悪く、数か月で数分以上時刻がずれます。また、チップのESD対策が悪く、コネクタ未接続状態、特に電池を外した状態で扱うと静電気ですぐに破損or動作不良になります。気づいたら時刻が読み込めない、時刻が書き込めない、変な値が読み出されるといった症状に悩まされます。
DS1307の代わりに温度補償水晶発振器(TCXO)を内蔵したDS3231を推奨します。ピン配置、パッケージが異なるものの、DS1307とコマンド互換があるため、置き換え可能です。DS3231であれば数か月で数秒程度のずれに収まり、DS1307に比べてESD対策もされている感じです。