Arduino イーサネット・シールド(1)
前回で、IPアドレスの空きエリアがわかりました。空きエリアを元にイーサネット・シールドに次のIPアドレスを割り当てます。
192.168.1.153
MACアドレスは基板に添付されている MACアドレスの値を使用します。
シールドを使用するスケッチ
Arduino IDEに用意されている、イーサネット用のサンプル・スケッチのWebserverに必要な変更を加え動かしてみます。
各定数の定義
スケッチの先頭に、イーサネット・ライブラリを読み込むための#include
MACアドレス、IPアドレス、ゲートウェイ・アドレス、サブネット・マスクを、それぞれbyte型の配列をして定義しそれぞれの値を設定します。
#include
// MACアドレス 00-20-C2-97-23-33 IP 192.168.1.153 とする
byte mac[] = { 0x00, 0x20, 0xC2, 0x97, 0x23, 0x33 };
byte ip[] = { 192, 168, 1, 153 };
byte gtw[]= { 192,168,1,1};
byte sbm[]= { 255,255,255,0};
イーサネット・サーバの定義
イーサネット・シールドと通信相手のPCなどとの役割を決めます。ここでは、イーサネット・シールドに対してPCからブラウザで通信を要求し、シールドがPCにアナログポートから読み取ったデータを表示することにします。
イーサネット・シールドをセットしたArduinoをイーサネット・サーバとして定義して、PCからイーサネット経由でWebブラウザを用いアクセスできるようにします。遠隔地の気象データや、各種のセンサで収集したデータをWebブラウザで確認できるようになります。そのためのサーバのモジュール(クラス)を用意します。
Server server(80);
初期化処理
初期化処理のsetup()の中で、Ethernet.begin(mac, ip,gtw,sbm);によりMACアドレスとIPアドレスを指定します。ゲートウェイとサブネット・マスクは省略すると、それぞれの4番目の値が1と0になります。そのため、多くの場合はMACアドレスとIPアドレスの設定だけで済みます。アドレスなどの設定の後server.begin();でサーバの活動を開始します。
void setup()
{
Ethernet.begin(mac, ip,gtw,sbm);
server.begin();
}
サーバの処理
setup()でサーバが待機状態になりました。server.available()でサーバに接続されたクライアントの情報を得て、クライアントを生成します。接続状態のクライアントがあればクライアントからメッセージを調べます。
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()) {Arduino0番から6番までのアナログ・ポートからデータを読み取り、見出しをつけてクライアントに送信します。
char c = client.read();
// 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でループを抜け、クライアントの解放をclient.stop()で行い、もとに戻ります。
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();
}
}
Arduino IDEに用意されているイーサネットのサンプル・スケッチのWebserverのMACアドレスとIPアドレスを、それぞれのシールドの設定値に変更しました。そのスケッチをArduinoにアップロードし、ArduinoをWebサーバにしWebブラウザでIPアドレスを指定しサーバにアクセスした結果を次に示します。


コメントする