This is a Json-RPC/2.0 server with websocket and httpd. You can control mbed(s) by Javascript, processing, Java. LPCXpresso1769/LPC1768/FRDM-K64F/LPC4088
Dependencies: NyFileSystems libMiMic mbed-rtos mbed
Fork of MiMicRemoteMCU-for-Mbed by
English
MiMicProject http://nyatla.jp/mimic/wp/
This application allow to control the remote mbed through the network. It allows to control the mbed without a firmware update. It has some Interface. There are Javascript(WebBrowser), Procesing, Java. API waits for a function very similar to mbedSDK.
Feature
- Low delay RPC by Websocket+JSON-RPC.
- OnChip programing environment (Javascript).
- Zero configuration support (UPnP/mDNS/AutoIP/DHCP)
- mbedAPI like APIs.
- Supports mbed LPC1768/LPCXpresso1769/LPC4088/FRDM-K64F
GettingStarted
mbed(LPC1768)
- Compile and write mbedJS to your mbed.
- Create mimic.cfg file to the mbed drive. This is network configuration.
- Connect to Ethernet cable to the mbed.
- Reset mbed.
- Open http://[mbed IP address]/ by web browser.
- Click JavascriptEditor.
- Click StartButton. LED will be blinking.
LPCXpresso1769 and LPC4088 QuickStartBoard and FRDM-K64F
Those do not have LocalFileSystem. mbedJS initial IP address is "192.168.0.39". Open this address and click Setup page. You can change ipaddress at here.
Other APIs
- mbedJS Javascript API https://github.com/nyatla/mbedJS-Javascript-API
- mbedJS Java API https://github.com/nyatla/mbedJS-Java-API
- mbedJS processing API https://github.com/nyatla/mbedJS-Processing-API
Reference
- QuickStart manual http://mimic.sourceforge.jp/doc/pdf/mbedJS.quickstart.en.pdf
- javascriptAPI referencehttp://mimic.sourceforge.jp/doc/mbedjs/current/
- javascriptAPI driver referencehttp://mimic.sourceforge.jp/doc/mbedjs.driver/current/
- http://mbed.org/users/nyatla/notebook/how-to-control-mbed-from-processing/
日本語
MiMicProject http://nyatla.jp/mimic/wp/
mbedJSはmbedをWebネットワークにつなぐためのアプリケーションです。 Javascript(ウェブブラウザ)、Processing、Javaから、mbedを操作することができます。 これらはmbedSDKのクラスライブラリとよく似たAPIなので、mbedを知っている方なら簡単に使うことができます。
特徴
- Websocket+JSONRPCによる低遅延なRPC
- ワンチップでブラウザ向けの開発環境を提供
- UPnP/Bonjurによるディスカバりに対応
- mbedSDKのAPIと同じ構成のAPI
- mbed LPC1768/LPCXpresso1769/LPC4088/FRDM-K64Fに対応
このアプリケーションはMiMicRemoteMCUとよく似ていますが、JavascriptAPIがより使いやすくなりました。
はじめかた
- ファームウェアをmbedに書き込みます。
- 設定ファイルにネットワークに合わせたIPアドレスを指定します。
- mbedをリセットして、設定したIPアドレスをブラウザで開きます。
- JavascriptEditorを開きます。
- Startボタンを押してLEDがチカチカすれば成功です。
mbedJS APIs
- mbedJS Javascript API https://github.com/nyatla/mbedJS-Javascript-API
- mbedJS Java API https://github.com/nyatla/mbedJS-Java-API
- mbedJS processing API https://github.com/nyatla/mbedJS-Processing-API
ドキュメント
- クイックスタートマニュアル http://mimic.sourceforge.jp/doc/pdf/mbedJS.quickstart.ja.pdf
- javascriptAPIリファレンス http://mimic.sourceforge.jp/doc/mbedjs/current/
- javascriptAPIリファレンス(ドライバ) http://mimic.sourceforge.jp/doc/mbedjs.driver/current/
関連記事
- MiMicProject http://nyatla.jp/mimic/wp/
- mbedJS + p5.jsでWebブラウザからmbedを制御するhttp://nyatla.hatenadiary.jp/entry/20141103/1415021260
- エェェェェンベッドJS (mbedJS) beta版をリリースしました http://nyatla.hatenadiary.jp/entry/20140625/1403701589
- ProcessingとJavaからmbedを操作して遊べるようにした http://nyatla.hatenadiary.jp/entry/20140720/1405861733
- mbedJSをインターネットで共有するシステムを作ったhttp://nyatla.hatenadiary.jp/entry/20140912/1410528645
main.cpp@43:c44f0d376c4f, 2014-10-02 (annotated)
- Committer:
- nyatla
- Date:
- Thu Oct 02 05:22:57 2014 +0000
- Revision:
- 43:c44f0d376c4f
- Parent:
- 37:ba7de395f009
- Child:
- 47:c4d51c28fb41
FRDM-K64F??
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
nyatla | 4:00b4e7596014 | 1 | #include "mbed.h" |
nyatla | 27:a3b49b4a814d | 2 | #include "rtos.h" |
nyatla | 5:227d20070da4 | 3 | #include "SDFileSystem.h" |
nyatla | 1:82b8312c78a1 | 4 | #include "mimic.h" |
nyatla | 1:82b8312c78a1 | 5 | #include "fsdata.h" |
nyatla | 33:8e869201db67 | 6 | #include "rpctbl.h" |
nyatla | 1:82b8312c78a1 | 7 | /** |
nyatla | 3:335512e81ba9 | 8 | * local filesystem support. |
nyatla | 16:06dee6eef0bc | 9 | * MiMic::LocalFileSystem2 do not freeze on LPCXpresso. |
nyatla | 3:335512e81ba9 | 10 | */ |
nyatla | 16:06dee6eef0bc | 11 | LocalFileSystem2 lf("local"); |
nyatla | 43:c44f0d376c4f | 12 | |
nyatla | 43:c44f0d376c4f | 13 | /** |
nyatla | 43:c44f0d376c4f | 14 | * initialization |
nyatla | 43:c44f0d376c4f | 15 | */ |
nyatla | 43:c44f0d376c4f | 16 | #if defined(TARGET_LPC1768) || defined(TARGET_LPC4088) |
nyatla | 43:c44f0d376c4f | 17 | void pf_init() |
nyatla | 43:c44f0d376c4f | 18 | { |
nyatla | 43:c44f0d376c4f | 19 | } |
nyatla | 7:8cbfa0625c51 | 20 | SDFileSystem sd(p5, p6, p7, p8,"sd"); |
nyatla | 43:c44f0d376c4f | 21 | #elif defined(TARGET_K64F) |
nyatla | 43:c44f0d376c4f | 22 | void pf_init() |
nyatla | 43:c44f0d376c4f | 23 | { |
nyatla | 43:c44f0d376c4f | 24 | DigitalOut led_r(LED1); |
nyatla | 43:c44f0d376c4f | 25 | DigitalOut led_g(LED2); |
nyatla | 43:c44f0d376c4f | 26 | DigitalOut led_b(LED3); |
nyatla | 43:c44f0d376c4f | 27 | led_r=1; |
nyatla | 43:c44f0d376c4f | 28 | led_b=1; |
nyatla | 43:c44f0d376c4f | 29 | led_g=1; |
nyatla | 43:c44f0d376c4f | 30 | } |
nyatla | 43:c44f0d376c4f | 31 | #endif |
nyatla | 5:227d20070da4 | 32 | |
nyatla | 28:3d7bac2a6278 | 33 | Net* net; |
nyatla | 28:3d7bac2a6278 | 34 | |
nyatla | 3:335512e81ba9 | 35 | |
nyatla | 3:335512e81ba9 | 36 | /** |
nyatla | 1:82b8312c78a1 | 37 | * MiMic RemoteMCU httpd.<br/> |
nyatla | 1:82b8312c78a1 | 38 | * <p>Service list</p> |
nyatla | 1:82b8312c78a1 | 39 | * <pre> |
nyatla | 1:82b8312c78a1 | 40 | * /rom/ - romfs |
nyatla | 1:82b8312c78a1 | 41 | * /setup/ - MiMic configulation REST API. |
nyatla | 1:82b8312c78a1 | 42 | * /local/ - mbed LocalFileSystem |
nyatla | 1:82b8312c78a1 | 43 | * /mvm/ - MiMicVM REST API |
nyatla | 1:82b8312c78a1 | 44 | * </pre> |
nyatla | 1:82b8312c78a1 | 45 | */ |
nyatla | 1:82b8312c78a1 | 46 | class MiMicRemoteMcu:public MiMic::Httpd |
nyatla | 1:82b8312c78a1 | 47 | { |
nyatla | 1:82b8312c78a1 | 48 | private: |
nyatla | 1:82b8312c78a1 | 49 | ModRomFiles modromfs; //ROM file module |
nyatla | 1:82b8312c78a1 | 50 | ModMiMicSetting mimicsetting; //mimic setting API |
nyatla | 1:82b8312c78a1 | 51 | ModRemoteMcu remotemcu; // remotemcu API |
nyatla | 23:1861be744ad1 | 52 | ModLocalFileSystem modlocal; //FileSystem mounter |
nyatla | 23:1861be744ad1 | 53 | ModLocalFileSystem modsd; //FileSystem mounter |
nyatla | 28:3d7bac2a6278 | 54 | ModFileIo modfio; //fileupload API |
nyatla | 28:3d7bac2a6278 | 55 | ModUPnPDevice modupnp; |
nyatla | 33:8e869201db67 | 56 | ModJsonRpc modrpc; |
nyatla | 1:82b8312c78a1 | 57 | public: |
nyatla | 28:3d7bac2a6278 | 58 | MiMicRemoteMcu(NetConfig& i_cfg):Httpd(i_cfg.getHttpPort()) |
nyatla | 1:82b8312c78a1 | 59 | { |
nyatla | 28:3d7bac2a6278 | 60 | this->modromfs.setParam("rom",RMCU_FSDATA,18); |
nyatla | 3:335512e81ba9 | 61 | this->mimicsetting.setParam("setup"); |
nyatla | 3:335512e81ba9 | 62 | this->remotemcu.setParam("mvm"); |
nyatla | 3:335512e81ba9 | 63 | this->modlocal.setParam("local"); |
nyatla | 28:3d7bac2a6278 | 64 | this->modsd.setParam("sd",ModLocalFileSystem::FST_SDFATFS); |
nyatla | 23:1861be744ad1 | 65 | this->modfio.setParam("fio"); |
nyatla | 28:3d7bac2a6278 | 66 | this->modupnp.setParam(*net); |
nyatla | 33:8e869201db67 | 67 | this->modrpc.setParam("rpc",RPCTBL); |
nyatla | 1:82b8312c78a1 | 68 | } |
nyatla | 28:3d7bac2a6278 | 69 | /** |
nyatla | 28:3d7bac2a6278 | 70 | * Http handler |
nyatla | 28:3d7bac2a6278 | 71 | */ |
nyatla | 1:82b8312c78a1 | 72 | virtual void onRequest(HttpdConnection& i_connection) |
nyatla | 1:82b8312c78a1 | 73 | { |
nyatla | 33:8e869201db67 | 74 | //pause persistent mode if websocket ready. |
nyatla | 33:8e869201db67 | 75 | if(this->modrpc.isStarted()){ |
nyatla | 33:8e869201db67 | 76 | i_connection.breakPersistentConnection(); |
nyatla | 33:8e869201db67 | 77 | } |
nyatla | 1:82b8312c78a1 | 78 | //try to ModRomFS module. |
nyatla | 1:82b8312c78a1 | 79 | if(this->modromfs.execute(i_connection)){ |
nyatla | 1:82b8312c78a1 | 80 | return; |
nyatla | 1:82b8312c78a1 | 81 | } |
nyatla | 1:82b8312c78a1 | 82 | //try to ModMiMicSetting module. |
nyatla | 1:82b8312c78a1 | 83 | if(this->mimicsetting.execute(i_connection)){ |
nyatla | 1:82b8312c78a1 | 84 | return; |
nyatla | 1:82b8312c78a1 | 85 | } |
nyatla | 1:82b8312c78a1 | 86 | //try to ModRemoteMcu module. |
nyatla | 1:82b8312c78a1 | 87 | if(this->remotemcu.execute(i_connection)){ |
nyatla | 1:82b8312c78a1 | 88 | return; |
nyatla | 1:82b8312c78a1 | 89 | } |
nyatla | 3:335512e81ba9 | 90 | //try to ModLocalFileSystem |
nyatla | 3:335512e81ba9 | 91 | if(this->modlocal.execute(i_connection)){ |
nyatla | 3:335512e81ba9 | 92 | return; |
nyatla | 3:335512e81ba9 | 93 | } |
nyatla | 5:227d20070da4 | 94 | //try to ModLocalFileSystem(SD) |
nyatla | 5:227d20070da4 | 95 | if(this->modsd.execute(i_connection)){ |
nyatla | 5:227d20070da4 | 96 | return; |
nyatla | 5:227d20070da4 | 97 | } |
nyatla | 23:1861be744ad1 | 98 | //try to FileUpload |
nyatla | 23:1861be744ad1 | 99 | if(this->modfio.execute(i_connection)){ |
nyatla | 23:1861be744ad1 | 100 | return; |
nyatla | 23:1861be744ad1 | 101 | } |
nyatla | 28:3d7bac2a6278 | 102 | //try to UPnP |
nyatla | 28:3d7bac2a6278 | 103 | if(this->modupnp.execute(i_connection)){ |
nyatla | 28:3d7bac2a6278 | 104 | return; |
nyatla | 28:3d7bac2a6278 | 105 | } |
nyatla | 33:8e869201db67 | 106 | if(this->modrpc.execute(i_connection)){ |
nyatla | 33:8e869201db67 | 107 | this->modrpc.dispatchRpc(); |
nyatla | 33:8e869201db67 | 108 | return; |
nyatla | 33:8e869201db67 | 109 | } |
nyatla | 3:335512e81ba9 | 110 | |
nyatla | 1:82b8312c78a1 | 111 | //Otherwise, Send the redirect response to /rom/index.html |
nyatla | 18:0b1759b8d55f | 112 | i_connection.sendHeader(302, |
nyatla | 1:82b8312c78a1 | 113 | "text/html", |
nyatla | 5:227d20070da4 | 114 | "Status: 302:Moved Temporarily\r\n" |
nyatla | 4:00b4e7596014 | 115 | "Location: /rom/index.html\r\n"); |
nyatla | 1:82b8312c78a1 | 116 | return; |
nyatla | 1:82b8312c78a1 | 117 | } |
nyatla | 1:82b8312c78a1 | 118 | }; |
nyatla | 5:227d20070da4 | 119 | |
nyatla | 28:3d7bac2a6278 | 120 | |
nyatla | 28:3d7bac2a6278 | 121 | NetConfig cfg; //create network configulation with onchip-setting. |
nyatla | 1:82b8312c78a1 | 122 | int main() |
nyatla | 1:82b8312c78a1 | 123 | { |
nyatla | 43:c44f0d376c4f | 124 | pf_init(); |
nyatla | 28:3d7bac2a6278 | 125 | net=new Net();//Net constructor must be created after started RTOS |
nyatla | 28:3d7bac2a6278 | 126 | //Prepare configulation. |
nyatla | 28:3d7bac2a6278 | 127 | cfg.setUPnPIcon(64,64,8,"image/png","/rom/icon.png"); |
nyatla | 28:3d7bac2a6278 | 128 | cfg.setUPnPUdn(0xe29f7101,0x4ba2,0x01e0,0); |
nyatla | 37:ba7de395f009 | 129 | cfg.setFriendlyName("mbedJS"); |
nyatla | 28:3d7bac2a6278 | 130 | cfg.setUPnPPresentationURL("/rom/index.html"); |
nyatla | 28:3d7bac2a6278 | 131 | |
nyatla | 9:18e9bf764cc1 | 132 | //try to override setting by local file. |
nyatla | 16:06dee6eef0bc | 133 | if(!cfg.loadFromFile("/local/mimic.cfg")){ |
nyatla | 27:a3b49b4a814d | 134 | Thread::wait(2000);//wait for SD card initialization. |
nyatla | 16:06dee6eef0bc | 135 | cfg.loadFromFile("/sd/mimic.cfg"); |
nyatla | 16:06dee6eef0bc | 136 | } |
nyatla | 28:3d7bac2a6278 | 137 | |
nyatla | 21:6555a25e67e7 | 138 | MiMicRemoteMcu httpd(cfg); //create a httpd instance. |
nyatla | 28:3d7bac2a6278 | 139 | net->start(cfg); |
nyatla | 1:82b8312c78a1 | 140 | httpd.loop(); //start httpd loop. |
nyatla | 1:82b8312c78a1 | 141 | return 0; |
nyatla | 1:82b8312c78a1 | 142 | } |