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
- Committer:
- nyatla
- Date:
- 2015-09-15
- Revision:
- 61:42d95ef05018
- Parent:
- 59:a78c858a3bea
File content as of revision 61:42d95ef05018:
#include "mbed.h" #include "rtos.h" #include "SDFileSystem.h" #include "mimic.h" #include "fsdata.h" #include "rpctbl.h" /** * local filesystem support. * MiMic::LocalFileSystem2 do not freeze on LPCXpresso. */ LocalFileSystem2 lf("local"); /** * initialization */ #if defined(TARGET_LPC1768) || defined(TARGET_LPC4088) void pf_init() { } SDFileSystem sd(p5, p6, p7, p8,"sd"); #elif defined(TARGET_K64F) void pf_init() { DigitalOut led_r(LED1); DigitalOut led_g(LED2); DigitalOut led_b(LED3); led_r=1; led_b=1; led_g=1; } #endif /** * MiMic RemoteMCU httpd.<br/> * <p>Service list</p> * <pre> * /rom/ - romfs * /setup/ - MiMic configulation REST API. * /local/ - mbed LocalFileSystem * /mvm/ - MiMicVM REST API * </pre> */ class MiMicRemoteMcu:public MiMic::Httpd { private: ModRomFiles modromfs; //ROM file module ModMiMicSetting mimicsetting; //mimic setting API ModRemoteMcu remotemcu; // remotemcu API ModLocalFileSystem modlocal; //FileSystem mounter ModLocalFileSystem modsd; //FileSystem mounter ModFileIo modfio; //fileupload API ModUPnPDevice modupnp; ModJsonRpc modrpc; public: MiMicRemoteMcu(Net& i_net,NetConfig& i_cfg):Httpd(i_cfg.getHttpPort()) { this->modromfs.setParam("rom",RMCU_FSDATA,18); this->mimicsetting.setParam("setup"); this->remotemcu.setParam("mvm"); this->modlocal.setParam("local"); this->modsd.setParam("sd",ModLocalFileSystem::FST_SDFATFS); this->modfio.setParam("fio"); this->modupnp.setParam(i_net); this->modrpc.setParam("rpc",RPCTBL); } /** * Http handler */ virtual void onRequest(HttpdConnection& i_connection) { //pause persistent mode if websocket ready. if(this->modrpc.isStarted()){ i_connection.breakPersistentConnection(); } //try to ModRomFS module. if(this->modromfs.execute(i_connection)){ return; } //try to ModMiMicSetting module. if(this->mimicsetting.execute(i_connection)){ return; } //try to ModRemoteMcu module. if(this->remotemcu.execute(i_connection)){ return; } //try to ModLocalFileSystem if(this->modlocal.execute(i_connection)){ return; } //try to ModLocalFileSystem(SD) if(this->modsd.execute(i_connection)){ return; } //try to FileUpload if(this->modfio.execute(i_connection)){ return; } //try to UPnP if(this->modupnp.execute(i_connection)){ return; } if(this->modrpc.execute(i_connection)){ this->modrpc.dispatchRpc(); return; } //Otherwise, Send the redirect response to /rom/index.html i_connection.sendHeader(302, "text/html", "Status: 302:Moved Temporarily\r\n" "Location: /rom/index.html\r\n"); return; } }; /* extern "C" void setLed(int i){ switch(i){ case 0:{DigitalOut led_r(p23);led_r=0;}break; case 1:{DigitalOut led_g(p24);led_g=0;}break; case 2:{DigitalOut led_b(p25);led_b=0;}break; } }*/ MiMicRemoteMcu* httpd; //create a httpd instance. char friendly_name[48];//32(HostNameMAX)+16で十分(mbedJSの場合) int main() { MiMicNetIf netif; Net net(netif);//Net constructor must be created after started RTOS NetConfig cfg; //create network configulation with onchip-setting. pf_init(); //Prepare configulation. cfg.setUPnPIcon(64,64,8,"image/png","/rom/icon.png"); cfg.setUPnPUdn(0xe29f7101,0x4ba2,0x01e0,0); cfg.setUPnPPresentationURL("/rom/index.html"); //try to override setting by local file. if(!cfg.loadFromFile("/local/mimic.cfg")){ Thread::wait(2000);//wait for SD card initialization. cfg.loadFromFile("/sd/mimic.cfg"); } //FriendlyNameの上書き strcpy(friendly_name,"mbedJS-"); strcpy(friendly_name+7,cfg.getHostName()); cfg.setFriendlyName(friendly_name); httpd=new MiMicRemoteMcu(net,cfg); //create a httpd instance. net.start(cfg); httpd->loop(); //start httpd loop. return 0; }