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:
Sun Mar 15 09:40:36 2015 +0000
Revision:
59:a78c858a3bea
Parent:
49:d860d810d7d7
update libMiMic; ; The libMiMic network interface has been changed.; main.c was changed.

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 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 49:d860d810d7d7 33
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 49:d860d810d7d7 58 MiMicRemoteMcu(Net& i_net,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 49:d860d810d7d7 66 this->modupnp.setParam(i_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 59:a78c858a3bea 120 /*
nyatla 59:a78c858a3bea 121 extern "C" void setLed(int i){
nyatla 59:a78c858a3bea 122 switch(i){
nyatla 59:a78c858a3bea 123 case 0:{DigitalOut led_r(p23);led_r=0;}break;
nyatla 59:a78c858a3bea 124 case 1:{DigitalOut led_g(p24);led_g=0;}break;
nyatla 59:a78c858a3bea 125 case 2:{DigitalOut led_b(p25);led_b=0;}break;
nyatla 59:a78c858a3bea 126 }
nyatla 59:a78c858a3bea 127 }*/
nyatla 59:a78c858a3bea 128
nyatla 59:a78c858a3bea 129
nyatla 49:d860d810d7d7 130 MiMicRemoteMcu* httpd; //create a httpd instance.
nyatla 47:c4d51c28fb41 131 char friendly_name[48];//32(HostNameMAX)+16で十分(mbedJSの場合)
nyatla 1:82b8312c78a1 132 int main()
nyatla 59:a78c858a3bea 133 {
nyatla 59:a78c858a3bea 134 MiMicNetIf netif;
nyatla 59:a78c858a3bea 135 Net net(netif);//Net constructor must be created after started RTOS
nyatla 49:d860d810d7d7 136 NetConfig cfg; //create network configulation with onchip-setting.
nyatla 43:c44f0d376c4f 137 pf_init();
nyatla 28:3d7bac2a6278 138 //Prepare configulation.
nyatla 28:3d7bac2a6278 139 cfg.setUPnPIcon(64,64,8,"image/png","/rom/icon.png");
nyatla 28:3d7bac2a6278 140 cfg.setUPnPUdn(0xe29f7101,0x4ba2,0x01e0,0);
nyatla 28:3d7bac2a6278 141 cfg.setUPnPPresentationURL("/rom/index.html");
nyatla 9:18e9bf764cc1 142 //try to override setting by local file.
nyatla 16:06dee6eef0bc 143 if(!cfg.loadFromFile("/local/mimic.cfg")){
nyatla 27:a3b49b4a814d 144 Thread::wait(2000);//wait for SD card initialization.
nyatla 16:06dee6eef0bc 145 cfg.loadFromFile("/sd/mimic.cfg");
nyatla 16:06dee6eef0bc 146 }
nyatla 47:c4d51c28fb41 147 //FriendlyNameの上書き
nyatla 47:c4d51c28fb41 148 strcpy(friendly_name,"mbedJS-");
nyatla 47:c4d51c28fb41 149 strcpy(friendly_name+7,cfg.getHostName());
nyatla 47:c4d51c28fb41 150 cfg.setFriendlyName(friendly_name);
nyatla 47:c4d51c28fb41 151
nyatla 28:3d7bac2a6278 152
nyatla 49:d860d810d7d7 153 httpd=new MiMicRemoteMcu(net,cfg); //create a httpd instance.
nyatla 49:d860d810d7d7 154 net.start(cfg);
nyatla 49:d860d810d7d7 155 httpd->loop(); //start httpd loop.
nyatla 1:82b8312c78a1 156 return 0;
nyatla 1:82b8312c78a1 157 }