toshibaxgugen flashairハッカソン-flashairでなに作る?

52
2015-04-11 TOSHIBA x GUGEN FlashAir Hackathon FlashAirでなに作る? 土居 意弘@株式会社フィックスターズ 下記の画像素材を使わせていただきました!感謝!! ・BUFFALO製品写真ダウンロードサービス ・日経パソコン オンライン「テンプレート」コーナー ・Wikipedia Phil Hollenback - http://www.flickr.com/photos/phrenologist/164593940/ ・ICON HOIHOI ・http://www.toshiba.co.jp/p-media/flashair/

Upload: flashair

Post on 16-Jul-2015

1.993 views

Category:

Technology


3 download

TRANSCRIPT

Page 1: TOSHIBAxGUGEN FlashAirハッカソン-FlashAirでなに作る?

2015-04-11

TOSHIBA x GUGEN FlashAir Hackathon

FlashAirでなに作る?

土居意弘@株式会社フィックスターズ

下記の画像素材を使わせていただきました!感謝!!・BUFFALO製品写真ダウンロードサービス・日経パソコンオンライン「テンプレート」コーナー・Wikipedia

Phil Hollenback - http://www.flickr.com/photos/phrenologist/164593940/

・ICON HOIHOI・http://www.toshiba.co.jp/p-media/flashair/

Page 2: TOSHIBAxGUGEN FlashAirハッカソン-FlashAirでなに作る?

自己紹介

土居 意弘ど い むね ひろ

得意技:

開発者サイト FlashAir Developersの運営

FlashAirアプリの開発

FlashAirの変な使い方の開拓

映画アルマゲドンのテーマを熱唱すること

株式会社フィックスターズストレージ事業部

ディレクター

TOSHIBA x GUGEN FlashAir Hackathon

2

Page 3: TOSHIBAxGUGEN FlashAirハッカソン-FlashAirでなに作る?

今日の話

TOSHIBA x GUGEN FlashAir Hackathon

3

FlashAirとは 実は超ミニマイコン

開発者情報公開中 ひろがるコミュニティ

Peripheral

HTTPClient

SD / iSDIO

SPI Wireless LAN

HTTP

HTTPServer

SDHost

Wireless LAN

HTTP機器による

PIO

Page 4: TOSHIBAxGUGEN FlashAirハッカソン-FlashAirでなに作る?

FlashAirとは

TOSHIBA x GUGEN FlashAir Hackathon

4

メモリ 無線LAN ウェブサーバ

Page 5: TOSHIBAxGUGEN FlashAirハッカソン-FlashAirでなに作る?

もっとも基本的な使い方は・・

TOSHIBA x GUGEN FlashAir Hackathon

5

写真を撮ったら、シェア

カメラに入れたFlashAirから、スマホにデータを送る

Page 6: TOSHIBAxGUGEN FlashAirハッカソン-FlashAirでなに作る?

仕組みはこう

TOSHIBA x GUGEN FlashAir Hackathon

6

1. ホスト機器がファイルを書込み

2. クライアント機器からデータを読込み

SD I/F HTTP

over WLAN

Page 7: TOSHIBAxGUGEN FlashAirハッカソン-FlashAirでなに作る?

他にもこんな風に使えます

TOSHIBA x GUGEN FlashAir Hackathon

7

音楽をシェア

資料をシェア

動画をシェア

Page 8: TOSHIBAxGUGEN FlashAirハッカソン-FlashAirでなに作る?

TOSHIBA x GUGEN FlashAir Hackathon

8

しかし、これはFlashAirができることのほんの一部です

Page 9: TOSHIBAxGUGEN FlashAirハッカソン-FlashAirでなに作る?

実は超ミニマイコン!!

TOSHIBA x GUGEN FlashAir Hackathon

9

メモリ 無線LAN ウェブサーバ

GPIO

Luaインタプリタ

Page 10: TOSHIBAxGUGEN FlashAirハッカソン-FlashAirでなに作る?

こんなことができます

無線– APモードで起動– STAモードで起動– AP+STA同時起動– 無線切断– SSIDのスキャン

HTTP– HTTPリクエストの発行

スクリプト– Luaスクリプト実行

PIO– SD端子のPIO制御

Webサーバー– ファイルのダウンロード– ファイルのアップロード– 標準HTMLのカスタマイズ– CGIによる情報取得

SD– 内蔵フラッシュメモリのファイル読み書き

その他– 作業用SRAMの読み書き

TOSHIBA x GUGEN FlashAir Hackathon

10

Page 11: TOSHIBAxGUGEN FlashAirハッカソン-FlashAirでなに作る?

