hogehoge, world.

米国カリフォルニアのソフトウェアエンジニアがIT・自転車・音楽・天体写真・語学などについて書く予定。

Particle Mesh: Early Adopterはつらいよ (3) ~ 体験レポート

前回消費電流の話を先にしてしまったので、今回こそは体験レポを書いて「Early Adopterはつらいよ」にオチを付けることにする。

セットアップ

Particleアカウントの作成

クラウド上にデバイスを登録したり自分のワークスペースを持つためにParticleアカウントを作る。うんうん、今風だね。

Argonの登録

まずWiFiゲートウェイとなるArgonを登録する。スマフォにParticleアプリをインストールし、Argon上のQRコードをカメラで読み取らせ、WiFi接続先設定やデバイス名入力などの登録手続きを行うと、Web上の管理画面に自分の登録済みデバイスとして表示される。今風のexperienceでテンション上がる。

ArgonはMesh Networkの親玉になるので、ネットワーク名や接続パスワードの設定もここで行う。途中で「$2.99/ネットワーク/月をお前のクレジットカードから引き落とすぜ」とメッセージが出てちょっとひるむが、「最初の10ネットワークまでは無料」というのをよくよく確認して次に進む。

ちなみに現時点でひとつのMesh NetworkにArgonは一つしか存在できないゲートウェイ冗長化はできないし、ArgonをXenonと同等の一般ノードとして使うこともできない。大は小を兼ねると思ってXenonよりArgonを多く注文したのだが、当てが外れた。(´・ω・`)

Xenonの登録

次にMesh Networkに参加させるXenonを登録する。Argonと同様にスマフォアプリを使い、Xenon本体と、ゲートウェイとなるArgonの(もしくは既にMesh Networkのメンバーとなっている他のXenonの)QRコードを読み取らせて登録手続きを行う。

これも今風でかっちょいい手順のはずなのだが、ところがどっこい登録処理が途中でフリーズしまくりでテンションだだ下がりである。

入手時点のファームウェア 0.8.0-rc.25 では、そもそもうちのWiFiルーターではどうやってもつながらない不具合があった。さんざんハマった末この不具合に行きつき、それまで眠らせていた別のWiFiルーターを持ち出してなんとか接続まで行きついたが、それでもXenonとArgonの距離が30cm離れるともうつながらないくらいひどかった。

ファームウェア 0.8.0-rc.26 のリリースでこの不具合は修正されたが、その後も登録途中でフリーズする現象はよく発生する。運よく成功するまでやり直す必要があるので筆者はこれをリセットガチャと呼んでいるが、非常にfrustratingである。

クラウド連携

Particle Meshの目玉はクラウド連携、つまりWeb IDEで開発したコードをOTAでデバイスに流し込めたり、クラウドとデバイスとの間でシームレスに関数呼び出し・変数読み書き・イベントのPub/Subができるところにあるわけだが、これが全然信頼できない。Argonはまあそれなりに繋がるのだが、Xenonとの間は筆者の経験的には絶望的だ。

Xenonとクラウドとの接続は、Argonの隣にXenonを置いてリセットガチャした直後は通るのだが、数分~数十分後にはいつのまにか通らなくなっている。Webコンソール上の「PING」ボタンも無反応だし、CLIからのparticle nyan*1も通らない。XenonのステータスLED的には、「クラウドにちゃんとつながっていますよ」を表すcyan breath*2になっていることもあれば、「Mesh Networkにはつながっているがクラウドにはつながっていない」を表すcyan flash*3になっていることもあるが、とにかくつながらない。こんな状態なので、Xenonのアプリケーションはクラウド接続には期待せずMesh Networkのみ前提で書くのが現実的である(詳細は後述)。

一方Argonとクラウドとの接続は、バックエンドではそこそこ安定しているように見える。ArgonからクラウドにpublishしたイベントはREST APIからちゃんと読み出せるし、CLIによるクラウド経由の操作も概ね期待通りに通る感覚である。ただWebコンソールからの操作は通らなくなることがよくあり(例えば明らかにArgonからイベントは届いているのにPINGボタンには無反応になるなど)、これはWebコンソールの品質問題のように見える。筆者の感覚的にはWebコンソールからのクラウド連携機能はイベントビューワー以外信頼できない。

開発&OTAでのコード流し込み

Particle Meshの開発環境でまず注目すべきはWeb IDEである。筆者的には「Web IDE上でコードを書いて、ボタン一発でデバイスにOTAで流し込める」というのは超テンション上がるのだ!しかしまぁ、残念なことに動かないったらありゃしない。最初の何回かは「おぉ~!」と喜んでやるのだが、そのうちバイス側のリセットガチャ+Webブラウザ側のリロードガチャを繰り返して運がいいときだけ通るのでテンションだだ下がりになる。さらに言うとGitHub連携できない、アプリケーション間で共有するコード(ライブラリ)を作りたければCLIからでないとできないなど、すぐに使わなくなる類のガジェットである。

というわけで、筆者はCLIを今のところメインで使っている。

particle project create <プロジェクトフォルダ>

でプロジェクトを作り、コードを書いて

particle compile <デバイスタイプ> <プロジェクトフォルダ>

コンパイルする。ちょっと注意したいのはコンパイラがオンライン、つまりローカルにコンパイラがあるわけではなく、ソースファイルをクラウドにアップロードしてコンパイル→バイナリをダウンロードするという動きになること*4

そして生成されたバイナリを

particle flash <デバイス名> <バイナリファイル名>

でデバイスにOTAで流し込む。

CLIによるOTAは、筆者の経験的にはArgonではそこそこ安定して通るし、XenonはArgonの隣まで持ってきてリセットガチャすれば概ね通る。リセットガチャで「はずれ」が続いた場合、諦めてUSBケーブル経由でflashする。これで一応生きてはいけるが、結局「とことこ歩いてXenonを回収してArgonの隣に持って来ないといけない」ので、OTAのありがたみは全然なくテンションは下がったままである。いやまぁクラウド上に登録されたデバイス名を言ってソフトウェアを流し込めるって、マイコン世界においてはそれだけで相当に画期的だとは思うのだけれど、それとexperienceあるいはテンションとは残念ながら別ものなのである。

なおWorkbenchと呼ばれるデスクトップIDEもあるようだが、筆者は試していない。

LiPo電池の極性に注意!

データシートに書いてあるのだが、筆者は見事にハマってしまったので強調しておく: LiPo電池の極性は右側(USBコネクタ側)が黒なので注意!間違えて逆のものを挿したら一瞬でLiPoチャージャーが壊れた。どうもLiPoチャージャーはAdafruitのこのへんと同等品のようで、これは保護回路が入ってないらしく、Amazonのレビューには「逆の極性のものを挿したら焼けた」という声が幾つもある。幸いデバイス全体が壊れることはなかったが、運がよかっただけかもしれないので良い子の皆は絶対やらないように!

この極性はAdafruit派らしく、Particleから直接購入したりAdafruitから購入したLiPo電池であれば問題ないが、Amazon等から適当に買うとどちらの極性のものが来るかわからない。逆だった場合にはコネクタから一度ピンを抜いて挿し直せばOK。 

現実的なアプリケーションの書き方

長くなったので詳細は次回に回そうと思うが、家の暖房効率モニタを作って連続稼働させた経験からは、次のような注意が必要である。

  • Xenonとクラウドとの間の通信には頼らない。XenonはArgonとだけ(Mesh Network内でのみ)通信し、クラウドとの通信はすべてArgonから行う。
  • ArgonにはWatchdogを仕込んでおく。原因はわからないが突然Argonがフリーズすることがあった。Argonが止まるとすべてが止まる。
  • 動的メモリ割り当てがかなりダメらしく、Stringは使うべきではないらしい。

まとめ

「上がったテンションだだ下がり」と言ってはいるものの、そもそもこれほどテンション上がるものを出して来るParticleはそれだけで大したものなのである。例えばWeb IDEは結局使えないものだとしても、あれがなければ筆者はParticle Meshを「すげぇ!」とは思わなかったはずである。実装が追い付いていないものの、わくわくさせるビジョンをかたちにしているのは間違いない。それを汲んで先を見ているからこそ、文句を言いつつこれだけの時間を費やしてハマり、解決策を探し、レポート書いているのが我ら人柱、否Early Adopterの性というわけである。

次回はアプリケーションの書き方についてもう少し詳しく説明してみたいと思う。

*1:ステータスLEDをぴかぴか光らせる操作。クラウド経由でコマンドが飛ぶ。

*2:breath=息をするようなゆっくりした点滅

*3:flash=速い点滅

*4:ちなみにアプリケーション間でコードを再利用したければライブラリを作るわけだが、これもアップロードという操作をして初めてアプリケーションから使える状態になる。めんどくさいが、なるほど。