2017年03月12日

ハードボタンやNTPを使わない時刻設定方法

次世代のProjectionBallの開発で時計を
プロジェクションできる機能の実装で
時刻の設定方法の工夫について今回は紹介します。



次世代のProjectionBallでは
遠隔での操作やスマートフォンからの操作を実現するため、
Wifiモジュール、ESP-WROOM-02を搭載する予定です。



また、ESP-WROOM-02では
時刻をプロジェクションするためのRTCを搭載していないため、
ProjectionBall側の本体マイコンでRTC機能を実装し、時刻を管理します。


この場合、どこから本体マイコンRTCの時刻設定をするか悩む点です。


一般的な方法としては
@本体に時刻設定ボタンを作る
  ×→ボタン数が増え、表示インタフェースが必要
AESP-WROOM-02経由でブラウザから時刻を打ち込んでもらう
  ×→時刻を打ち込むのが面倒
BESP-WROOM-02経由でNTPを使用して時刻を取得
  ×→インターネットに接続されていない場合の時刻設定ができない、海外対応が面倒

といった感じでどれもProjectionBallでは非現実的な感じです。


そこで工夫した点として、
「Aブラウザ経由で時刻を打ち込む」の方法を改良し、
「端末上のブラウザ画面でブラウザから時刻を取得する」という方法です。
つまり、javascriptで端末の時刻取得を行い、
ESP-WROOM-02へ時刻文字列を送信する方法です。


この場合、時刻設定のハードボタンが不要、
NPTサーバから取得する必要もありません。
また、ESP-WROOM-02自体が
インターネットに接続されていなくても時刻設定可能です。


ほとんどのユーザーがスマートフォンやPCからアクセスするため、
スマートフォンやPCの時刻をブラウザ経由で取得してしまえば、
夏時間でも海外でもスムーズに時刻取得できます。



自動的にブラウザから取得した時刻が表示されるため、
ユーザーは設定ボタンを押すだけです。



wifi.png

スマートフォンやPCのブラウザ画面から
ESP-WROOM-02へアクセスする画面に
時刻取得のスクリプトが書かれており、
自動的に時刻や日付の文字列が更新されます。



「Send」ボタンを押すことで
時刻や日付が文字列としてESP-WROOM-02へ送信されます。


ESP-WROOM-02は時刻情報を受けると、
そのままProjectionBall側の本体マイコンへ時刻情報を送り、
本体マイコンがRTCを設定します。



実際に表示される画面に入れたスクリプトは下記の通り。


  t=0;           
  function dsptime() {
     DD = new Date();
     Year = ('00'+ DD.getFullYear()).slice(-2);
     Month =('00'+ (DD.getMonth() + 1)).slice(-2);
     Day    = ('00'+ DD.getDate()).slice(-2);
     Hours = ('00'+ DD.getHours()).slice(-2);
     Minutes = ('00'+ DD.getMinutes()).slice(-2);
     Seconds = ('00'+ DD.getSeconds()).slice(-2);               
     document.getElementById("settimetext").value
                    = ""+Hours + Minutes + Seconds;
   document.getElementById("setdatetext").value
                    = ""+Year + Month + Day;
 }
 t = setInterval("dsptime()", 500);

0.5秒ごとに自動的に時刻や日付の欄を更新する。


実際にESP-WROOM-02へ組込んで使用しているプログラム例は
Githubへアップしてあります。



このような工夫で低コストで汎用的な時刻設定が実現できました。
ウェブアプリ、ブラウザベースならではの設定方法だと思います。
ぜひ、WifiモジュールとRTCを使用した機器の組み合わせの場合に活用してみてください。
posted by Crescent at 00:00| Comment(0) | TrackBack(0) | 電子部品 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバック