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 Ryo Iizuka

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.

/media/uploads/nyatla/--_2.png

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

Reference

日本語

MiMicProject http://nyatla.jp/mimic/wp/

mbedJSはmbedをWebネットワークにつなぐためのアプリケーションです。 Javascript(ウェブブラウザ)、Processing、Javaから、mbedを操作することができます。 これらはmbedSDKのクラスライブラリとよく似たAPIなので、mbedを知っている方なら簡単に使うことができます。

/media/uploads/nyatla/--_2.png

特徴

  • 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

ドキュメント

関連記事

Committer:
nyatla
Date:
Tue Jun 24 14:35:40 2014 +0000
Revision:
33:8e869201db67
Parent:
28:3d7bac2a6278
Child:
37:ba7de395f009
mbedJS ??????; LPC4088/LPC1768

Who changed what in which revision?

UserRevisionLine numberNew 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 7:8cbfa0625c51 12 SDFileSystem sd(p5, p6, p7, p8,"sd");
nyatla 5:227d20070da4 13
nyatla 28:3d7bac2a6278 14 Net* net;
nyatla 28:3d7bac2a6278 15
nyatla 3:335512e81ba9 16
nyatla 3:335512e81ba9 17 /**
nyatla 1:82b8312c78a1 18 * MiMic RemoteMCU httpd.<br/>
nyatla 1:82b8312c78a1 19 * <p>Service list</p>
nyatla 1:82b8312c78a1 20 * <pre>
nyatla 1:82b8312c78a1 21 * /rom/ - romfs
nyatla 1:82b8312c78a1 22 * /setup/ - MiMic configulation REST API.
nyatla 1:82b8312c78a1 23 * /local/ - mbed LocalFileSystem
nyatla 1:82b8312c78a1 24 * /mvm/ - MiMicVM REST API
nyatla 1:82b8312c78a1 25 * </pre>
nyatla 1:82b8312c78a1 26 */
nyatla 1:82b8312c78a1 27 class MiMicRemoteMcu:public MiMic::Httpd
nyatla 1:82b8312c78a1 28 {
nyatla 1:82b8312c78a1 29 private:
nyatla 1:82b8312c78a1 30 ModRomFiles modromfs; //ROM file module
nyatla 1:82b8312c78a1 31 ModMiMicSetting mimicsetting; //mimic setting API
nyatla 1:82b8312c78a1 32 ModRemoteMcu remotemcu; // remotemcu API
nyatla 23:1861be744ad1 33 ModLocalFileSystem modlocal; //FileSystem mounter
nyatla 23:1861be744ad1 34 ModLocalFileSystem modsd; //FileSystem mounter
nyatla 28:3d7bac2a6278 35 ModFileIo modfio; //fileupload API
nyatla 28:3d7bac2a6278 36 ModUPnPDevice modupnp;
nyatla 33:8e869201db67 37 ModJsonRpc modrpc;
nyatla 1:82b8312c78a1 38 public:
nyatla 28:3d7bac2a6278 39 MiMicRemoteMcu(NetConfig& i_cfg):Httpd(i_cfg.getHttpPort())
nyatla 1:82b8312c78a1 40 {
nyatla 28:3d7bac2a6278 41 this->modromfs.setParam("rom",RMCU_FSDATA,18);
nyatla 3:335512e81ba9 42 this->mimicsetting.setParam("setup");
nyatla 3:335512e81ba9 43 this->remotemcu.setParam("mvm");
nyatla 3:335512e81ba9 44 this->modlocal.setParam("local");
nyatla 28:3d7bac2a6278 45 this->modsd.setParam("sd",ModLocalFileSystem::FST_SDFATFS);
nyatla 23:1861be744ad1 46 this->modfio.setParam("fio");
nyatla 28:3d7bac2a6278 47 this->modupnp.setParam(*net);
nyatla 33:8e869201db67 48 this->modrpc.setParam("rpc",RPCTBL);
nyatla 1:82b8312c78a1 49 }
nyatla 28:3d7bac2a6278 50 /**
nyatla 28:3d7bac2a6278 51 * Http handler
nyatla 28:3d7bac2a6278 52 */
nyatla 1:82b8312c78a1 53 virtual void onRequest(HttpdConnection& i_connection)
nyatla 1:82b8312c78a1 54 {
nyatla 33:8e869201db67 55 //pause persistent mode if websocket ready.
nyatla 33:8e869201db67 56 if(this->modrpc.isStarted()){
nyatla 33:8e869201db67 57 i_connection.breakPersistentConnection();
nyatla 33:8e869201db67 58 }
nyatla 1:82b8312c78a1 59 //try to ModRomFS module.
nyatla 1:82b8312c78a1 60 if(this->modromfs.execute(i_connection)){
nyatla 1:82b8312c78a1 61 return;
nyatla 1:82b8312c78a1 62 }
nyatla 1:82b8312c78a1 63 //try to ModMiMicSetting module.
nyatla 1:82b8312c78a1 64 if(this->mimicsetting.execute(i_connection)){
nyatla 1:82b8312c78a1 65 return;
nyatla 1:82b8312c78a1 66 }
nyatla 1:82b8312c78a1 67 //try to ModRemoteMcu module.
nyatla 1:82b8312c78a1 68 if(this->remotemcu.execute(i_connection)){
nyatla 1:82b8312c78a1 69 return;
nyatla 1:82b8312c78a1 70 }
nyatla 3:335512e81ba9 71 //try to ModLocalFileSystem
nyatla 3:335512e81ba9 72 if(this->modlocal.execute(i_connection)){
nyatla 3:335512e81ba9 73 return;
nyatla 3:335512e81ba9 74 }
nyatla 5:227d20070da4 75 //try to ModLocalFileSystem(SD)
nyatla 5:227d20070da4 76 if(this->modsd.execute(i_connection)){
nyatla 5:227d20070da4 77 return;
nyatla 5:227d20070da4 78 }
nyatla 23:1861be744ad1 79 //try to FileUpload
nyatla 23:1861be744ad1 80 if(this->modfio.execute(i_connection)){
nyatla 23:1861be744ad1 81 return;
nyatla 23:1861be744ad1 82 }
nyatla 28:3d7bac2a6278 83 //try to UPnP
nyatla 28:3d7bac2a6278 84 if(this->modupnp.execute(i_connection)){
nyatla 28:3d7bac2a6278 85 return;
nyatla 28:3d7bac2a6278 86 }
nyatla 33:8e869201db67 87 if(this->modrpc.execute(i_connection)){
nyatla 33:8e869201db67 88 this->modrpc.dispatchRpc();
nyatla 33:8e869201db67 89 return;
nyatla 33:8e869201db67 90 }
nyatla 3:335512e81ba9 91
nyatla 1:82b8312c78a1 92 //Otherwise, Send the redirect response to /rom/index.html
nyatla 18:0b1759b8d55f 93 i_connection.sendHeader(302,
nyatla 1:82b8312c78a1 94 "text/html",
nyatla 5:227d20070da4 95 "Status: 302:Moved Temporarily\r\n"
nyatla 4:00b4e7596014 96 "Location: /rom/index.html\r\n");
nyatla 1:82b8312c78a1 97 return;
nyatla 1:82b8312c78a1 98 }
nyatla 1:82b8312c78a1 99 };
nyatla 5:227d20070da4 100
nyatla 28:3d7bac2a6278 101
nyatla 28:3d7bac2a6278 102 NetConfig cfg; //create network configulation with onchip-setting.
nyatla 1:82b8312c78a1 103 int main()
nyatla 1:82b8312c78a1 104 {
nyatla 28:3d7bac2a6278 105 net=new Net();//Net constructor must be created after started RTOS
nyatla 28:3d7bac2a6278 106 //Prepare configulation.
nyatla 28:3d7bac2a6278 107 cfg.setUPnPIcon(64,64,8,"image/png","/rom/icon.png");
nyatla 28:3d7bac2a6278 108 cfg.setUPnPUdn(0xe29f7101,0x4ba2,0x01e0,0);
nyatla 28:3d7bac2a6278 109 cfg.setFriendlyName("MiMicRemoteMCU");
nyatla 28:3d7bac2a6278 110 cfg.setUPnPPresentationURL("/rom/index.html");
nyatla 28:3d7bac2a6278 111
nyatla 9:18e9bf764cc1 112 //try to override setting by local file.
nyatla 16:06dee6eef0bc 113 if(!cfg.loadFromFile("/local/mimic.cfg")){
nyatla 27:a3b49b4a814d 114 Thread::wait(2000);//wait for SD card initialization.
nyatla 16:06dee6eef0bc 115 cfg.loadFromFile("/sd/mimic.cfg");
nyatla 16:06dee6eef0bc 116 }
nyatla 28:3d7bac2a6278 117
nyatla 21:6555a25e67e7 118 MiMicRemoteMcu httpd(cfg); //create a httpd instance.
nyatla 28:3d7bac2a6278 119 net->start(cfg);
nyatla 1:82b8312c78a1 120 httpd.loop(); //start httpd loop.
nyatla 1:82b8312c78a1 121 return 0;
nyatla 1:82b8312c78a1 122 }