アプリ作成方法は3種類

制御する機器によってできることが違います

(1) HTTPによる制御

(2) iSDIOによる制御

(3) Luaスクリプトによる制御

同時に使うことも可能

11

TOSHIBA x GUGEN FlashAir Hackathon

Peripheral

HTTPClient

SD / iSDIO

SPI Wireless LAN

HTTP

HTTPServer

SDHost

Wireless LAN

HTTP機器による

PIO

プロトコル

接続

Page 12: TOSHIBAxGUGEN FlashAirハッカソン-FlashAirでなに作る?

(1) HTTPによる制御

TOSHIBA x GUGEN FlashAir Hackathon

12

Peripheral

HTTPClient

SD / iSDIO

SPI Wireless LAN

HTTP

HTTPServer

SDHost

Wireless LAN

HTTP機器による

PIO

プロトコル 接続

スマホアプリなど

Page 13: TOSHIBAxGUGEN FlashAirハッカソン-FlashAirでなに作る?

HTTPによる制御でできること

無線– APモードで起動– STAモードで起動– AP+STA同時起動– 無線切断– SSIDのスキャン

HTTP– HTTPリクエストの発行

スクリプト– Luaスクリプト実行

PIO– SD端子のPIO制御

Webサーバー– ファイルのダウンロード– ファイルのアップロード– 標準HTMLのカスタマイズ– CGIによる情報取得

SD– 内蔵フラッシュメモリのファイル読み書き

その他– 作業用SRAMの読み書き

TOSHIBA x GUGEN FlashAir Hackathon

13

Page 14: TOSHIBAxGUGEN FlashAirハッカソン-FlashAirでなに作る?

コンテンツ閲覧アプリ

TOSHIBA x GUGEN FlashAir Hackathon

14

HTTP通信でデータ取得リスト情報もCGIで

Page 15: TOSHIBAxGUGEN FlashAirハッカソン-FlashAirでなに作る?

Webサイトを作ってしまう

TOSHIBA x GUGEN FlashAir Hackathon

15

写真を配信(オレオレFlickr)

動画ストリーミング(オレオレYouTube)

HTTP Live Streaming形式でFlashAirに置く

Page 16: TOSHIBAxGUGEN FlashAirハッカソン-FlashAirでなに作る?

Webサーバー設置の最小構成

TOSHIBA x GUGEN FlashAir Hackathon

16

AC adapter/

battery

USB card adapter

Page 17: TOSHIBAxGUGEN FlashAirハッカソン-FlashAirでなに作る?

センサーデータの記録と監視に

TOSHIBA x GUGEN FlashAir Hackathon

17

センサーマイコン FlashAir スマホ

照度センサー (CdS)

Page 18: TOSHIBAxGUGEN FlashAirハッカソン-FlashAirでなに作る?

センサーデータの記録と監視に

TOSHIBA x GUGEN FlashAir Hackathon

18

マイコン側// 値を読む

val = analogRead(0);

// ファイルに書き込む

myFile = SD.open("test.txt",FILE_WRITE);

if (myFile) {myFile.println(val);myFile.close();

}

// ファイルを読み出す

