IoT始めてみました
そういえばIoTってやったことないなと思って今更ながら試して見ることにしました。
IoTの知識としては、Arduinoやラズパイという小さいパソコンとセンサーを組み合わせてLEDや音を鳴らしたり、温度や湿度を取ったりということが出来るもの、というレベルです。
あと、SORACOMさんがIoT用のSIMサービスやってたなと。
まぁ何はともあれやってみないと何が出来て何が出来ないのか、そして、IoT技術周りの用語を理解することもできないのでまずはいじってみることにします。
IoT機器は先程挙げたものを筆頭に色々とあるのですが、今回はArduinoベースでディスプレイやWi-Fi、Bluetoothが最初から内蔵されているM5Stackというものを使って見ることにしました。
小さくてかわいいですね。電源を入れると起動音と共にディスプレイにも賑やかな表示がされてテンション上がるのですが、色々といじってるうちにこの起動画面の出し方が分からなくなってしまいました😅
スイッチサイエンスさんで購入可能なのですが、品薄が続いているらしく、僕はAmazonで購入しました。今見たらAmazonも品切れですね。3,900円でした。
M5Stackはいくつか種類があるのですが、これは一番標準的なBasicです。この他に9軸センサの付いたGray、センサがセットになったM5GO IoTスターターキット、9軸センサが付き、さらに改良されたFireがあります。
まずは環境設定
同梱されていた説明書に沿って開発環境を整えるのですが、これがめちゃ小さい上に、情報が古く、既に使えないものとなってました。
この辺は本家のドキュメントを参照しながら整えました。初めてみてから分かったのですが、ドキュメントがどこにあるか分かりにくかったり、古かったりと、そういった意味で苦労する点はあります。
スイッチサイエンスさんのページに資料としてリンクがまとまっているので、ここを見ながら進めるのが良いでしょう。と言いつつ、ドキュメントにはArduino IDEとUIFlowしか載っていません。
前準備としてまずPCにM5Stackを認識させる必要があります。
Get StartedはこちらのGitHubを見るのが良いでしょう。しかし、これまた一筋縄では行かず。。M5Stackを認識するためにドライバをインストールする必要があるのですが、ドキュメントに載っているCP210X driverをインストールしても認識されません。。
~ > ll /dev/tty.*
crw-rw-rw- 1 root wheel 9, 6 Mar 23 17:23 /dev/tty.Bluetooth-Incoming-Port
crw-rw-rw- 1 root wheel 9, 0 Mar 23 17:23 /dev/tty.YoonchulAirPods-Wireles-1
crw-rw-rw- 1 root wheel 9, 2 Mar 23 17:23 /dev/tty.YoonchuliPad-WirelessiAP
crw-rw-rw- 1 root wheel 9, 4 Mar 23 17:23 /dev/tty.yunyuniPhone-WirelessiAP-1
本来ならば /dev/tty.SLAB_USBtoUART が表示されるはずです。
色々とググってみると、こちらのGitHub Issueが見つかりました。この中で紹介されているドライバでやっと認識することが出来ました。
~ > ll /dev/tty.* Mon Mar 23 22:13:43 2020
crw-rw-rw- 1 root wheel 9, 6 Mar 23 17:23 /dev/tty.Bluetooth-Incoming-Port
crw-rw-rw- 1 root wheel 9, 10 Mar 23 22:14 /dev/tty.SLAB_USBtoUART
crw-rw-rw- 1 root wheel 9, 0 Mar 23 17:23 /dev/tty.YoonchulAirPods-Wireles-1
crw-rw-rw- 1 root wheel 9, 2 Mar 23 17:23 /dev/tty.YoonchuliPad-WirelessiAP
crw-rw-rw- 1 root wheel 9, 4 Mar 23 17:23 /dev/tty.yunyuniPhone-WirelessiAP-1
認識した!
ちなみに環境はMacBook Pro (15-inch, 2018) macOS Catalina Version 10.5.2です。
今見つけたのですが、初期設定はこの記事が良くまとまっていました。最初に見つけていれば苦労しなかったはず。。
M5Stackの開発環境はArduino IDEとUIFlowがあります。UIFlowの方が後発で、GUIで画面開発や、ブロックプログラミングができます。開発言語はArduino IDEですとCライクなProcessing。UIFlowの場合はmicroPythonが使用可能です。
UIFlow
Arduino IDE
僕が買ったM5StackはBasicで古いタイプなので、そのままでは対応していないのですが、ファームウェアを書き換えることで対応できます。
新しい方がいいだろうとUIFlowを試してみたのですが、Wi-Fi経由での書き込みがなぜか3/4回くらい失敗するため、大人しくArduino IDE x 有線に戻しました。
Arduino IDEにはサンプルもたくさん用意されているので一通り動かしてみました。といってもM5Stack単体だとセンサーが無いのでフラッピーバードやテトリス辺りを動かして、おお!動いてる!と遊んでました。
とりあえず何か作ってみる
さて、センサーも無く何をしようかなと思ったのですが、とりあえずこれ単体でWi-Fiに繋がるのでhttp通信は試してみたくなりますよね。
ということで、簡単な通知アプリを作ってみました。
M5Stack→IFTTT→LINE Notifyという構成です。
言い忘れていたのですが、M5Stackだとボタンも標準装備されています。素のArduinoだと、ボタンを実装するところからやらなければいけないので、これは大分楽チンですね。
ちょっと衝撃だったのが、接続先Wi-FiのSSIDとパスワードをコードにベタ書きするということ。Wi-Fiを選ぶUIも無いので当然なのですが、初めての経験でした。
const char* ssid = "xxxxxxxxxxxx";
const char* password = "yyyyyyyyyyyy";
WiFi.begin(ssid, password);
こんな風にM5Stackはhttp通信でさえ簡単に実装できてしまうのですが、その分電子工作感は薄れてしまうのが難点。
やっぱり基板を見たいですよね。そんな時はM5Stackを開けてみましょう。
なんともコンパクトに収まってますね。左が液晶部分で、右が底になります。
40本のピンで繋がってることがわかると思います。ここに別売りの拡張モジュールを縦に積んで(Stack)いくことで機能を追加していくことができます。
また、Grove端子に対応しているので、Grove端子が付いているセンサーは簡単に接続できます。もちろん他のセンサもブレッドボードやジャンパピンは必要になりますが、通常のArduino同様に接続できます。
触って見るまでは分からないことだらけで億劫だった部分がありますが、やってみると意外と難しく無く(ドキュメント探しは大変だけど)、アイデアさえあれば割と簡単に実装できそうだなと思いました。
そのアイデアが難しいんですけどね、、
IoTに関する実装以外の周辺知識
実装以外のIoTに関する知識も身につけたいと思ったので本も色々読んでみました。例えばセンサデータはとても小さいけれど定期的に送り続けるので馬鹿にならなかったり、そのデータをどう活かすかというBIを考えなければいけなかったり、ビジネスにするにはデータのセキュリティまで考える必要があったりと。
考えてみれば確かに、と思うものの全然考えてなかったことが知れてよかったです。
だいたいは立ち読みで済ませてたのですが、これだけは買ってみました。なかなか良くまとまっていたのでこれからIoT始める方にはおすすめだと思います。
さて、次はセンサを使って何か作ってみたいと思います。
サポートはもちろんですが、スキもしくはフォローしていただけると嬉しいです!