Wi-FiとWebSocketでスマートフォンから入出力

Wi-FiとWebSocketでスマートフォンから入出力

/media/uploads/okini3939/gs_rpc.jpg

mbedとWi-Fiモジュールで、HTTPサーバー&WebSocketサーバー機能を動作させ、スマートフォンのブラウザからmbedのI/Oをコントロールする。
HTML5のため、スマートフォンアプリの開発は不要。
Wi-Fiモジュールがアクセスポイントとなるため、無線ルーター不要でスマートフォンから直接接続できる。

iPhone, iPad, iPod, Android, PCのブラウザでもOK。

用意するもの

  • mbed NXP LPC1768
  • GainSpan Wi-Fi モジュール
    • あらかじめ Limited AP 対応のファームウェアに書き換えておく
    • ATB115200 コマンドで115200bpsに設定しておく
  • Gata XBee 基板 (あればmbedとWi-Fiモジュールの接続に便利)

ハードウェア

schematic

---------+                      +-----
         |VOUT---------------VCC|
         |GND----------------GND|
         |p14----------UART0_TXD|
         |p13----------UART0_RXD|
         |P0_22--------UART0_CTS| GS1011MIC
         |p12----------UART0_RTS|
         |p20---[1k]-------RESET|
  mbed   |                      +-----
         |
 LPC1768 |                  VOUT
         |                    |
         |p15---------------[VR]
         |                    |
         |                    |
         |p30---[330]---|>|---+
         |                    |
---------+                   GND

※P0_22 (RTS) は p11 (GPIO)でも代用できるかもしれない。

P0_22 を使うときはこんなふうに引っ張り出す。

p30へLED、p15へボリュームを付けた。

プログラム

Import programGSwifi_ap_ws_rpc

See: http://mbed.org/users/okini3939/notebook/wifi_rpc/

mbed側のプログラムは、RPCでハードウェアをコントロールできるようにしている。

GSwifiInterfaceライブラリの「GSwifi_conf.h」を変更します。

GSwifi_conf.h

//#define CFG_ENABLE_RTOS
#define CFG_ENABLE_HTTPD
#define CFG_ENABLE_WEBSOCKET

Wi-Fiモジュールとの接続ピン、ボーレートの設定は冒頭のこの行を変更する。

main.cpp

GSwifi gs(p13, p14, p12, p11, p20, NC, 115200); // mbed LPC1768 and GainSpan(115200bps)

Limited AP を使わない場合

Wi-Fiモジュールを Limited AP 対応のファームウェアに更新していない場合は、 普通にアクセスポイントへ接続するようにすれば、このプログラムを試すことができます。

//    gs.setAddress("192.168.1.1", "255.255.255.0", "192.168.1.1", "192.168.1.1", "www.mbed");
    gs.setSsid(SEC, SSID, PASS);
//    if (gs.limitedap()) {
    if (gs.join()) {

この場合、下記にあるブラウザでアクセスする場合の www.mbed は使えないため、 Wi-FiモジュールがDHCPサーバから割り当てを受けたIPアドレスでアクセスしてください。

HTML

次のzipファイルを展開して出てくるHTMLファイルを mbed のUSBストレージ(LocalFileSystem)へ放り込んでおく。

/media/uploads/okini3939/gs_rpc05.png

WebSocketでWi-Fiモジュールへ接続し、RPCコマンドを送信している。

使い方

ハードウェアを配線する。

mbedへプログラムを書き込むみ、リセットしてプログラムを起動する。

スマートフォンからアクセスポイント「 MBED 」へWi-Fi接続する。(パスワードは「1234567890」)

.

Safari・Chrome等のブラウザ(AndroidのブラウザはWebSocketに対応していないので不可)で「http://www.mbed/test.htm 」へアクセスする。 (www.mbed は架空のアドレスだが、Wi-Fiモジュール内のDNSサーバにより自動的に解決される)

DigitalOut

初期化ボタンで p30 がデジタル出力として設定され、その後 High / Low ボタンで出力が変化する。

LED等を接続しておけば光るのを確認できる。

AnalogIn

初期化ボタンで p15 がアナログ入力として設定され、その後 入力 ボタンでアナログ値が表示される。

ボリュームやセンサー等を接続しておけば値の変化が確認できる。

Lチカ

Lチカボタンを押すとLED4がチカチカする。

JavaScriptのタイマー機能でポートをON/OFFするRPCコマンドを送信している。


戻る


4 comments on Wi-FiとWebSocketでスマートフォンから入出力:

29 May 2014

こんにちは、はじめまして。 最近mbedを使い始めて色々参考にさせていただいています。 ありがとうございます。

勝手なお願いで恐縮ですが、HTMLファイル(gs_rpc_html.zip)をダウンロードできないようですので、アップしていただけないでしょうか。

05 Jun 2014

リンクのファイル名が間違ってました。すみません。 修正しました。 /media/uploads/okini3939/mbed_rpc_html.zip

08 Jun 2014

ありがとうございました。

07 Feb 2016

参考にさせていただき、 /DigitalOut/new LED4 led4 /led4/write 1 など、javaスクリプトで1行ずつ単独で送信してLEDをON/OFFすることまでは理解できました。 ただし、2行以上連続で記述すると、2行目以下は機能しません。 mbed側のRPCの解読のところで連続していると、コマンドの区切りがわかっていないように思います。 どこを工夫すればよろしいでしょうか。

Please log in to post comments.