$.ajax({type: 'GET',url: ‘test.txt’,datatype: 'text',success: function(data,

dataType) {// グラフ書く

drawCharts(data);// 2秒ごとに繰り返す

setTimer(poll, 2000);});

スマホ側

Page 19: TOSHIBAxGUGEN FlashAirハッカソン-FlashAirでなに作る?

Arduino + 照度センサセンサが計測した照度データ(テキスト)をFlashAirに格納。JavaScriptを使って、タブレット側のブラウザでグラフ化して表示

さらに応用例

iRobot CreateiRobot Create(教育用のルンバ型ロボ)の動作情報をFlashAirに格納。タブレットで表示し、デバッグに活用。※京都大学 高瀬准教授・細合様ご協力

TOSHIBA x GUGEN FlashAir Hackathon

19

Page 20: TOSHIBAxGUGEN FlashAirハッカソン-FlashAirでなに作る?

CGIで端子のH/L出力を制御

Pin SD

1 CD/DAT3

2 CMD

3 VSS1

4 VDD

5 CLK

6 VSS2

7 DAT0

8 DAT1

9 DAT2

ビット割当CMD : 0x01D0 : 0x02D1 : 0x04D2 : 0x08D3 : 0x10

SDインターフェイス端子を、汎用I/O信号端子として利用できます!(FW2.00.03~)

SDカード端子

マニア垂涎!!TOSHIBA x GUGEN FlashAir Hackathon

20

Page 21: TOSHIBAxGUGEN FlashAirハッカソン-FlashAirでなに作る?

応用例1:遠隔 Lチカ

TOSHIBA x GUGEN FlashAir Hackathon

21

電源LED FlashAir

※ Lチカ=LEDチカチカの略。電子工作のHello World

Page 22: TOSHIBAxGUGEN FlashAirハッカソン-FlashAirでなに作る?

点灯、消灯の方法

TOSHIBA x GUGEN FlashAir Hackathon

22

http://flashair/command.cgi?op=190&CTRL=0x02&DATA=0x02 H 点灯

http://flashair/command.cgi?op=190&CTRL=0x02&DATA=0x00 L 消灯

ブラウザで次のURLにアクセス

Page 23: TOSHIBAxGUGEN FlashAirハッカソン-FlashAirでなに作る?

応用例2:遠隔クレーンゲーム

TOSHIBA x GUGEN FlashAir Hackathon

23

Page 24: TOSHIBAxGUGEN FlashAirハッカソン-FlashAirでなに作る?

しくみ

TOSHIBA x GUGEN FlashAir Hackathon

24

某アンパン顔のキャラクタの子供用クレーンゲームを改造

専用アプリで無線LAN経由でCGI発行

FlashAirが各ボタンの信号をON/OFFする

Page 25: TOSHIBAxGUGEN FlashAirハッカソン-FlashAirでなに作る?

(2) iSDIOによる制御

TOSHIBA x GUGEN FlashAir Hackathon

25

Peripheral

HTTPClient

SD / iSDIO

SPI Wireless LAN

HTTP

HTTPServer

SDHost

Wireless LAN

HTTP機器による

PIO

プロトコル 接続

Arduinoなど

Page 26: TOSHIBAxGUGEN FlashAirハッカソン-FlashAirでなに作る?

iSDIOによる制御でできること

無線– APモードで起動– STAモードで起動– AP+STA同時起動– 無線切断– SSIDのスキャン

HTTP– HTTPリクエストの発行

スクリプト– Luaスクリプト実行

PIO– SD端子のPIO制御

Webサーバー– ファイルのダウンロード– ファイルのアップロード– 標準HTMLのカスタマイズ– CGIによる情報取得

SD– 内蔵フラッシュメモリのファイル読み書き

その他– 作業用SRAMの読み書き

TOSHIBA x GUGEN FlashAir Hackathon

26

Page 27: TOSHIBAxGUGEN FlashAirハッカソン-FlashAirでなに作る?

ArduinoからSSIDスキャン

TOSHIBA x GUGEN FlashAir Hackathon

27

void iSDIO_scan(uint32_t sequenceId) {memset(buffer, 0, 512);uint8_t* p = buffer;p = put_command_header(p, 1, 0);p = put_command_info_header(p, 0x01, sequenceId, 0);put_command_header(buffer, 1, (p - buffer));printHex(buffer, (p - buffer));card.writeExtDataPort(1, 1, 0x000, buffer);

}

void iSDIO_showScanResult() {card.readExtDataPort(1, 1, 0x200, buffer);uint8_t* p = buffer + 24 + 4;uint8_t num = get_u8(p);Serial.print(F(“# of SSIDs: "));Serial.println(num);p += 3;for (uint8_t i = 0; i < num; i++){printString(p, 32);p += 44;

}}

※擬似コードです

スキャン命令の発行

スキャン結果の取得

Page 28: TOSHIBAxGUGEN FlashAirハッカソン-FlashAirでなに作る?

応用例:電車模型

TOSHIBA x GUGEN FlashAir Hackathon

28

• 操作に加えて、在線情報フィードバック• 共有メモリを使って大容量の制御情報のやりとりを実現

Page 29: TOSHIBAxGUGEN FlashAirハッカソン-FlashAirでなに作る?

(3) Luaスクリプトによる制御

TOSHIBA x GUGEN FlashAir Hackathon

29

Peripheral

HTTPClient

SD / iSDIO

SPI Wireless LAN

HTTP

HTTPServer

SDHost

Wireless LAN

HTTP機器による

PIO

プロトコル 接続

Luaスクリプト

Page 30: TOSHIBAxGUGEN FlashAirハッカソン-FlashAirでなに作る?

Luaスクリプトによる制御でできること

無線– APモードで起動– STAモードで起動– AP+STA同時起動– 無線切断– SSIDのスキャン

HTTP– HTTPリクエストの発行

スクリプト– Luaスクリプト実行

PIO– SD端子のPIO制御

Webサーバー– ファイルのダウンロード– ファイルのアップロード– 標準HTMLのカスタマイズ– CGIによる情報取得

SD– 内蔵フラッシュメモリのファイル読み書き

その他– 作業用SRAMの読み書き

TOSHIBA x GUGEN FlashAir Hackathon

30

Page 31: TOSHIBAxGUGEN FlashAirハッカソン-FlashAirでなに作る?

Luaとは??

TOSHIBA x GUGEN FlashAir Hackathon

31

Luaは、パワフルで、高速で、軽量で、埋め込み可能な、スクリプト言語です。

Luaは、シンプルな手続き型構文をと強力なデータ記述構造を、連想配列と拡張可能なセマンティクスを用いて組み合わせています。 Luaは動的型付けであり、レジスタベースの仮想マシン向けのバイトコードを解釈することによって実行されます。また、インクリメンタルガベッジコレクションによる自動メモリ管理を備えており、設定、スクリプティング、ラピッドプロトタイピングに最適です。

- lua.org (翻訳:土居)

(1) 少ないコンピュータ資源でも動く(2) Cプログラムと容易に連携できる

ゲーム、AI、ルータ、などに採用されている

Page 32: TOSHIBAxGUGEN FlashAirハッカソン-FlashAirでなに作る?

FlashAirのLua

使えるライブラリ

– Lua基本ライブラリ

– LuaFileSystem

– CJSON

– FlashAir独自機能

使えないライブラリ

–コルーチン操作

– OS機能

–数学機能

–デバッグライブラリ

32

TOSHIBA x GUGEN FlashAir Hackathon

Page 33: TOSHIBAxGUGEN FlashAirハッカソン-FlashAirでなに作る?

LuaからHTTPリクエスト

TOSHIBA x GUGEN FlashAir Hackathon

33

result = fa.HTTPGetFile("https://flashair-developers.com/images/assets/flashairLogo_officeial_small.png", "logo.png")

if result ~= nil thenprint("Success! File downloaded.\n")--process the file

elseprint("Failure! File failed to download...\n")

end

リクエスト実行

結果はファイルに保存されます

Page 34: TOSHIBAxGUGEN FlashAirハッカソン-FlashAirでなに作る?

応用例:天気を教えてくれるロボット

TOSHIBA x GUGEN FlashAir Hackathon

34

• Luaで、天気予報を取得し、音声データを切り替え

https://www.youtube.com/watch?v=vnTzDswDw5Q

Page 35: TOSHIBAxGUGEN FlashAirハッカソン-FlashAirでなに作る?

iSDIOとLuaスクリプトの比較

iSDIOによる制御

長所– FlashAirの全ての機能を利用可能

– 外部マイコンとの組み合わせで、多様なシステム設計ができる

– SDホスト機器からのファイル読み書きと整合性がとりやすい

短所– 制御用マイコンが別に必要

– コーディング量が多い

Luaスクリプトによる制御

長所

– FlashAir以外にマイコン不要

– コーディング量が少ない

短所

– あまり大仕事はできない

• メモリが少ない

• 実行も速くはない

– 利用できる機能はiSDIOのサブセット

– SDホスト機器からのファイル読み書きに注意が必要

TOSHIBA x GUGEN FlashAir Hackathon

35

Page 36: TOSHIBAxGUGEN FlashAirハッカソン-FlashAirでなに作る?

共通する注意事項(1)

ファイルアクセスの不整合– SDカード上のファイルシステムを管理(FAT管理)するのは、ホストの責任です• PCから書くときはPCがFATを更新

• FlashAirが書くときはFlashAirがFATを更新

– デジカメやWindows/MacOSのようなリッチなOSは、FATをキャッシュしています• FlashAir(Lua or CGI)から書き込みをすると、PCは変更を知るすべがありません

– そのため、PC/デジカメとFlashAirからのファイル書き込みを混在させると危険です• 最悪の場合はファイルシステムが壊れます

– SDホストがいる環境ではFlashAirから書かないようにしましょう

36

TOSHIBA x GUGEN FlashAir Hackathon

Page 37: TOSHIBAxGUGEN FlashAirハッカソン-FlashAirでなに作る?

共通する注意事項(2)

時計がない–バッテリーバックアップがないため、時刻を自力で記憶できません

–代替策:HTTPで取得するのが一番手軽

メモリが少ない–あんまりメモリはありません。ビッグなことはさせないように気を付けましょう

機能網羅的ではない–ハッシュ:MD5のみ(SHA1やSHA256は非対応)

–通信プロトコル:HTTP、HTTPS、FTP

37

TOSHIBA x GUGEN FlashAir Hackathon

Page 38: TOSHIBAxGUGEN FlashAirハッカソン-FlashAirでなに作る?

TOSHIBA x GUGEN FlashAir Hackathon

38

面白そう!!どこに行けば情報が得られるの?

Page 39: TOSHIBAxGUGEN FlashAirハッカソン-FlashAirでなに作る?

API情報公開中

TOSHIBA x GUGEN FlashAir Hackathon

39

flashair-developers.com

Page 40: TOSHIBAxGUGEN FlashAirハッカソン-FlashAirでなに作る?

開発者情報サイトあります

TOSHIBA x GUGEN FlashAir Hackathon

40

APIリファレンス チュートリアル

ステーションモード、アップロード

上級者向け情報 デベロッパーフォーラム

Page 41: TOSHIBAxGUGEN FlashAirハッカソン-FlashAirでなに作る?

開発者情報サイトあります

TOSHIBA x GUGEN FlashAir Hackathon

41

flashair-developers.com

ハイフン必要 複数形

Page 42: TOSHIBAxGUGEN FlashAirハッカソン-FlashAirでなに作る?

ひろがるコミュニティ

FlashAir Developersを通じて、コミュニティによる応用が

広がっています!

42

TOSHIBA x GUGEN FlashAir Hackathon

Page 43: TOSHIBAxGUGEN FlashAirハッカソン-FlashAirでなに作る?

コミュニティによるアプリ

TOSHIBA x GUGEN FlashAir Hackathon

43

X

A

17

15

7

7

7 2

25

1

2015-04-10現在

Page 44: TOSHIBAxGUGEN FlashAirハッカソン-FlashAirでなに作る?

コンテストから生まれた作品

TOSHIBA x GUGEN FlashAir Hackathon

44

うちわ over WiFi(豊田将平氏)

リアルタイム入退室ログ今北ちゃん

(ウェブペイ曾川景介氏)

Page 45: TOSHIBAxGUGEN FlashAirハッカソン-FlashAirでなに作る?

基板ぞくぞく登場

TOSHIBA x GUGEN FlashAir Hackathon

45

FlashAir GPIOを便利に使う基板(じむ)

『Airio』FlashAir GPIOでLチカする基板

(余熱@れすぽん)

Page 46: TOSHIBAxGUGEN FlashAirハッカソン-FlashAirでなに作る?

同人誌できました

TOSHIBA x GUGEN FlashAir Hackathon

46

展示作品の作り方

メーカー開発者の裏話

・・など

Page 47: TOSHIBAxGUGEN FlashAirハッカソン-FlashAirでなに作る?

FAQその1

対応カードはどこで買えますか?全国の家電量販店で買えます!

対応させるFWはどこで入手できますか?市販品そのままでOKです!

API利用料とかあるんじゃないですか?カード買うだけです!

作ったモノで稼いでもいい・・?大歓迎!

やっぱりいろいろ制限あるんですよね?悪いこと以外はなんでもやっちゃって!

47

TOSHIBA x GUGEN FlashAir Hackathon

Page 48: TOSHIBAxGUGEN FlashAirハッカソン-FlashAirでなに作る?

FAQその2

W-02でLuaは動きますか?動きません

W-02はFWアップデートできますか? Luaは動くようになりません

マニュアルが英語 or 中国語でした並行輸入品です国内でサポートはうけられませんが、中身は同じなので遊ぶにはいいかも

48

TOSHIBA x GUGEN FlashAir Hackathon

Page 49: TOSHIBAxGUGEN FlashAirハッカソン-FlashAirでなに作る?

FAQその3

外国でも使えますか?使えます!世界80ヶ国の無線認証取得済み!

FlashAirを使った製品は作れますか?作れます!OEMカードもあります

49

TOSHIBA x GUGEN FlashAir Hackathon

Page 50: TOSHIBAxGUGEN FlashAirハッカソン-FlashAirでなに作る?

最後に・・・

FlashAirよりも高性能なボードはたくさんあります– らずぱいとか、えじそんとか、えんべっどとか

でも、FlashAirにはこんないいところがあります– OSインストール不要

– TCP/IPを代理実行してくれる

– SDスロットがあれば昔の機器も無線対応に

何事も適材適所ですね

50

TOSHIBA x GUGEN FlashAir Hackathon

Page 51: TOSHIBAxGUGEN FlashAirハッカソン-FlashAirでなに作る?

TOSHIBA x GUGEN FlashAir Hackathon

Enjoy !!

51

ご清聴ありがとうございました

Page 52: TOSHIBAxGUGEN FlashAirハッカソン-FlashAirでなに作る?

TOSHIBA x GUGEN FlashAir Hackathon

52

Q?