The program publishes files at local directory and SD filesystem. It is a full-fledged webServer somewhat.

Dependencies:   libMiMic mbed-rtos mbed NyFileSystems

English

This program is simple webserver to provides contents on local file system and SD card through HTTP to network. The application is demonstration of libMiMic library that includes uIP based TCP/IP stack and fast httpd server.

It has auto platform detection function. It works on mbed and LPCXpresso1769 both platform in the same binary.

/media/uploads/nyatla/this_server.jpg

Feature

  • Automatic platform detection. for mbed and LPCXpresso.
  • SD card/LlocalFileSystem support. LocalfileSystem is accessable when mbed. Otherwise ignored.
  • Mbed RTOS based Multithread.
  • Original TCP/IP stack(MiMicIP). It is based on uIP.
  • Fast HTTPD (HTTP/1.1 , Persistent connection , RTT<=10ms , Maximum throughput 8Mbps ,SDCard throughput 600Kbps , Chunked encoding, Maximum content size 4GB)
  • RAM usage 16KB+16KB(AHB SRAM - bank 0)
  • ROM 70KB

Demonstration

This is temporary demonstration website. Mmedwebserver demonstration.

The server hosted MiMicRemoteMCU-for-Mbed sample content. You can browse sample pages.

Getting started

  • Connect to mbed Ethernet connector. See also. (SD card is optional)
  • Import program to mbed Compiler and compile it.
  • Copy bin file to mbed.
  • Write configuration to "mimic.cfg" and save it to mbed local file system. (If nothing, Setting is 192.168.0.39,255.255.255.0,192.168.0.254,[mbed mac address]) See also

sample of mimic.cfg

ipaddr=192.168.0.40
netmask=255.255.255.0
gateway=192.168.0.254
macaddr=02:01:02:03:04:05

Any values can be omit. If omit elements,on-chip values is used.

  • Reset mbed.
  • Open "http://[address]/" via Browser(do not use Internet exproler!), You can browse index page.

Appendix

How to connect to SD card.

Check http://www.eleki-jack.com/arm/2010/12/mbed-5.html (Japanese) Maximum length of path name is 512 characters.

How to run on LPCXpresso1769.

MbedFileServer binary file is run on LPCXpresso as is. LocalFileSystem(semihosting SVC) is ignored and LAN peripheral is detected automatically. Mac Address and setting will be on-chip setting. If you want set configuration by file, connect SD card and save "mimic.cfg" to root directory.

日本語

このプログラムは、SDカードとmbedLocalFileSystemにあるファイルを公開するシンプルなWebサーバです。 このWebサーバはlibMiMicライブラリを使用した高速なHTTPDのデモンストレーションです。

MbedFileServerは実行時にmbedとLPCXpressoを自動で認識できます。mbedコンパイラで作成したバイナリファイルをそのままLPCXpressoで動作させることが出来ます。

/media/uploads/nyatla/this_server.jpg

仕様

  • 自動プラットフォーム認識機能(mbed ,LPCXpresso1769)
  • SDカード、 LlocalFileSystem サポート。(LocalFileSystemはmbedの時だけ使用できます。LPCXpressoでは無視されます。)
  • Mbed RTOS ベースのマルチスレッドが利用できます。
  • uIPベースの独自 TCP/IP stack(MiMicIP)を搭載しています。
  • 高速なHTTPDサーバを搭載しています。(HTTP/1.1 , 持続性接続 ,同時セッション数4, RTT<=10ms , 最大転送速度 8Mbps ,SDCard 経由の転送速度 600Kbps , Chunked encoding, 最大コンテンツ転送サイズ 4GB)
  • RAM使用量 16KB+16KB(AHB SRAM - bank 0)
  • ROM使用量 70KB

デモサイト

不定期でMiMicRemoteMCU-for-Mbedのデモサイトを公開しています。http://nyatla3939.no-ip.biz/sd/index.html

このデモサイトはSDカードに保存したコンテンツを、MbedFileServerでホストしています。

Getting started

  • mbedにイーサネットコネクタを接続します。参考。SDカードは無くても動きます。
  • プログラムをImportしてコンパイルします。
  • binファイルをmbedにインストールします。
  • 初期IPアドレスの設定ファイルを書いて、"mimic.cfg"の名前でmbedドライブのルートディレクトリに入れます。 (ファイルの無い場合の設定値は、192.168.0.39,255.255.255.0,192.168.0.254,[mbed内蔵MACアドレス]になります。)参考

mimic.cfg

ipaddr=192.168.0.40
netmask=255.255.255.0
gateway=192.168.0.254
macaddr=02:01:02:03:04:05

設定値は省略できます。省略した場合は、オンチップコンフィギュレーションの値が使われます。

追加資料

SDカードの接続方法

こちらの方法でお願いします。 SDカードのサブディレクトリには対応していますが、URLが512文字以上にならないようにしてください。

