13 Sep 2014, 11:15

ArduinoをEthernetシールドを使ってネットワークへ繋げる

もーすけです。前回はArduinoの入門の記事を書きました。
今日は、Ethernetシールドを使ってネットワークへ繋げることをやってみます。 Arduinoは標準のままでは、PCとケーブルでつないでシリアル通信しかできません。 やはりデータの取得したあとにサーバに送ったり、サーバ上のデータを元に挙動を変えたり、ネットワーク通信は必須です。 というわけでEthernetシールドも買ったので活用していきます。

PCとの1対1通信

まずは、スモールステップでPCとの1対1の通信を確認します。
ArduinoにEthernetシールドを装着して、LANケーブルでダイレクトにPCとつなぎます。 このときのIPアドレスが何かは注意しておきましょう。

構成図

f:id:mosuke5:20140907231747p:plain

Arduinoソースコード

ArduinoのソースコードでIPアドレスを指定できます。 PC側とレンジをそろえましょう。

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

byte MAC[] = {0x90,0xA2,0xDA,0x0F,0x8B,0xA2};
byte IP[]  = {192,168,11,3};

void setup()
{
  Ethernet.begin(MAC,IP);
}

void loop()
{
}

疎通確認

PCからArduinoに対してPingを売ってみます。 疎通あれば成功です。
Ping確認ヨシ!!

% ping 192.168.100.3
PING 192.168.100.3 (192.168.100.3): 56 data bytes
Request timeout for icmp_seq 0
64 bytes from 192.168.100.3: icmp_seq=1 ttl=128 time=0.576 ms
64 bytes from 192.168.100.3: icmp_seq=2 ttl=128 time=0.425 ms
64 bytes from 192.168.100.3: icmp_seq=3 ttl=128 time=0.302 ms 

Pingが通っているので問題ないのですが、せっかくなのでARPテーブルを見ておきます。
マックアドレスの取得もヨシ!!

% arp -a
? (192.168.100.3) at 90:a2:da:f:8b:a2 on en4 ifscope [ethernet]
? (192.168.100.255) at ff:ff:ff:ff:ff:ff on en4 ifscope [ethernet] 

DHCPを使って家内LAN接続

先程はスタティックでArduinoにIPアドレスをふりました。
実際の買うようの場面ではDHCPを利用したいです。

構成図

arduino-dhcp

普段はあまり利用しないかもしれませんが、家庭にある無線LANルータにはたいていの場合はLANケーブルのポートがあります。 そこから有線LANケーブルを伸ばしArduinoに結線します。無線LANルータがDHCPサーバとなります。 DHCPによるIPアドレスの取得はとても容易で以下のようにマックアドレスを指定するのみです。

Ethernet.begin(mac) 

以下はArduino公式サイトに則って実施したもの。
Arduino - DhcpAddressPrinter

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

//Mac Address Static
byte mac[] = {0x90,0xA2,0xDA,0x0F,0x8B,0xA2};

void setup()
{
  // Open serial communications and wait for port to open:
  Serial.begin(9600);

  // 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();
}

。{
  Serial.println("abc");
  delay(3000);
}

ArduinoにIPアドレスが割り当てられたかどうか確認するには、無線LANルータにアクセスして確認できます。 マックアドレスとIPアドレスのヒモ付のテーブルが大抵の場合あるのでそちらをみると確認しやすいですよ。

まとめ

Arduinoを実用的に利用するためにEthernetシールドを使って通信できるようにしてみました。
前回やったArduinoの基礎とこのネットワークの設定ができれば、かなりおもしろいことができるようになりますね。
ものづくりに挑戦していきましょう。

関連する記事はこちら
  • これだけは抑えておきたい、Arduino入門時に学ぶべきこと (2014/07/21)
  • comments powered by Disqus
    このエントリーをはてなブックマークに追加