ホーム » 2010 » 4月 » 20

日別アーカイブ: 2010年4月20日

2010年4月
« 3月   5月 »
 123
45678910
11121314151617
18192021222324
252627282930  

最近の投稿(電子情報)

アーカイブ

カテゴリー

Arduinoイーサネットシールドを使ってみた

創造工学演習でハードウェア系を作るネタの導入として、 Ethernet シールド付き Arduino を動かしてみた。単なるメモなので…

// 雛形のスケッチは、
// ..PATH../Arduino.app/Contents/Resources/Java
//    /hardware/libraries/Ethernet/examples/WebServer/WebServer.pde
#include <ethernet.h>
byte mac[]	= { 0x02 , 0x11 , 0x22 , 0x33 , 0x44 , 0x55 } ;
byte ip[]	= { 192 , 168 , 2 , 88 } ;  //
byte gateway[]	= { 192 , 168 , 2 ,  1 } ;  //
byte subnet[]	= { 255 , 255 , 255 , 0 } ; // Class-C
Server server = Server( 80 ) ;
void setup() {
Ethernet.begin( mac , ip , gateway , subnet ) ;
server.begin() ;
Serial.begin( 9600 ) ; // 動作確認用に受信データを表示
}
void loop() {
Client client = server.available() ;
if ( client ) {
// an http request ends with a blank line
boolean current_line_is_blank = true;
while( client.connected() ) {
if ( client.available() ) {
char c = client.read();
Serial.write( c ) ; // 動作確認用に、受信データを表示
// if we've gotten to the end of the line (received a newline
// character) and the line is blank, the http request has ended,
// so we can send a reply
if ( c == '\n' && current_line_is_blank ) {
// send a standard http response header
client.println( "HTTP/1.1 200 OK" ) ;
client.println( "Content-Type: text/html" ) ;
client.println();
// output the value of each analog input pin
for (int i = 0; i < 6; i++) {
client.print("analog input ");
client.print(i);
client.print(" is ");
client.print(analogRead(i));
client.println("<br />");
}
break;
}
if (c == '\n') {
// we're starting a new line
current_line_is_blank = true;
} else if (c != '\r') {
// we've gotten a character on the current line
current_line_is_blank = false;
}
}
}
// give the web browser time to receive the data
delay(1);
client.stop();
}
}

上記プログラムを検証&書き込みの後、ブラウザで http://192.168.2.88/ にてアクセスする。すると、シリアルモニタには下記の出力が得られた。 後半は、ブラウザがfavicon.icoを取得しようとしたアクセスが行われている。 しかし上記のプログラムは、何をGETしようとしたのか判別せずに、リクエスト末尾の 『空行』を見つけたら、アナログ値を出力しようとするだけ。 このため、Reload する度に、2回アナログ値サンプリングが行われる。

GET / HTTP/1.1
Host: 192.168.2.88
Connection: keep-alive
User-Agent: Mozilla/5.0 ...Safari/532.5
Cache-Control: max-age=0
Accept: application/xml,application/xhtml+xml,text/html;...
Accept-Encoding: gzip,deflate,sdch
Accept-Language: ja,en-US;q=0.8,en;q=0.6
Accept-Charset: UTF-8,*;q=0.5
GET /favicon.ico HTTP/1.1
Host: 192.168.2.88
Connection: keep-alive
User-Agent: Mozilla/5.0 ...Safari/532.5
Accept: */*
Accept-Encoding: gzip,deflate,sdch
Accept-Language: ja,en-US;q=0.8,en;q=0.6
Accept-Charset: UTF-8,*;q=0.5

ブラウザで、http://192.168.2.88/ で表示された結果は、下記の通り。 ちなみにアナログポートは、実験だし開放のまんまで、ゴミデータ。

analog input 0 is 393
analog input 1 is 331
analog input 2 is 282
analog input 3 is 286
analog input 4 is 269
analog input 5 is 284

創造工学演習・導入実験part2

昨日に続いて、創造工学演習の授業にて、ものづくりのために必要な予備知識を得るための、 導入実験2日目。

私の担当のPHPの実験では、Web応用においてPHPと自分で書いたC言語との データのやり取りといった必要性が出てくるため、system() 関数を使って、 プログラムを呼び出したり、C言語側でint main( int argc , char*argv[] ) ; によって、 コマンドライン引数を取得したり、プロセス帰り値の話をして、簡単な呼び出し実験。