Fx0とLCDを使用するサンプルです。Ethernet用です。
Dependencies: EthernetNetIf HTTPServer RPCInterface2 TextLCD mbed
Fork of ethernet_test_http_2 by
main.cpp@2:c9f57eeaee5a, 2015-02-14 (annotated)
- Committer:
- komoritan
- Date:
- Sat Feb 14 00:17:45 2015 +0000
- Revision:
- 2:c9f57eeaee5a
- Parent:
- 1:e20fecacd8f6
Fixed
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
komoritan | 1:e20fecacd8f6 | 1 | /* (c) KDDI Technology |
komoritan | 1:e20fecacd8f6 | 2 | * |
komoritan | 1:e20fecacd8f6 | 3 | * This Source Code Form is subject to the terms of the Mozilla Public |
komoritan | 1:e20fecacd8f6 | 4 | * License, v. 2.0. If a copy of the MPL was not distributed with this |
komoritan | 1:e20fecacd8f6 | 5 | * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ |
komoritan | 1:e20fecacd8f6 | 6 | |
yueee_yt | 0:c14da41d70ea | 7 | #include "mbed.h" |
yueee_yt | 0:c14da41d70ea | 8 | #include "EthernetNetIf.h" |
yueee_yt | 0:c14da41d70ea | 9 | #include "HTTPServer.h" |
yueee_yt | 0:c14da41d70ea | 10 | #include "RPCFunction.h" |
komoritan | 1:e20fecacd8f6 | 11 | #include "TextLCD.h" |
komoritan | 1:e20fecacd8f6 | 12 | #define TEXTLCD_LEN 16 |
yueee_yt | 0:c14da41d70ea | 13 | #if 1 |
yueee_yt | 0:c14da41d70ea | 14 | /* |
yueee_yt | 0:c14da41d70ea | 15 | * Use DHCP |
yueee_yt | 0:c14da41d70ea | 16 | */ |
yueee_yt | 0:c14da41d70ea | 17 | EthernetNetIf ethif; |
yueee_yt | 0:c14da41d70ea | 18 | #else |
yueee_yt | 0:c14da41d70ea | 19 | /* |
yueee_yt | 0:c14da41d70ea | 20 | * Use "static IP address" (Parameters:IP, Subnet mask, Gateway, DNS) |
yueee_yt | 0:c14da41d70ea | 21 | */ |
yueee_yt | 0:c14da41d70ea | 22 | EthernetNetIf ethif(IpAddr(xxx,xxx,xxx,xxx), IpAddr(xxx,xxx,xxx,xxx), IpAddr(xxx,xxx,xxx,xxx), IpAddr(xxx,xxx,xxx,xxx)); |
yueee_yt | 0:c14da41d70ea | 23 | #endif |
komoritan | 1:e20fecacd8f6 | 24 | |
komoritan | 1:e20fecacd8f6 | 25 | TextLCD lcd(p24, p26, p27, p28, p29, p30); //LCD |
yueee_yt | 0:c14da41d70ea | 26 | |
yueee_yt | 0:c14da41d70ea | 27 | HTTPServer server; |
yueee_yt | 0:c14da41d70ea | 28 | LocalFileSystem local("local"); |
komoritan | 1:e20fecacd8f6 | 29 | |
komoritan | 1:e20fecacd8f6 | 30 | // LCDディスプレイに文字列を表示させる |
komoritan | 1:e20fecacd8f6 | 31 | void doSetLcd(char* input, char* output); |
komoritan | 1:e20fecacd8f6 | 32 | // RPC Interfaceを宣言(setLcd:外部IF公開名、doSetLcd:外部からのコール後、処理する関数名) |
komoritan | 1:e20fecacd8f6 | 33 | RPCFunction test(&doSetLcd, "setLcd"); |
yueee_yt | 0:c14da41d70ea | 34 | |
yueee_yt | 0:c14da41d70ea | 35 | int main(void) { |
yueee_yt | 0:c14da41d70ea | 36 | |
yueee_yt | 0:c14da41d70ea | 37 | lcd.locate(0,0); |
komoritan | 1:e20fecacd8f6 | 38 | // LCD上段に以下を記載する |
komoritan | 1:e20fecacd8f6 | 39 | lcd.printf("Program start.."); |
yueee_yt | 0:c14da41d70ea | 40 | |
yueee_yt | 0:c14da41d70ea | 41 | if (ethif.setup()) { |
yueee_yt | 0:c14da41d70ea | 42 | error("Ethernet setup failed."); |
yueee_yt | 0:c14da41d70ea | 43 | return 1; |
yueee_yt | 0:c14da41d70ea | 44 | } |
komoritan | 1:e20fecacd8f6 | 45 | |
komoritan | 1:e20fecacd8f6 | 46 | // IPアドレスを取得 |
yueee_yt | 0:c14da41d70ea | 47 | IpAddr ethIp=ethif.getIp(); |
komoritan | 1:e20fecacd8f6 | 48 | // デフォルトはLCD下段にIPアドレスを表示 |
yueee_yt | 0:c14da41d70ea | 49 | lcd.locate(0,1); |
yueee_yt | 0:c14da41d70ea | 50 | lcd.printf("%d.%d.%d.%d", ethIp[0], ethIp[1], ethIp[2], ethIp[3]); |
komoritan | 1:e20fecacd8f6 | 51 | |
yueee_yt | 0:c14da41d70ea | 52 | wait(1); |
yueee_yt | 0:c14da41d70ea | 53 | server.addHandler<RPCHandler>("/rpc"); |
yueee_yt | 0:c14da41d70ea | 54 | FSHandler::mount("/local", "/"); |
yueee_yt | 0:c14da41d70ea | 55 | server.addHandler<FSHandler>("/"); |
yueee_yt | 0:c14da41d70ea | 56 | server.bind(80); |
yueee_yt | 0:c14da41d70ea | 57 | while (1) { |
yueee_yt | 0:c14da41d70ea | 58 | Net::poll(); |
yueee_yt | 0:c14da41d70ea | 59 | } |
yueee_yt | 0:c14da41d70ea | 60 | } |
komoritan | 1:e20fecacd8f6 | 61 | |
komoritan | 1:e20fecacd8f6 | 62 | // LCDの下段にinputされた文字列を表示する |
komoritan | 1:e20fecacd8f6 | 63 | void doSetLcd(char* input, char* output) { |
komoritan | 1:e20fecacd8f6 | 64 | |
komoritan | 1:e20fecacd8f6 | 65 | lcd.locate(0,1); |
komoritan | 1:e20fecacd8f6 | 66 | // 2行目を全て空白表示とする |
komoritan | 1:e20fecacd8f6 | 67 | for (int i = 0; i < TEXTLCD_LEN; i++){ |
komoritan | 1:e20fecacd8f6 | 68 | lcd.printf(" "); |
komoritan | 1:e20fecacd8f6 | 69 | } |
komoritan | 1:e20fecacd8f6 | 70 | |
komoritan | 1:e20fecacd8f6 | 71 | if (TEXTLCD_LEN < strlen(input)) { |
komoritan | 1:e20fecacd8f6 | 72 | // inputデータが16文字を越える場合には、 |
komoritan | 1:e20fecacd8f6 | 73 | // LCD下段に一律"bad data"表示し、クライアント側に"fail"を返却する |
komoritan | 1:e20fecacd8f6 | 74 | lcd.locate(0,1); |
komoritan | 1:e20fecacd8f6 | 75 | lcd.printf("bad data"); |
komoritan | 1:e20fecacd8f6 | 76 | sprintf(output, "fail"); |
komoritan | 1:e20fecacd8f6 | 77 | } else { |
komoritan | 1:e20fecacd8f6 | 78 | // inputデータが16文字以下の場合には、 |
komoritan | 1:e20fecacd8f6 | 79 | // LCD下段に表示し、クライアント側に"success"を返却する |
yueee_yt | 0:c14da41d70ea | 80 | lcd.locate(0,1); |
yueee_yt | 0:c14da41d70ea | 81 | lcd.printf("%s",input); |
komoritan | 1:e20fecacd8f6 | 82 | sprintf(output, "success"); |
komoritan | 1:e20fecacd8f6 | 83 | } |
yueee_yt | 0:c14da41d70ea | 84 | } |