基本ライブラリ
デジタルIO
アナログIO
拡張IO
時間
数学
三角関数
乱数
ビットバイト操作
割り込み
シリアル通信
標準ライブラリ
Ethernet
Ethernetサーバー
Ethernetクライアント
サーボモーター
キャラクタ液晶表示
SPI通信
I2C通信(Wire)
メモリカード
メモリカード(File操作)
周期処理(MsTimer2)
時計(RTC)
Ethernet サーバー
Ethernetでサーバーとして動作するためのライブラリです。現在開発中のため、mbedライブラリのサンプルのみ掲載しています。Webコンパイラでビルド可能です。
サンプルプログラム
サーバーサンプル。表示されたサーバーIPにアクセスするとエコーバックします。
#include <Arduino.h>
#include <EthernetInterface.h>
#include <stdio.h>
#include <string.h>
EthernetInterface eth;
TCPSocketServer svr;
bool serverIsListened = false;
TCPSocketConnection client;
bool clientIsConnected = false;
void setup (void)
{
pinMode(PIN_LED_BLUE, OUTPUT);
pinMode(PIN_LED_RED, OUTPUT);
digitalWrite(PIN_LED_BLUE, LOW);
digitalWrite(PIN_LED_RED, LOW);
//setup ethernet interface
printf("Start to connect..\n\r");
eth.init(); //Use DHCP
eth.connect();
printf("IP Address is %s\n\r", eth.getIPAddress());
//setup tcp socket
if(svr.bind(80)< 0) {
printf("tcp server bind failed.\n\r");
return ;
} else {
printf("tcp server bind successed.\n\r");
serverIsListened = true;
}
if(svr.listen(1) < 0) {
printf("tcp server listen failed.\n\r");
return ;
} else {
printf("tcp server is listening...\n\r");
}
//listening for http GET request
while (serverIsListened) {
//blocking mode(never timeout)
if(svr.accept(client)<0) {
printf("failed to accept connection.\n\r");
} else {
printf("connection success!\n\rIP: %s\n\r",client.get_address());
clientIsConnected = true;
digitalWrite(PIN_LED_BLUE, HIGH);
while(clientIsConnected) {
char buffer[1024] = {};
switch(client.receive(buffer, 1023)) {
case 0:
printf("recieved buffer is empty.\n\r");
clientIsConnected = false;
break;
case -1:
printf("failed to read data from client.\n\r");
clientIsConnected = false;
break;
default:
printf("Recieved Data: %d\n\r\n\r%.*s\n\r",strlen(buffer),strlen(buffer),buffer);
if(buffer[0] == 'G' && buffer[1] == 'E' && buffer[2] == 'T' ) {
printf("GET request incomming.\n\r");
//setup http response header & data
char echoHeader[256] = {};
sprintf(echoHeader,"HTTP/1.1 200 OK\n\rContent-Length: %d\n\rContent-Type: text\n\rConnection: Close\n\r\n\r",strlen(buffer));
client.send(echoHeader,strlen(echoHeader));
client.send(buffer,strlen(buffer));
clientIsConnected = false;
printf("echo back done.\n\r");
}
break;
}
}
printf("close connection.\n\rtcp server is listening...\n\r");
client.close();
digitalWrite(PIN_LED_BLUE, LOW);
}
}
}
void loop(){
}