ラベル jQuery Mobile の投稿を表示しています。 すべての投稿を表示
ラベル jQuery Mobile の投稿を表示しています。 すべての投稿を表示

2013年3月3日日曜日

GAEでpython-on-a-chipオンラインコンパイラの試作


python-on-a-chip(pymite)でpythonコードを変更するたびに mbed の C++コンパイラを通すのは面倒なので、オンラインで直接実行ファイルを作れるか試してみました。

Google App Engine(GAE) で作ったWEBサイトでpythonコードを入力。
compileコンパイルボタンを押すと、pmImgCreator.py でバイトコードに変換、実行ファイルのバイトコードを入れ換えて、パソコンにダウンロードさせる。
mbedにドラッグアンドドロップで実行します。

厳密にテストしてはないのですが、python2.5 の pmImgCreator.py で作るバイトコードは動くようです。
そのために GAE では 2.7 が使えるのに、あえて python2.5 で動かしています。
jinjia2 はGAEローカル開発環境では動くが、オンライン環境では 2.7 が必要で、旧テンプレートエンジンを使用しなければならない。
簡単にWEBサイトを作るために、jQuery Mobile を使用しているのだが、ファイルのダウンロードはうまくいかない。
フォームでは ajax をディセーブルにする必要があります。

GAEでの試作例サイト:
http://pymbed.appspot.com/
GAEでの実行コード:
https://bitbucket.org/va009039/pymbed
python-on-a-chip実行ファイル作成のコード:
http://mbed.org/users/va009039/code/pymite/
mbedコンパイラへのインポートを助けるためのバッチファル make.bat:
http://mbed.org/users/va009039/code/pymite/wiki/makebat
オフラインコンパイルのためのバッチファイル compile.bat:
http://mbed.org/users/va009039/code/pymite/wiki/compilebat

(2013/3/3)
---

2013年2月23日土曜日

websocketでmbedアプリケーションボードと通信



websocketでRGBフルカラーLEDをパソコンから制御、ポテンショメータ(アナログ入力)を読み取るテストをしてみた。

mbed側はRPCで動くようにしているので、まだまだ他の制御が出来るのだが、パソコン側のWEBアプリ作成が慣れてなくて追い付かない。

mbedからのwebsocketサーバーへの送信データはエコーされるので、無限ループにならないように受信データはRPCであるかを確認しています。
websocketサーバーとは60秒くらい通信していないと切れるようなので適当に温度データを送っています。

app-board-websocket-rpc

jQuery Mobileでスライダーからの更新イベントが受取れなくて困っていたが、1.3.0にバージョンアップしたら動くようになりました。

(2013/2/23)
---

2013年2月22日金曜日

Websocketでビデオストリーミングのテスト 失敗編



QcamOrbitAFのフォーカスのモータ制御のテスト確認のためにはリアルタイムで画像が確認出来たら便利だと思った。
いろいろ方法があるだろうが、いままで試してない方法がおもしろいだろうとWebsocketを試してみた。

mbed(カメラ) → websocketサーバー(sockets.mbed.org) → パソコン(iPod touch)

mbed、画像をbase64エンコードして送っています。最新の仕様ではwebsocketはバイナリーでも送れるが、
mbedのライブラリのWebsocketClientは内部的にはバイナリー転送が出来そうだがインターフェースを備えてないし、
sockets.mbed.orgのviewで転送内容を確認したかったのでテキストで送っています。
main.cpp
VideoStreaming

パソコン(iPod touch)、websocketからのデータをdata URI schemeで画像を表示しています。
jQuery Mobile でWebページを作っていますので、ブラウザで開くだけでビューアが実行されます。
viewer

試してみたところ、mbedからのtcp送信が遅いので、画像2Kバイト程度を送るのに10秒くらいかかってしまった。
しかも、600バイトくらいを送ったとことでフリーズする時もある。他の方法か工夫が必要らしい。

(追加)
パソコンで画像を送り出してみたところ十分速かったので、やはりmbedの送信がボトルネックらしい。
# wsbench.py 2013/2/21
# coding: utf-8
#
import websocket
import base64
import time
import argparse

channel = "public-ch"
url = "ws://sockets.mbed.org/ws/" + channel + "/rw";
CHUNK=2*30

def buf_to_websocket(buf, ws=None):
    print "image size: %d bytes" % len(buf)
    st = time.time()
    ws_send = 0
    for i in range(0, len(buf), CHUNK):
        chunk_len = min(len(buf) - i, CHUNK)
        s = buf[i:i+chunk_len]
        d = base64.b64encode(s)
        print d
        if ws:
            ws.send(d)
        ws_send += len(d)
    d = "."
    print d
    if ws:
        ws.send(d)
    ms = (time.time() - st) * 1000
    print "websocket: send: %d bytes %d ms" % (ws_send, ms)

if __name__ == '__main__':
    ws = websocket.create_connection(url)
    #ws = None

    parser = argparse.ArgumentParser()
    parser.add_argument('infiles', nargs='*', help=u"image file")
    args = parser.parse_args()
    for i, filename in enumerate(args.infiles):
        with open(filename, "rb") as f:
            data = f.read()
        print("input: %s %d bytes" % (filename, len(data)))
        buf_to_websocket(data, ws)

参考:
websocket-client
http://mbed.org/cookbook/Websockets-Server
Insider.NET > 業務アプリInsider > 連載:jQuery Mobile入門 - @IT

(2013/2/22)
---