LPCXpresso1769で実行する場合

MbedFileServerのバイナリはそのままLPCXpresso1769で動作します。 LocalFileSystem(semihosting SVC) の無効化とLANペリフェラルの認識は起動時に自動的に行われます。 Mac Addressはオンチップコンフィギュレーションの値が設定されます。もしファイルによって値を変更したい場合は、SDカードを接続して、"mimic.cfg" をルートディレクトリに保存してください。

See also

Committer:
nyatla
Date:
Tue Sep 15 09:41:11 2015 +0000
Revision:
28:f89c1f7a5ab9
Parent:
27:6923864662d4
update libMiMic

Who changed what in which revision?

UserRevisionLine numberNew contents of line
nyatla 4:0a280ed0a848 1 /**
nyatla 4:0a280ed0a848 2 * @file * This is ModLocalFileSystem sample program.
nyatla 4:0a280ed0a848 3 *
nyatla 4:0a280ed0a848 4 * <pre>
nyatla 4:0a280ed0a848 5 * 1. Compile this program and write to your mbed.
nyatla 4:0a280ed0a848 6 * 2. Write files for testing to mbed disk.
nyatla 4:0a280ed0a848 7 * 2. Access via web browser to http://192.168.0.39/local/<filename>
nyatla 4:0a280ed0a848 8 * 3. You can see <filename> file on browser.
nyatla 4:0a280ed0a848 9 * </pre>
nyatla 4:0a280ed0a848 10 */
nyatla 5:6a2a1644ea2c 11 #include "mbed.h"
nyatla 19:66d729b94d16 12 #include "rtos.h"
nyatla 5:6a2a1644ea2c 13 #include "SDFileSystem.h"
nyatla 0:ec1e45489427 14 #include "mimic.h"
nyatla 10:80c05810f911 15 #include "utils/PlatformInfo.h"
nyatla 19:66d729b94d16 16 #include "fsdata.h"
nyatla 19:66d729b94d16 17
nyatla 10:80c05810f911 18 DigitalOut mbedled(LED1);
nyatla 10:80c05810f911 19 DigitalOut lpcxled(P0_22);
nyatla 0:ec1e45489427 20
nyatla 3:77431c2bd9cb 21 /**
nyatla 3:77431c2bd9cb 22 * local filesystem support.
nyatla 3:77431c2bd9cb 23 */
nyatla 10:80c05810f911 24 LocalFileSystem2 lf("local");
nyatla 5:6a2a1644ea2c 25 SDFileSystem sd(p5, p6, p7, p8,"sd");
nyatla 19:66d729b94d16 26
nyatla 6:20dcb08e1b43 27 unsigned int p;
nyatla 0:ec1e45489427 28 /**
nyatla 0:ec1e45489427 29 * MiMic RemoteMCU httpd.<br/>
nyatla 5:6a2a1644ea2c 30 * Number of simultaneous connections:4
nyatla 0:ec1e45489427 31 * <p>Service list</p>
nyatla 0:ec1e45489427 32 * <pre>
nyatla 0:ec1e45489427 33 * /local/ - mbed LocalFileSystem
nyatla 0:ec1e45489427 34 * </pre>
nyatla 0:ec1e45489427 35 */
nyatla 5:6a2a1644ea2c 36 class FsHttpd:public MiMic::Httpd
nyatla 0:ec1e45489427 37 {
nyatla 0:ec1e45489427 38 private:
nyatla 5:6a2a1644ea2c 39 ModLocalFileSystem modlocal;
nyatla 5:6a2a1644ea2c 40 ModLocalFileSystem modsd;
nyatla 19:66d729b94d16 41 ModUPnPDevice modupnp;
nyatla 19:66d729b94d16 42 ModRomFiles modromfs; //ROM file module
nyatla 19:66d729b94d16 43
nyatla 0:ec1e45489427 44 public:
nyatla 25:8733f6ce73d4 45 FsHttpd(Net& i_net,NetConfig& i_cfg):Httpd(i_cfg.getHttpPort())
nyatla 0:ec1e45489427 46 {
nyatla 19:66d729b94d16 47
nyatla 19:66d729b94d16 48 this->modromfs.setParam("rom",FSDATA,1);
nyatla 3:77431c2bd9cb 49 //bind local file system path to /local/*
nyatla 5:6a2a1644ea2c 50 modlocal.setParam("local");
nyatla 19:66d729b94d16 51 modsd.setParam("sd",ModLocalFileSystem::FST_SDFATFS);
nyatla 25:8733f6ce73d4 52 this->modupnp.setParam(i_net);
nyatla 0:ec1e45489427 53 }
nyatla 0:ec1e45489427 54 virtual void onRequest(HttpdConnection& i_connection)
nyatla 0:ec1e45489427 55 {
nyatla 6:20dcb08e1b43 56 p++;
nyatla 10:80c05810f911 57 switch(PlatformInfo::getPlatformType()){
nyatla 10:80c05810f911 58 case PlatformInfo::PF_MBED:
nyatla 10:80c05810f911 59 mbedled = p%2;
nyatla 10:80c05810f911 60 break;
nyatla 10:80c05810f911 61 case PlatformInfo::PF_LPCXPRESSO:
nyatla 10:80c05810f911 62 lpcxled = p%2;
nyatla 10:80c05810f911 63 break;
nyatla 10:80c05810f911 64 }
nyatla 19:66d729b94d16 65 //try to ModRomFS module.
nyatla 19:66d729b94d16 66 if(this->modromfs.execute(i_connection)){
nyatla 19:66d729b94d16 67 return;
nyatla 19:66d729b94d16 68 }
nyatla 5:6a2a1644ea2c 69 //try to ModLocalFileSystem
nyatla 5:6a2a1644ea2c 70 if(this->modlocal.execute(i_connection)){
nyatla 5:6a2a1644ea2c 71 return;
nyatla 5:6a2a1644ea2c 72 }
nyatla 5:6a2a1644ea2c 73 //try to ModLocalFileSystem(SD)
nyatla 5:6a2a1644ea2c 74 if(this->modsd.execute(i_connection)){
nyatla 0:ec1e45489427 75 return;
nyatla 0:ec1e45489427 76 }
nyatla 19:66d729b94d16 77 if(this->modupnp.execute(i_connection)){
nyatla 19:66d729b94d16 78 return;
nyatla 19:66d729b94d16 79 }
nyatla 5:6a2a1644ea2c 80 //Otherwise, Send simple top index page.
nyatla 5:6a2a1644ea2c 81 i_connection.sendHeader(200,"text/html",NULL);
nyatla 5:6a2a1644ea2c 82 if(i_connection.isMethodType(Http::MT_GET)){
nyatla 5:6a2a1644ea2c 83 i_connection.sendBodyF(
nyatla 5:6a2a1644ea2c 84 "<!DOCTYPE html>"
nyatla 5:6a2a1644ea2c 85 "<html lang=\"ja\">"
nyatla 5:6a2a1644ea2c 86 "<head></head>"
nyatla 5:6a2a1644ea2c 87 "<body>"
nyatla 5:6a2a1644ea2c 88 "<h1>This is MiMic Server!</h1>"
nyatla 5:6a2a1644ea2c 89 "<hr/>"
nyatla 5:6a2a1644ea2c 90 "<ul>"
nyatla 5:6a2a1644ea2c 91 "<li><a href=\"/local/\">mbed Local Filesystem</a></li>"
nyatla 5:6a2a1644ea2c 92 "<li><a href=\"/sd/\">SDCard</a></li>"
nyatla 5:6a2a1644ea2c 93 "</ul></body>");
nyatla 5:6a2a1644ea2c 94 }
nyatla 0:ec1e45489427 95 }
nyatla 0:ec1e45489427 96 };
nyatla 0:ec1e45489427 97
nyatla 25:8733f6ce73d4 98 FsHttpd* httpd; //create a httpd instance.
nyatla 12:218b57d9a6d4 99
nyatla 0:ec1e45489427 100 int main()
nyatla 0:ec1e45489427 101 {
nyatla 25:8733f6ce73d4 102 NetConfig cfg; //create network configulation
nyatla 27:6923864662d4 103 MiMicNetIf netif;
nyatla 27:6923864662d4 104 Net net(netif);//Net constructor must be created after started RTOS
nyatla 19:66d729b94d16 105 //Prepare configulation.
nyatla 19:66d729b94d16 106 cfg.setUPnPIcon(64,64,8,"image/png","/rom/icon.png");
nyatla 19:66d729b94d16 107 cfg.setUPnPUdn(0xe29f7102,0x4ba2,0x01e0,0);
nyatla 19:66d729b94d16 108 cfg.setFriendlyName("MbedFileServer");
nyatla 12:218b57d9a6d4 109
nyatla 5:6a2a1644ea2c 110 //try to override setting by local file.
nyatla 5:6a2a1644ea2c 111 if(!cfg.loadFromFile("/local/mimic.cfg")){
nyatla 19:66d729b94d16 112 Thread::wait(2000);//wait for SD card initialization.
nyatla 5:6a2a1644ea2c 113 cfg.loadFromFile("/sd/mimic.cfg");
nyatla 12:218b57d9a6d4 114 }
nyatla 25:8733f6ce73d4 115 httpd=new FsHttpd(net,cfg); //create a httpd instance.
nyatla 25:8733f6ce73d4 116 net.start(cfg);
nyatla 25:8733f6ce73d4 117 httpd->loop(); //start httpd loop.
nyatla 0:ec1e45489427 118 return 0;
nyatla 0:ec1e45489427 119 }