見出し画像

Day10. IoTプロトタイプに最適!『M5Stack』で温度警報器を作る

※ひとりでIoTまるっとチュートリアル Advent Calendar 2018
10日目の記事です。まだ登録していない方はこの機会によろしくおねがいします!

ここ一年、一部の界隈で人気が急上昇中のM5Stack。今回はその人気と使い方に迫ります!

目次
☑ M5Stackとは
☑ 楽しい!充実の周辺機器たち
☑ Arduino IDEを使ったローカル環境開発 
☑ M5Cloudを使ったクラウド上での開発
☑ 便利な周辺機器

M5stackとは

M5Stackは良い。どういいのか、まとめてみました。

- ESP3ベースなので、省電力
- 画面がある
- が出る
- GPIO/I2C/...などマイコンとして基本的にある機能はすべて具備
- WiFi/Bluetoothモジュール内蔵
- 最近流行りのarduino/micropython環境で開発ができる
- M5Cloudにより、遠隔デプロイが可能。
- stackすることによる、拡張性◎
-
比較的安価(4500円程度)

とにかく安価で色々なことがギュッとつまった、プロトタイピングに最適なマイコンです。

やはり人気があり、先人たちがいろいろな記事を上げています。どれもとても勉強になるので、是非ご覧になってください。

楽しい!充実の周辺機器たち

M5stackの特徴の一つ、拡張性。かなりコミュニティが盛んで、高い頻度で新モジュールが追加されています。スイッチサイエンスやAmazonにたくさんあるので、探してみましょう!

今回は、そのなかからいくつか抜粋して紹介します。

バッテリー 850mAh

長時間、コンセント無しで動作が出来たら、モビリティも上がり嬉しいですよね。m5stackはデフォルトでバッテリーが付属していますが、3.7 V / 150 mAと、長時間動かすには心許ないです。バッテリーを装着すると、数倍長持ちします。これで持ち運びも完璧!

また、下記のような記事を見つけました。電池残量が可視化されていて、目安にめちゃくちゃいいですね。

 GPSモジュール

なんと、GPS機能まで搭載できます!どこでどんなセンシングをしたかが記録できるので、バッテリーを積んで、持ち運びマイコンの完成です!

参考 
- micropythonでGPS(Github)
- GPSのログデータ(滴了庵日録)
M5StackでGPS衛星の現在位置を表示する]

M5Stack Faces

入力機能をもっと豊かにするアタッチメントです。
ゲームボーイ風のコントローラなどもあり、用途の幅が拡がります!

Arduino IDEを使ったローカル開発

さて、概要はこの辺にして、開発に入っていきましょう。M5Stackの元になっているESP32は、Arduino IDEでの開発が可能です。順を追って、手順を説明しましょう。(今回は、windows環境を想定しています。Mac/Linux環境はこちらの公式のdocumentをどうぞ)

1. Arduinoのインストール
2. ドライバのインストール
3.  BoardManagerにm5stackを追加
参考1 : board managerの追加方法(ESP32) : 公式
参考2 : M5Stack買ったよ(Install備忘録) : ハマりがち(boardmanager周り)なところをしっかり抑えて書いてくれている
4. M5Stack boardの選択
5. ライブラリの追加

ArduinoのインストールはDay6に詳しく書いたので割愛します。
(参考 : Day6. ArduinoではじめてのLチカ)

続いて、M5Stackを認識させるため、Arduinoを使うローカルPCにドライバ登録をします。下記からダウンロードをしてください。

・32bit PCの方は "CP210xVCPInstaller_x86.exe"
・64bit PCの方は "CP210xVCPInstaller_x64.exe"
をクリックしましょう。 
※私はWindows10 Universalでなく、Windows 7/8/8.1 (v6.7.6)がいいという記事を見かけたので、それを信じて後者をインストールしました。

正しくインストールできていれば、画像のように、デバイスマネージャでドライバを認識してくれます。

次に、ArduinoのボードマネージャにM5Stackを追加します。下記リンクを右クリック⇛[名前をつけてリンク先を保存]で、デスクトップなどにダウンロードします。

download_arduino_esp32_support.exe 

その後、下図のようにArduinoIDEのフォルダドラッグ&ドロップします。

管理者権限で、このファイルを実行してください。処理が終わると、ボードが登録されています。便利ですね!

