EMC_M5StickC_Watch
M5Stack Store社(?)のマイコンモジュール「M5StickC」に時計表示させるだけのArduinoスケッチ例のご紹介です。
能書き(経緯)
縁あって手にしたM5StickC。それまでM5シリーズはM5Stack Faceを買ってはみたもののいまいち気乗りしなくて全く触ってなかったんですが、M5StickCはその小ささが自分の性に合ったのでしょう。また友人に譲ってもらってその日のうちに一緒にさわれる気軽さもあったのでしょう。早速馴染みのあるArduino IDEで環境に付いてくるスケッチ例を書き込んで遊んでみてたのですが…。
なんかどのスケッチ例も、「へぇ…。で?」って感じなんですよね…。
各種搭載機能を扱ういろんなスケッチ例が収録されてはいるのだけれど…どれもこれもあまり作り込まれてなくて、「とりあえず動きます」っていう。動作確認やコーディングの参考にはなるんだけど、デモにはあんまりなってない。動かした時の悦びが足りないなとゲンナリしたのです(苦笑)。ま、「スケッチ例」なんてそれでいいのでしょうけど…、もちょっとこう…「何かしら機能を果たしてる(フリをしてる)」的なのが欲しかった…。
それならまぁせっかくだし…、何か自分の欲しいようなものを作ってみましょうか、と。
何でも良かったんですが…標準スケッチ例をパラパラっと眺めて目に止まったのはRTC(Real Time Clock)。これならM5StickC単独で時計機能を完結できる。おあつらえ向きにリストバンドも付いてきてる(自分の買ったものは)。
と、いうわけで作ってみたのが本稿のスケッチです。実用ではなく、デモ用です。
RTCも、内蔵されてはいるものの時計として使うには少々難があって…。時刻合わせの術に乏しいのですね…スタンドアロンでは。内蔵ボタンも少なくて調整機能の実装も難しい。せっかくRTC内蔵なのに!(笑) そこで本スケッチではUSBシリアル通信他による簡易な時刻合わせ機能を実装してみました。これでやっと時計的に動かすことが可能になります。
概要
- 機能
- 内蔵RTCが保持する時刻を内蔵ディスプレイに表示(曜日情報除く)。
- 内蔵ボタンによる一時的な表示輝度アップ機能。
- 内蔵ボタンによる簡易な時刻補正機能(限定的)。
- USBシリアル通信による時刻設定機能(テキスト入力)。
- 動作環境:M5StickC
- 内蔵バッテリー連続駆動時間:約5.0時間(手持ち機実績) 1日もちません。あしからず。
上記のZIPアーカイブを解凍し、含まれている「EMC_M5StickC_Watch_????????.ino」をArduino IDEで開いてM5StickCにコンパイル・書き込みしてください。
使い方
- 電源ON/OFF
- M5StickC準拠。電源スイッチでON/OFFしてください(ONは2秒、OFFは6秒の長押し)。
- 表示輝度アップ
- 内蔵ボタンA(HOME)(「M5」と刻印された表のボタン)を押下すると、約3秒間、一時的に表示輝度をアップします。
- (バッテリー温存や暗所での眩しさの観点から普段の表示輝度を抑えめに設定しています。)
- 内蔵ボタンによる時刻補正
- 内蔵ボタンB(RST)(電源スイッチではない方のサイドボタン)を長押し(1秒)すると、秒が切り捨てられます。
- 内蔵ボタンB(RST)を長押し(1秒)しながら内蔵ボタンA(HOME)を押すと、分がインクリメントします。押し続けるとインクリメントし続けます(加速機能は実装していません)。時日月年の繰り上がりも簡易的に実装しています。
- 時刻のデクリメント機能はありません。(繰り下がりが面倒くさいので。)
- USBシリアル通信による時刻設定
- USBシリアル通信で日時の文字列を流し込むことで日時の直接設定が可能です。(内蔵ボタンによる時刻補正では分以上単位の時刻合わせはかなり困難なので…苦笑。)
- 単なるUSBシリアル通信なので、送り側の端末は種類を問いません。
- 手元ではArduino IDEのシリアルモニター、Tera Term、Tcl/Tk(Windows、Android)での機能動作を確認しています。
- ただしTera Termではエコーバック文字列(送り込んだ文字列をそのままシリアルにエコーバックするよう実装しています)の表示動作が確認できていません。自身の理解不足のせいと思いますが、今のところ原因究明できていません。
- シリアル通信の設定は次の通りとしてください。
- ボーレート=9600bps(、パリティ=none、データビット数=8bit、ストップビット数=1bit)
- 送信改行コードは「CR」「LF」どちらでも構いません。「CR+LF」でもOKです。(どちらかが来れば区切りとみなして処理します。)
- 流し込む日時文字列のフォーマット
- 半角数字で、日付は西暦で8文字の年月日。時刻は24時間制で6文字の時分秒、または4文字の時分です。年月日時分秒全てゼロリーディングです。
- 日付だけ、時刻だけ、でも動作します(文字数で仕分けています)。
- 改行文字(CR or LF)の受信で時刻設定処理を実行します。
- 半角のスペース、マイナス(-)、スラッシュ(/)、コロン(:)は単純に無視します。ですのでこれらを使った一般的な日時表記は可能です(数字だけが残ります)。
- それ以外の文字を受信した場合は、設定文字列をクリアします。
(当初この実装はなかったのですが、どうも携帯していると不随意に時刻が変わってしまっている不具合動作が頻発し、おそらくはシリアル通信入力にノイズによる不正入力が生じているのではないかと考え、追加実装しました。抜本的な対策にはなっていませんが、気休めに。)
- 簡易な不正入力判定処理を行っています。13月とか35日とかの指定だと処理をスルーします。(内蔵RTC自体はそういう設定も受け付けるようです。)
解説
150行ほどのしょぼいソースコードです。コメントもアホほど入れましたので、そちらを見ていただくのが良いかと。
EMC_M5StickC_Watch Ajuster
USBシリアル通信による時刻設定機能を実装してみた「EMC_M5StickC_Watch」ですが、「いちいちターミナルを立ち上げて日時打ち込むなんて面倒!」でもありまして…。
GUIで手軽に時刻設定してくれるTcl/Tkスクリプトを書きましたので合わせてご紹介しておきます。
概要
- 機能
- USBシリアル通信でEMC_M5StickC_Watchの時刻をシステムクロックに合わせる。
- WindowsとAndroid(AndroWish)では利用可能シリアルポートを自動でリストアップし、コンボボックスのプルダウンで選択指定可能。
- 動作環境:Tcl/Tk
- 動作確認済Tcl/Tkインタープリタ(バージョン違いの互換性は未調査)
- Windows OS
- Android OS
- その他 OS
- 未確認(もしかしたら動くかも。ただしポート指定は手打ち。)
- 使用拡張パッケージ
- Tile
- registry (for Windows only)
- Usbserial (for Android only)
ダウンロードとインストール
EMC_M5StickC_Watchのダウンロードファイルに同梱しています。
EMC_M5StickC_Watch Ajuster自体は特別のインストール操作は不要で、ダウンロードファイルを展開するだけでOKですが、Tcl/Tkインタープリタが未導入の場合はそのインストールが必要です。詳細はここでは割愛しますが、WindowsとAndroidの場合についてだけ、簡易にご紹介しておきます。なおここで紹介するインタープリタには本スクリプトで使用している拡張パッケージが同梱されていますので別途の導入は不要です。
- Windows OSの場合
- TclKitsのDownloadsページから、Windows用の「Tclkit」をダウンロードします。
(当初「vanillawish」を案内していましたが、インタープリタファイルのファイルサイズが6倍も違うことに気づいて「Tclkit」のご案内に変更しました。)
- ファイルサイズは5MBほどです。
- ダウンロードリンクがいっぱいあって分かりにくいのですが、環境(SystemやPlatform)が適合していてTkを含むもの(「TclKits with Extensions Included」では「Tk」欄が「-」でないもの、「Base TclKits」は全て含んでいるようです)を選びます。
- バージョンはどれでも大丈夫と思いますが、まぁ新しいものが良いでしょう。
- Platformは「x86」なら32bit/64bitどちらの環境でも動くので差し当たって融通が利きます。
- といっても分かりにくいと思うので(苦笑)、ここでは次のものをお勧めしておきます。
「TclKits with Extensions Included」の「System=Windows, Platform=x86, Versions=8.6.10, Tk=8.6.10」のもの(本稿執筆時点での最新版です)。
- ダウンロードしたインタープリタファイルを、EMC_M5StickC_Watch Ajusterのフォルダーにコピーし、ファイル名を「wish.exe」に書き換えます。
(やりようはいろいろありますが、ここでは簡便のためこの方法で紹介しておきます。慣れた方はご自由にどうぞ。)
- Android OSの場合
- Playストアとかを通していない野良アプリなので自己責任でひとつ。気が進まなければやめておきましょう。まぁ…大丈夫と思いますが。
- AndroWishのDownloadsページから、「AndroWish」をダウンロードします。
- ファイルサイズは35MBほどです。
- バージョンはどれでも大丈夫と思いますが、まぁ新しいものが良いでしょう。
- ダウンロードリンクがいっぱいあって分かりにくいのですが、「Android package, signed with a debug key」("Asteroid Day"なら「AndroWish-f7afb8246e-debug.apk」)が目的のインストールファイルです。
- PCでダウンロードした場合は、ダウンロードしたインストールファイルをAndroid端末にコピーします。ダウンロードフォルダへ置くのがいいでしょう。コピーの方法はここでは割愛します。
- ダウンロードしたインストールファイルをAndroid上で実行します。実行方法はここでは割愛します。筆者はファイラーから行いました。「Tetra Free」というファイラーを使っています。
- 画面の表示に従って進めればさっくり入ります。
使い方
- EMC_M5StickC_Watch Ajuster実行端末と目的のM5StickCをUSB接続し、OSに認識させます。
- Windowsの場合、当該M5StickCの開発をArduino IDEで行えているのであれば既に環境は整っています。
そうでなくても通常は自動で認識し、仮想COMポートが構築されます。デバイスマネージャーで確認ください。上手く行かない場合の対応はここでは割愛します。
- Androidの場合、接続のたびに手動で「USB機器を検出」させる必要があるようです(少なくとも手元のスマホでは)。設定などから実施ください。操作方法の説明はここでは割愛します。
- EMC_M5StickC_Watch Ajusterを起動します。
- Windows OSの場合
- 「EMC_M5StickC_Watch Ajuster.bat」を実行します。
- Android OSの場合
- 「EMC_M5StickC_Watch Ajuster.tcl」を実行します。
実のところ筆者不慣れでよく分かってないのですが…(苦笑)。筆者はファイラー(前述の「Tetra Free」)から実行しています。
- 実行すると送り先のアプリケーションをどれにするか問われます。どうやらAndroWishのインストールで関連付けが行われているようで、その選択肢の中にAndroWishが含まれていると思いますので、それを選択すると起動します。
- 「ポート:」欄(起動時は「(プルダウンで選択 or 直接入力)」と表示)で目的のM5StickCに対応するUSBシリアル通信のポートを指定します。
(当該M5StickCでは当然EMC_M5StickC_Watchが動作している必要があります。)
- WindowsとAndroid(AndroWish)では起動時に利用可能なシリアルポートが自動でリストアップされ、コンボボックスに設定されます。右端のタブをプルダウンして目的のポートを選択します。
- 直接ポート名を書き込むことも可能です。「(プルダウンで選択 or 直接入力)」の文字を消して、ポート名を書き込んでください。
WindowsやAndroid以外の環境でも、この方法で動作させることが出来るかも知れません(未確認)。
- 「M5StickC_Watch 時刻合わせ実行」ボタンを押します。
- Androidの場合、(少なくとも初回は)USB機器へのアクセスの是非を問うダイアログが表示されるでしょう。「OK」を選び、処理を進めます。
- ポートの指定が不適切だと動作がバグるかも知れません。ろくに保護していません。その時は諦めて強制終了とかしてください(苦笑)。
- M5StickCの時刻が「PCクロック現在値」に設定されます。
解説
ほんの100行ほどのしょぼいソースコードです。要所にコメントも入れましたので、そちらを見ていただくのが良いかと。
開発履歴(だいたい)
- 2019-11-21 EMC_M5StickC_Watch Ajuster 20191121
- 2019-11-21 EMC_M5StickC_Watch_20191121
- 2019-11-18 EMC_M5StickC_Watch Ajuster 20191118
- 2019-11-18 EMC_M5StickC_Watch_20191118
- 2019-08-18 EMC_M5StickC_Watch_20190818
- 2019-08-15 EMC_M5StickC_Watch Ajuster 20190815
- 2019-08-12 EMC_M5StickC_Watch Ajuster 20190812
- 2019-08-11 EMC_M5StickC_Watch_20190811_1357
- 2019-08-11 EMC_M5StickC_Watch_20190811_0225
更新履歴(だいたい)
- 2020-05-24
- 「ダウンロードとインストール」の推奨Tcl/Tkインタープリターのバージョンを改訂。
- 2020-05-19
- 「開発履歴」追記(日付のみ暫定)。
- 「更新履歴」体裁変更。
- 2019-11-24
- Tcl/Tkの導入案内を修正(Windowsでのお勧めインタープリタを変更など)。
- 他。
- 2019-11-22
このページから抜ける→
いさな工房HP トップ
/
@nifty
サイト管理者:岩橋伴典 as いさな
(E-mail:jo3emc@jarl.com / Twitter:@jo3emc)