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()) {
             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();
 Arduino0番から6番までのアナログ・ポートからデータを読み取り、見出しをつけてクライアントに送信します。
                             // 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アドレスを指定しサーバにアクセスした結果を次に示します。

adr0580010.jpg 見出しと、アナログ入力ポートの読み取り値が表示されています。参考のためにArduino IDEでアドレスなどを修正したスケッチも次に示します。後半のコメントを表示領域の関係で削除してあります。

adr0580020.jpg 今回はアナログ・ポートには何も接続されていませんでしたが、この後アナログ・ポートにセンサを接続して温度などがわかるようにします。
<神崎康宏>


トラックバック(0)

このブログ記事を参照しているブログ一覧: 連載(58)Arduinoで何でも制御 LANに接続する(4)

このブログ記事に対するトラックバックURL: http://www.eleki-jack.com/mt/mt-tb.cgi/3807

コメントする

カテゴリ

このブログ記事について

このページは、kanzakiが2010年1月22日 12:20に書いたブログ記事です。

ひとつ前のブログ記事は「「Gainer互換Pepperでフィジカル・コンピューティング」フォローアップ記事(6)」です。

次のブログ記事は「「Gainer互換Pepperでフィジカル・コンピューティング」フォローアップ記事(7)」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

Creative Commons License
このブログのライセンスは クリエイティブ・コモンズライセンス.