次世代の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の時刻をブラウザ経由で取得してしまえば、
夏時間でも海外でもスムーズに時刻取得できます。
自動的にブラウザから取得した時刻が表示されるため、
ユーザーは設定ボタンを押すだけです。
スマートフォンや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
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
document.getElementById("setdatetext").value
= ""+Year + Month + Day;
}
t = setInterval("dsptime()", 500);
}
t = setInterval("dsptime()", 500);
0.5秒ごとに自動的に時刻や日付の欄を更新する。
実際にESP-WROOM-02へ組込んで使用しているプログラム例は
Githubへアップしてあります。
このような工夫で低コストで汎用的な時刻設定が実現できました。
ウェブアプリ、ブラウザベースならではの設定方法だと思います。
ぜひ、WifiモジュールとRTCを使用した機器の組み合わせの場合に活用してみてください。