2013年1月1日火曜日

ArdinoでDHCPを試してみる

あけましておめでとうございます。
今年も、初心者だけど、一歩ずつArduinoをよろしくお願いいたします。

今回は、Arduino+Ethernetシールドを使って、DHCP機能を試してみます。


下記のような配置でDHCP機能を試します。


ArduinoではDHCPクライアントを動かし、ネットワーク機器からDHCP機能を使って、IPを貰い受けます。

そもそも、DHCPって何?

前回、Ethernetシールドを使った際に、シールドへIPアドレスを指定しました。
サーバとして使う場合には、IPを指定したほうが使い安いですね。ブラウザのURLのところに入力するのにアドレスが決まっていなかったら困ります。

DHCP機能とは、DHCPクライアントがDHCPサーバに対して、IPを頂戴って、要求すると、DHCPサーバが自分の持っているIPアドレスの中から、誰にも使わせていないIPを、これをどうぞって、渡される機能です。DHCPクライアントは、渡されたIPを自分のIPとして設定し使います。

どのPCがどのIPを使っているかは、DHCPサーバが管理してくれるので、PCやArduino側としては、使っていないIPを頂戴というだけなので、楽ちんです。

もちろん、その時その時の空き状況によるので、毎回同じIPになるとは限りません。

※パソコンを起動し、そのあとArduinoを起動するという順番で、全部で2台しか無い、上の絵では、
いつも同じIPですね(笑)


arduinoのスケッチです。サンプルを使用します。


#include <SPI.h>
#include <Ethernet.h>

// Enter a MAC address for your controller below.
// Newer Ethernet shields have a MAC address printed on a sticker on the shield
byte mac[] = {0x90, 0xA2, 0xDA, 0x0D, 0x99, 0x80 };

// Initialize the Ethernet client library
// with the IP address and port of the server
// that you want to connect to (port 80 is default for HTTP):
EthernetClient client;

void setup() {
 // Open serial communications and wait for port to open:
  Serial.begin(9600);
  // this check is only needed on the Leonardo:
   while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }

  // start the Ethernet connection:
  if (Ethernet.begin(mac) == 0) {
    Serial.println("Failed to configure Ethernet using DHCP");
    // no point in carrying on, so do nothing forevermore:
    for(;;)
      ;
  }
  // print your local IP address:
  Serial.print("My IP address: ");
  for (byte thisByte = 0; thisByte < 4; thisByte++) {
    // print the value of each byte of the IP address:
    Serial.print(Ethernet.localIP()[thisByte], DEC);
    Serial.print(".");
  }
  Serial.println();
}

void loop() {

}

赤字の部分は、macアドレスなので、自分のシールドに書いてある数値へ変更が必要です。

DHCP機能によりIPを取得しているのは、

Ethernet.begin(mac)

の部分です。
DHCP接続が成功したときは1(int)、失敗時は0 として、返り値があります。

実際に、スケッチを試してみると、難なく成功です。
PCからのpingへも反応し、バッチリでした。




・Processingをはじめよう
・Processing アニメーション
・楽しく学ぶコンピュテーショナルデザイン






4 件のコメント:

  1. あけましておめでとうございます。
    いつも楽しみに購読させていただいております。

    返信削除
  2. 匿名さん

    コメントありがとうございます。
    今年もよろしくお願いいたします。

    返信削除
  3. こんばんは、arduino 初心者です。ethernet shield を購入して様々なサンプルテキストを試してみてもうまく動作しません。そしてウェブ周りの知識が乏しいということに気づきました。ここで質問なのですが、dhcp サーバーとは例えばなんですか!?

    返信削除
    返信
    1. 匿名さん
      こんばんわ、書き込みありがとうございます。
      dhcpサーバとは、ブロードバンドルータやサーバで実行されている機能です。もし、ご自宅のパソコンからインターネットを見るときに、ブロードバンドルータをお使いでしたら、そのブロードバンドルータの管理画面に入って、dhcpの項目を探してみてください。わりと、機能を持っています。

      それでは

      削除