WIZ550ioとArduino Mega2560/Arduno Dueを繋げてPCからpingしてみる

wiz550io2arduino800x360

いろいろあるLANモジュールの中にWIZ550ioというのがあります。WIZ550ioはイーサーネットコントローラチップのW5500を実装していて、また正規のMACアドレスが書き込まれているモジュールです。

W5500が実装されたモジュールは何種類かあるようですが本記事の執筆時点(2020.12)でMACアドレスが書き込まれているのはこのWIZ550ioしか見つけることができませんでした。後のW5500実装モジュールはMACアドレスを自分で設定してやる必要があります。MACアドレスは閉じたローカルネットワーク内で使用できるテスト用途のアドレスを使うことができたと思いますが一般的な用途で自分が管理できる範囲外で使用する可能性から重複問題も考慮しMACアドレスを購入しなくてはならなかったと記憶しています。

WIZ550ioの本体の写真は以下になります。今回はスイッチサイエンスさんで購入させていただきました。


wiz550io_photo00

上写真で基板上、白地にモザイクをかけているところに書き込まれたMACアドレスが記載されています。

で、本題ですがこのWIZ550ioとArduinoを繋げてPCからpingを叩いて応答させてやりたいと思います。

今回使うArduinoは、Mega2560とDueの2機種で試してみました。まぁピン配は(完全ではないですが)ほぼ同じなので配線は同じですが。

Arduino Mega2560とWIZ550ioの接続図は以下のようになります。


wiz550io_to_arduinoMega

Arduino DueとWIZ550ioの接続図は以下のようになります。


wiz550io_to_arduinoDue

Arduinoのプログラムは、 Mega2560とDue共通で以下のようになります。

#include <SPI.h>
#include <Ethernet3.h>

 byte u_ip[] = {xxx, xxx, xxx, xxx};
 byte u_subnet[] = {255,255,255,0};
 byte u_gateway[] = {xxx, xxx, xxx, xxx};
 byte u_dns[] = {xxx, xxx, xxx, xxx};

 void setup()
 {
   Ethernet.begin(u_ip, u_subnet, u_gateway, u_dns);
 }
 void loop()
 {
 }

 ここでEthernet3.hは、IDEのライブラリの管理からは(2020.12執筆時点では)インストールすることができないので”Arduino Ethernet3″でググってGitHubよりダウンロードしてインストールしてやる必要があります。

また WIZ550ioを使う場合はインストール後にEthernet3.hを以下のように1行追記してやる必要もあります。

※このあたりはArduinoのネットワーク通信 – Networkさんのページを参考にさせていただきました。

........
#include "IPAddress.h"
#include "EthernetClient.h"
#include "EthernetServer.h"
#include "Dhcp.h"
 
//ヘッダーファイルのインクルード文の後に以下の1行を追記                                                                                             
#define WIZ550io_WITH_MACADDRESS

ここでコードのxxxのところですが
byte u_ip[] = {xxx, xxx, xxx, xxx};  よくある192.168…の自分のネットワーク内で空いているIPアドレスに書き換えてください。

ちなみにsetup()関数内の

Ethernet.begin(u_ip, u_subnet, u_gateway, u_dns);

のところは以下のIPアドレスだけの記述でも動作すると思います

Ethernet.begin(u_ip);

ただ、いろいろなネットワークの設定のケースがあるのでフル設定で記述しておいたほうが後々楽かと思います。

byte u_subnet[] = {255,255,255,0}; は、xxxじゃないですが自分のネットワークのサブネットマスクが異なっていれば書き換えてください。

byte u_gateway[] = {xxx, xxx, xxx, xxx}; はデフォルトゲートウェイのIPアドレスに書き換えてください。

byte u_dns[] = {xxx, xxx, xxx, xxx}; は自分が使っているDNS設定のIPアドレスに書き換えてください。

ここまでできたら、コンパイルしてArduinoに書き込んでください。

でPCのコンソール端末を開いて(例としてArduinoに書き込んだu_ip(IPアドレス)が192.168.0.50の場合)ping 192.168.0.50と入力してください

hoge$ ping 192.168.0.50
PING 192.168.0.50 (192.168.0.50) 56(84) バイトのデータ
 64 バイト応答 送信元 192.168.0.50: icmp_seq=1 ttl=128 時間=0.287ミリ秒
 64 バイト応答 送信元 192.168.0.50: icmp_seq=2 ttl=128 時間=0.082ミリ秒
 64 バイト応答 送信元 192.168.0.50: icmp_seq=3 ttl=128 時間=0.077ミリ秒

みたいな感じでpingが帰ってきたら通信成功です。(上記はLinuxのGNOMEターミナルから入力した場合の表記です)

実際にWIZ550ioとArduino Dueを接続した写真は以下になります。接続だけなら別にブレッドボードを使う必要もないのですがSPIラインをオシロでモニターしたくてWIZ550ioをブレッドボードに挿して動作確認してみました。

wiz550io_due_photo00

中川電子技研

この投稿へのコメント

コメントはありません。

コメントを残す

メールアドレスが公開されることはありません。

この投稿へのトラックバック

トラックバックはありません。

トラックバック URL