********************************************************************** セッション S4-c テーマ:組込みシステム開発におけるFlashAirの活用     〜製品開発の事例・LED-Camp2実習教材のリアルタイムデバッグ〜 講師: 土居意弘(フィックスターズ)    柴田伸一(ユビキタス)    高瀬英希(京都大学) 日時:2014/8/29 13:00〜14:20 参加人数:約30人 ********************************************************************** ■概要  ・FlashAirとは、無線LAN機能を搭載したSDカード。  ・本セッションの前半では、FlashAirのアーキテクチャ概要やAPIを解説し、 FlashAirを搭載して開発した組込みシステム製品を紹介。  ・後半では、若手組込み技術者の教育を目的とした短期合宿であるLED-Camp2 の取り組みを紹介  ・LED-Camp2では、実習教材にFlashAirを搭載してシステムのモニタリングを 行った。その教材の構成やFlashAir活用の仕方を解説。 ■セッション構成 1.FlashAirの組込み開発事例  ・FlashAirの概要紹介と開発事例  ・ユビキタス社M2Mクラウドサービス 2.LED-Camp2の実施報告と実習教材の紹介 3.質疑応答、まとめ ■セッション1:FlashAirの組込み開発事例 土居意弘 ○FlashAirとは  ・半導体業界のラストサムライ東芝製のSDカード  ・FlashAir = フラッシュメモリー + 無線LAN + ウェブサーバー ○FlashAirでできること  1.データを無線でシェアできる  ・FlashAirの基本動作   -ホスト機器がファイルをFlashAirに書き込み、クライアント機器の ブラウザでFlashAirのデータを読み込む  ・写真をシェアできる   -カメラが書き込みを行い、スマホのブラウザで閲覧できる。  ・音楽をシェアできる   -ICレコーダーが書き込みを行い、スマホのブラウザで聞いたりデータの 配布ができる。  ・書類をシェアできる   -キングジムが製造したPomeraにFlashAirを接続すると、文書をEvernote にアップロードされてPanasonicが製造している電子黒板を用いて、 データを会議の場などで共有できる。  ・動画をシェアできる   -ドライブレコーダに入れた動画をシェアできる。   -JAFMATEがFlashAir対応のドライブレコーダを販売しているためそれを 利用する。  2.Webサーバーとして遊べる   ・HTMLをカスタマイズできる   ・WebサーバーそのものであるためHTTPでやり取りが可能    -ファイルリストはCGIで作成できる    -独自クライアントの作成が可能(例:閲覧アプリ)   ・ストリーミングサーバーとして使用する    -動画データをHTTP Live Streamingという形式に変換してFlashAirに 置くだけで再生できる    -新しめのスマホなら再生可能   ・サーバー設置方法    -FlashAirをSDカードスロットに入れて、電源につなげるだけ  3.電子工作に使える   ・センサーデータの記録と監視に利用できる    -センサーのデータをマイコン経由でFlashAirに書き込める。    -書き込まれたデータをスマホで読み出すことができる。   ・遠隔Lチカができる    -Lチカとは、LEDチカチカの略で電子工作のHelloWorldと呼ばれている。    -FlashAirとLEDをつなげて、FlashAirをWebサーバーとして立ち上げる。    -そのFlashAirに対してCGIで端子のH/Lを制御することができる。   ・電子工作事例1:音楽ストリーミングとLチカ    -Maker Faire BayAreaに出展した。    -音楽ストリーミング+Lチカを備えた専用基盤を開発。    -しかし、ボタン電池で動かそうとしたが電流が足りず、USBコネクタを つけてモバイルバッテリーを装着して動かした。    -音楽シェアの様子では、ストリートミュージシャン風にチェロを演奏 して音楽を気に入ってもらったお客さんはFlashAirからダウンロード してもらうという形で行った。    -課題点がたくさん出てきた     ・電源が不安定     ・ネットワークの混雑が発生     ・チェロに対してFlashAirは非常に小さいので、何のデモをしているのか 分かりにくい   ・電子工作事例2:遠隔クレーンゲーム    -専用アプリを用いて無線LAN経由でCGIを発行し、FlashAirが各ボタンの 信号をON/OFFする仕組み  4.無線LANアダプタのように使える   ・iSDIO規格    -付加機能付きSDメモリーカードをホスト機器から操作するAPI    -付加機能としては例えば無線LAN    -今年の春ごろに公開されたもの    -現在、対応製品はFlashAirだけ   ・FlashAirが対応するiSDIO API    -Scan:近傍の無線LANのSSIDを検索    -Connect:無線LAN APに接続    -SendHTTPMessageByRegister:HTTP通信 など多数   ・いろいろなことができるのだが、自分で調べるのは大変    →flashair-debelopers.comというWebサイトを展開     -公開されているすべてのAPIのリファレンスマニュアル、詳細解説が 載っている。     -チュートリアルとしてFlashAir対応のアプリの作り方を解説している。     -上級者向け情報として、ステーションモードの利用やFlashAirへの アップロード方法などを紹介している。これらはFlashAir Developersでしか見られない。     -一般の人が作ったアプリを集めたショーケースも掲載している。 (アプリショーケース)     -お互いの情報交換ができるデベロッパーフォーラムがある。英語版と 日本語版だと英語版の方が活気がある。     -flashair-developers.comではFlashAirの機能について順次公開中である。 ■質疑応答 <質問1> 初期型のFlashAirを持っているのだが、iSDIOの機能はファームウェアアップ デートで使えるようになるのか? <回答1> 使える。 初期型から機能自体は入っており、規格書の公開を待っていた。 ■セッション2:FlashAirとIoTクラウド"dalchymia"の連携 柴田伸一 ○アジェンダ  ・dalchymiaの簡単な紹介  ・FlashAirとdalchymiaを使ったデモシステム開発での出来事 ○dalchymiaとは  ・株式会社ユビキタスが開発したInternet of Things(モノのインターネット) の為のクラウドプラットフォーム  ・デバイスやセンサーを接続し、そのデータを蓄積する。  ・アプリケーションにより蓄積されたデータを利用してサービスすることを 想定して開発されたもの。   →簡単に言うと、データを溜めて取り出すバケツのようなもの。 ○開発したデモシステム  ・FlashAirを使って、Sensorデータをdalchymiaに上げてWebで表示する デモシステムを開発。  ・デモシステムの仕組み   -Arduinoに照度センサをつけ、取得したデータを定期的にFlashAirへ 書き込む。   -そのデータをデータが書き込まれたタイミングで、FlashAirからクラウド (dalchymia)に上げていく。   -受信したデータをフォーマットに変換してdata storeに保存する。   -data storeに保存されたデータを最終的にWebサイトで公開する。   -照度センサを温度センサなどに変えれば、様々な測定が可能。   →単純なシステムだが、開発にあたりハマってしまった。 ○ハマりその1:FlashAirのモード  ・FlashAirはデフォルトでは"APモード"で動作している。   →誰かがファイルを取りに来てくれることを想定しているサーバモード  ・dalchymiaもデバイスがデータを上げてくれることを想定している。 (サーバーなので当たり前)   ⇒デバイス側(FlashAir)はファイルを取りに来てくれること待っていて、 クラウド側(dalchymia)はデータを上げてくれることを待っている。 これではデータが上がらない。   -FlashAirに別のモードがあることが知らず、解決が難しい問題となって いた。  ・対応策   -FlashAir側に"ステーションモード"で動作し、かつdalchymiaへ通信する プログラムを実装 ○ハマりその2:データの受信  ・dalchymiaはデバイスからのデータを時系列でストリームとして扱う。   →時間とデバイス識別子と値で構成されるJSONでデータが送信されてくる ことを想定している。  ・ArduinoはFlashAirにCSVファイルを置いているだけで、FlashAirはファイル 単位でデータが送信されてしまうため、システムとしては何が来たか分からない。   →このままではデータを上げられない  ・対応策   -dalchymia側に受け取ったCSVファイルをパースしてdalchymiaのフォーマット (JSON)に変換して、Postするサーバを作成。  ⇒FlashAirとdalchymiaが通信して、データをアップする環境が整う   次は、デバイス側の準備を行う ○デバイス(Arduino)とデータ表示用Web  ・今回はArduinoで照度センサーのデータをCSVファイルにして、FlashAirに 書き込むプログラムを作成する。  ・Arduino自体は時計の機能がないため、今回は時計のモジュールを実装。  ・さらに、センサーからFlashAir経由で送信されて来ているデータを表示する Webを準備する。  →あとは、これらを繋げば完成。 ○まとめ  ・IoTではストリームデータが主体である。  ・今回のシステムではその前提が覆される形となった。  ・しかし、方法を変えることによりFlashAirのような通信デバイスもIoTの フィールドで活用の可能性がある。   -ネットワークにつながっていないが、SDカードのスロットはあるという 機器もあるためそちらに応用できるのではないか。  ・簡単に通信できることは非常に魅力的 → 今後さらに応用を考えていきたい。 ■質疑応答 <質問1> 無線機能付きSDカードはWi-Fiなど他にもいろいろあり、SDカードに限る必要は 無いと思うが、今回はなぜFlashAirを使用したのか? <回答1> 様々な要因があるが、特にデバイスとWebサーバーとの通信を確保させることが 困難であり、FlashAirは元々Wi-Fi機能も備えているため、 うまく応用すれば通信確保が容易にできるのではないかということが元々の 発想である。 <質問2> ファイルアップロードについて、ファイルをArduinoからFlashAirに上げる ときは差分だけを上げているのか? <回答2> 毎回新しいファイルが上げられるので、前回上がったファイルのフレーム差分を 覚えておいて、それより新しいタイミングのファイルが アップロードされる。また、ある程度の範囲の情報だけを残すようにしている。 <質問3> ファイルの消去方法は? <回答3> ファイル消去用の小さなプログラムを仕込んである。 ■セッション3:LED-Camp2の実施報告と実習教材の紹介 高瀬英希 ○LED-Campとは  ・Learning Embedded software Development Camp  ・組込みの初心者に実施させる教育プログラム   -組込みの"Hello World!!"は、LEDの点滅制御にあたる。 ○LED-Camp2開催概要  ・目的:次世代の組込み技術者の育成  ・参加対象:組込みシステム開発に興味のある方   -社会人:若手の方(今年は年齢制限なし)   -学生:学部生〜修士学生相当   -最新の開発技術に興味のある方   -組込み技術者のネットワークを形成したい方  ・実施形態:2泊3日の短期集中合宿   -場所:下呂温泉 山形屋   -期間:2014年8月26(火)〜28日(木) ○LED-Camp2の教育目標  1.新しい開発技術に触れる機会の提供   -有益な最新技術を開発現場に持ち帰ってもらう  2.組込みソフトウェア開発技術の習得   -マイコンを使いこなすための基礎知識を身に付ける  3.プロジェクトファシリテーション能力の獲得   -プロジェクトをいかにうまく回せるかという能力を養成  4.参加者間のコミュニティの形成(裏テーマ) ○カリキュラムの大枠  ・動くモノを作ることを第一に考える   -動いたほうが見た目も取り組むほうも面白く実施できる。   -LEDが点滅しているだけだと、ちょっと微妙...   -特に上流設計に重点を置く→モデル駆動開発(MDD)の導入  ・定められたテーマとプロセスに基づいたチーム開発を行う   -テーマ=作るモノ(実習教材システム)   -プロセス=アジャイル開発プロセスの1つであるScrumを利用  ・初対面のメンバ同士でチーム開発に取り組む   -開発メンバは自分たちで決める! ○LED-Campの合宿スケジュール  ・1日目(8月26日)   -ガイダンス   -開発チームの結成とチーム目的の形成   -チームワークを試すチャレンジを実施   -Scrumによる開発実践を行いチームで効率よく開発を行うためにどうすれ ばよいかを考える。   -実習教材の理解とシステムのチューニングをしながら、まずは"泥臭く" 開発してみる。  ・2日目(8月27日)   -モデル駆動開発概要と実践演習→MDDの導入による開発の促進   -これまでの演習を踏まえてチーム開発実習に取り組む  ・3日目(8月28日)   -引き続きチーム開発実習に取り組む。   -SWEST16の基調講演に参加   -成果報告会と競技会で開発成果を披露する。 ○LED-Camp2実施報告 ・チームビルディングの基礎と実践  講師:飯島邦子(プロセスラボラトリー)、星野利夫(SWEST16実行員会)  内容:ファシリテーションとは何か、チームビルディングとは何かの講義を 行い、実際にチームを作っていった。チーム目標を考えていった。 ・Scrumによる開発実践  講師:細合普太郎(九州大学)  内容:Scrumとは何かの講義を行い、実践の練習。 ・組込みシステム開発の勘所と実践  講師:高瀬英希(京都大学)  内容:組込みシステム開発で気をつけなくてはいけないことの解説 ・モデル駆動開発概要と実践演習  講師:細合普太郎(九州大学)、岡山直樹(LED-Camp実行委員会)  内容:MDDの概要と実践の練習 ・チーム開発実習  -3人1チームで実習を行う。  -要求仕様:競技会で走るコースを走破できるロボットのプログラムを作る ような仕様を満たすのソフトウェアの開発  -開発教材:iRobot Create(掃除機型ロボット)の挙動制御   ・Arduinoにより制御を実現   ・astahによりコード実現 ・成果発表会  -コンセプトシートの展示と競技会を行った。  -競技会のイメージ:スタート地点にロボットがいて、A,B,Cの3地点に到達する プログラムを作る   ・A,B,Cの到達順序はスタート直前に知らされるので、それに合わせて ロボットを動かす。   ・到達までの時間指定や障害物あり  -3日間の開発成果の優れた3チームを表彰 ○LED-Camp2実習教材でのリアルタイムデバッグ  ・LED-Camp1でのデバッグ風景   -Kobukiという韓国が製造したルンバを使用した。   -ArduinoとノートPCをケーブル接続    →有線なのでKobukiが動作したらノートPCも動作に合わせなくてはなら なくて不便である。   -Arduinoシリアルモニタで値を出力しデバッグを行う。  ・LED-Camp2でのデバッグ風景   -FlashAirの導入により無線でデータ通信が可能となり、Webブラウザ上で リアルタイムで値が表示できる。  ・デバッグ手順   1.Arduino+SD ShieldとCreateを接続   2.Createの電源を投下   3.FlashAirのWi-Fiに接続   4.WebブラウザでFlashAirにアクセス http://flashair/ ○実習教材のデモ ○FlashAirで実現できたこと  ・リモートなデバッグによりUSBケーブルを使う必要がなくなった。  ・システムの振る舞いを目視しながらセンサ値を確認でき、リアルタイムな デバッグが可能となった。   -特にCreateはかなり個体差が大きいため、同じAPIでも動作が違ってくる。 また、スマホ等でもブラウザ表示できる。   -遅延がないわけではないが"気になるかもしれない"程度である。 (2〜3秒程度) ○FlashAirデバッグの問題点  ・Wi-Fiアクセスの不安定さがある。   -初期接続までに数秒のタイムラグが発生する。   -安定した電圧(電流)をCreateから与えないといけない。   ・最初はコンデンサを挟むことで解決したように思われたが、結局うまく いかずモバイルバッテリーでArduinoに給電することで解決   -APに囲まれた環境では接続が不安定になることもある。  ・デバッグのためのオーバーヘッドがかなり大きい  ・Webサーバーが内蔵されているが、1リクエストずつ逐次処理されていくため 内部データを見る際に待ち時間が発生   -複数の人がアクセスした場合、順番待ち状態になってしまいストレスが 溜まってしまう。   -APモードのときは同時接続数上限があるため、運用上においてはかなり 問題となってしまう。  ・SDカードスロットを確保する必要がある。 ○FlashAirのさらなる活用案  ・リモートで制御コマンドを送信する。   -upload.cgiをうまく使えば可能ではないか?  ・リモートプログラムのダウンロード   -Arduinoはブートローダまでを手に入れれば可能かもしれない?   -Linuxベースのシステムでは意義が大きいかも? ■質疑応答 <質問1> 今回のLED-Camp2では、実際にFlashAirを使用してデバッグを行った人はいたのか? <回答1> デバッグ画面を使用していた人は若干いた模様であった。 <質問2> 無線でFlashAirに複数つなげた場合はどのようなトラブルが発生したのか? <回答2> 今回は接続の安定性を確保するために"ステーションモード"(LANルーター通信の 仲介をしてくれる)を使用したが、ルーターがボトルネックとなった。 つながりにくい状態が何回か続いた。ただ、はっきりとした原因は分からない。 以上