登録が終わったら、M5Stack Boardをボードマネージャから選択しましょう。

 最後に、ライブラリを追加します。下図に従い、M5Stackパッケージをインストールしてください。

あとはArduino言語に従って、やりたい処理を書いてい来ます。
といってもはじめからいろいろするのは大変なので、いつもどおり、スケッチ例を使いながら勉強しましょう。デフォルトでかなりの例が入っているので、重宝します。

CLOCKのスケッチ例をコンパイルすると、時計になりました!!

※ エラーデバッグをしたいときはDay7で説明したとおり、Arduino IDEのシリアルコンソールから確認しましょう。次に紹介するM5Cloudに関しても、このデバッグ方法は同じです。文字化けするときは、ボーレートを確認しましょう。

M5Cloudを使ったクラウド上での開発

M5Stackの大きな特徴の一つが、このM5Cloudローカルの機器の開発をクラウド側で実装できるという、とても便利なサービスです。

機器の遠隔管理・遠隔デプロイが可能になるコンソール画面です。まだベータ版ですが、可能性はめちゃくちゃ感じます。処理はmicropythonで書きます。pythonを触ったことがある人なら、馴染みやすいかなと思います。少し癖があったり、ライブラリがまだまだなところがあったりもしますが、今後利用者が増えてくれば、その辺も解決するでしょう(期待しています)

Arduinoを使うときとは勝手が違い、WiFi環境が必須です。
まずは環境構築ですが、実は公式ドキュメントがめちゃくちゃ丁寧なので、それを参考にするのが一番いいだろうと思います。

注意点としては、WindowsではEspressif Flash Download Toolsというものを使って初期設定をするのですが、フォルダ名が日本語だったりするとエラーが出かねないので、ローマ字と半角記号のみでディレクトリパスを用意しておきましょう。

さて、準備が出来たらコードを書いていきます。micropythonは、上述の公式ドキュメントがめちゃくちゃ便利なのと、下記qiitaも参考になります。(M5StackでMicroPythonを使えるようにする )

まだまだドキュメントは少ないですが、interfaceなどでも特集が組まれたりしているので、始めたい人は購入してみるのもいいかと思います。

ここでは、簡単な例を作っていきます。温度が30℃以上になると、画面が赤くなり、そしてブザーが鳴る&slackに通知なんてどうでしょう。簡易版IoT火災報知器の完成です!

from m5stack import lcd, speaker
from machine import I2C
import time
i2c = I2C(freq=400000, sda=21, scl=22)
while True:
   temp_byte = i2c.readfrom(72, 2)             # アドレス72番から2byte読み込み
   temp = int.from_bytes(temp_byte,"big")/128  # 温度換算
   print(temp)
   if temp > 30: 
       lcd.clear(lcd.RED)
       lcd.setColor(lcd.WHITE, lcd.RED)
       lcd.text(lcd.CENTER,lcd.CENTER, str(temp))
       speaker.volume(1)
       speaker.tone(freq=1000, duration=200)   # 30℃以上で
   else:
       lcd.clear(lcd.BLUE)
       lcd.setColor(lcd.WHITE, lcd.BLUE)
       lcd.text(lcd.CENTER,lcd.CENTER, str(temp))
   time.sleep(5)

こんな感じで、警報が鳴ります。もちろん、pythonを使えば通知を送ることも出来ます。

まとめ

いかがでしたか?ほんのちょっとでも、M5Stackの魅力が伝われば嬉しいです。

なお、M5Stackのユーザグループは開発者を中心にめちゃくちゃ活発で、日々アイディアツールが生まれています。このスピード感の速さも魅力の一つですね。とにかく、オールインワンマイコンとして今後も拡がりがありそうなので、みなさんも始めてみてはいかがでしょうか?

さて、少し日数を割きましたが、マイコンに焦点を当てた話はここまでです。(本当はサーバー上で実装/処理できるマイコンobnizや、SIMを差し込めるWioLTEなどについても話したかったのですが、日数の都合、省略します。)

明日からは、いよいよローカルを離れ、クラウドに向かっていきます。

IoTサービスを考える上での要、「無線通信技術」に徹底解説します。お楽しみに!ではではっ

前の日 : 非エンジニアでもシステム構築可能。IoTのキラーアイテム『Node-RED』
次の日 :  IoTの中核部分「通信技術」の奥深さと可能性に迫る




サポートいただけると励みになります! よろしくおねがいします!!