前回は、何を作るかを考えて、設計メモにまとめました。
簡単にできるIoT~振動の測定①
先日(といっても随分経ってしまっていますが…)とある方から、M5StickCというデバイスをいただきました。それで、どんなことができるのかと試してみたことを紹介します。 M5StickC このデバイスは親指(より少し小さい?)くらいのサイズですが、中にESP32-...
さて、今回はさっそくこれを作ってみます。作る方法はネットでいろいろな人が教えてくれるので、それらを参考にすれば、すぐに作れます。
データを受け取って蓄積する側を作る
まずは、Googleスプレッドシートに以下の図のような表を作り、M5StickCから受け取ったデータを書き込めるようにします(図では既にデータが蓄積されています)。
- A列「gasCodeVer」:一応、動かしているスクリプトのバージョンを記録
- B列「receiveTime」:データを受け取った時刻(receivedでないのはご愛嬌)
- C列「dataNum」:いくつデータが取れているかを記録
- D列「data1」以降:加速度データ
そのために、以下のことをします。
- Googleドライブでスプレッドシートを作る
- 「ツール」→「スクリプトエディタ」からスクリプトエディタを開く
- Apps Scriptでスクリプト(コード)を書く
- 「デプロイ」→「新しいデプロイ」→「種類の選択」→「ウェブアプリ」からデプロイ
基本的なやり方は下の参考ページ(前半部分)を見れば、すぐに分かります。実際に手元で出る画面と少し違うところがあるかもしれませんが、だいたい一緒かな、という緩さをもって見ていくと良いと思います。
[M5Stack] M5Stackで取得したデータを、Google スプレットシートへ書き込む
M5StackはWi-Fi機能との連携が特徴の一つとなりますが、やってみたくなるのがクラウド連携だと思います。そこで、今回は、GoogleDriveとの連携方法を紹介します。M5Stackで取得したデータを、Googleスプレットシートに書
ちなみに実際に僕が書いたコードは、以下の12行(カッコ含む)だけです。データを受け取ったら、「rawData」シートの新しい行(既に書き込まれている最後の行の次の行)に書き込みます。JSONという形式でデータが送られてくるので、データの扱いが簡単です。
function doPost(e) { var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('rawData'); var dateString = Utilities.formatDate( new Date(), 'Asia/Tokyo', 'yyyy/MM/dd hh:mm:ss'); var jsonData = JSON.parse(e.postData.contents); var nextRow = sheet.getLastRow() + 1; sheet.getRange(nextRow,1).setValue('ver.34'); sheet.getRange(nextRow,2).setValue(dateString); sheet.getRange(nextRow,3).setValue(jsonData.accelData.length); for(var i = 0; i < jsonData.accelData.length; i++){ sheet.getRange(nextRow,i + 4).setValue(jsonData.accelData[i]); } }
センサーでデータを取得して送る側を作る
データを受け取って蓄積する側ができたので、次はデータを取得して送る側です。今度はM5StickCを動かすプログラムを作るので、別のツールを使います。大まかに以下の流れになります。
- M5Bunner(※1)を入手する
- M5StickCをUSBでPCにつないで基本のファームウェア(※2)を書き込む
- UIFlow(※3)でコードを書く
- プログラムを実行!
※2 ファームウェア:電子機器を動かすためのプログラム
※3 UIFlow:M5StickCなどの開発をするためのツールで、プログラミング言語Pythonやビジュアル(ブロック)プログラミング言語Blocklyでコードを書ける
こちらも以下の参考ページを見ればすぐにできます。英語のページですが、ブラウザで日本語に翻訳(ページ上で右クリックして「日本語に翻訳」を選択)すると、英語に自信がなくても問題なく読めます。日本語なので当然ですが。
UIFlow - M5StickC
The reference docs for M5Stack products. Quick start, get the detailed information or instructions such as IDE,UIFLOW,Arduino. The tutorials for M5Burner, Firmware, Burning, programming. ESP32,M5StickC,StickV, StickT,M5ATOM.
UIFlowでは、ネットワークプログラミングモードとUSBプログラミングモードいう2つの方法が用意されていて、前者(ネットワーク)がとても便利です。PCにUIFlowをインストールしなくても、ブラウザでコードを書くことができて、実行ボタンを押すと、ネットワーク経由でM5StickCに反映されて動作します。今回、僕もこのモードを使いました。
ビジュアルプログラミング言語Blocklyを使うと、M5StickCにさせたいことを表すブロックを選んで、組み合わせることでプログラムを組むことができます。僕が書いたコードは下の図の右半分に表示されているものです。ボタンを押すことでON/OFFできたり、液晶の色や文字で現在の状態を表したり、といった動きを入れたのでブロックが多くなっていますが、それでもこれだけで実現できるのには驚きます。
実際に動かしてみる
以上で設備の振動を計測する準備ができました。さっそく計測してみましょう。5MStickCを養生テープでサーキュレーターに取り付けて、ボタンを押して計測を開始します。すると、5MStickCの液晶画面に設定した文字が表示されて、その後、Googleスプレッドシートにデータが書き込まれていきます。
このように、M5StickCを使えば、IoT的なことが簡単にできます。もちろんM5Stackシリーズだけでなく、さまざまな同様のデバイスが世の中に数多く供給されるようになっています。身の回りに変化を起こすのに使える、ひとつの要素として頭の片隅に置いておくと、何かの機会にいいアイデアにつながるかもしれません。
M5StickC(本体のみ) - スイッチサイエンス
M5StickCから、腕時計マウンタ等のマウンタ類を除いた、本体とUSB Type-Cケーブルのみの製品です。ESP32を搭載した小型のM5Stackです。ポータブルで使いやすいオープンソースのIoT開発基板で、プロトタイプを素早く作ることができます。