LoginSignup
0
0

More than 1 year has passed since last update.

Arduino勉強メモ

Posted at

ArduinoとEthernet Sheild2で通信してみた

注意事項

・Ethernet Sheild2を購入していること
・Ethernet Sheild2の裏面に記載のあるMACアドレスをメモしておくこと

序章

プログラムの中身は他の方が書いているブログやissueなどに載ってあるので今回はTipsのようなものを書いていこうと思う。

IPについて

Ethernet.beginを用いたMacアドレスとIPの設定の際には自動取得後にそのIPアドレスを設定するのが楽。
1.まずはIPアドレスを含めないEthernet Sheild2の初期設定を行う。

Ethernet.begin(ここにMACアドレスを入れる)

2.ArduinoのIDEの画面右上にシリアルモニタ(虫眼鏡のアイコン)があるからそこをクリック。
3.エラーが無く、コードが正常にコンパイルされたらシリアルモニタ上にIPアドレスが表示される。
4.シリアルモニタで表示されていたIPアドレスをEthernet Sheild 2の初期設定に追加する。

Ethernt.begin(ここにMACアドレスを入れる, ここにIPアドレスを入れる)

これで設定するIPアドレスが他で使われていないかを確かめる手間が省けた。

ポート番号について

Ethernetでは以下のコードによってポートを指定する。

EthernetServer server = EthernetServer(80);

EthernetServerの80という番号はHTTP通信を行うよ、という意味である。ポート番号というのは色々と予め決められており、HTTP以外の通信を行う際は他の番号を割り当てる必要がある。その他通信規格は"ポート番号"と調べれば出てくるので見てみると良い。
ちなみに、今回はWebサーバーを基準に考えているので、HTTP通信を用いたWebサーバーということで80番を指定している。

HTMLについて

EthernetShield2による通信と言えばWebページによるArduinoの操作だろうか。

この場合、Webページを構成するHTML(Webページのプログラミング言語)のコードをクライアント(Arudinoを操作する側)に丸ごと送信してWebページを表示させるという流れになる。

使用するのはEthernetClientクラスのprintln関数。この関数内に一行ずつHTMLのコードをString型として入れていく。
例は以下の通り。

void returnHTML(EthernetClient client) {

  //---HTTP HEADER---
  client.println("HTTP/1.1 200 OK");
  client.println("Content-Type: text/html");
  client.println();

  //---HTML DOC------
  client.println("<!DOCTYPE HTML>");
  client.println("<html>");
  client.println("<head>");
  client.println("<meta name=viewport content=\"width=80px, initial-scale=4, maximum-scale=4, user-scalable=no\" />");
  client.println("<title>A Remote</title>");
  client.println("</head>");
  client.println("<body style=\"color:rgb(205,205,205);background-color:rgb(96,96,96);text-align:center;\">");
  client.println("Remote<br />");
  client.println("<form method=GET>");
  client.println("<input type=submit name=1 value=ON /><br />");
  client.println("<input type=submit name=0 value=OFF />");
  client.println("</form>");
  client.println("</body>");
  client.println("</html>");

}
最後に今回発生したよくわからないエラーについて

以下のようなエラーがコンパイル時に出力されることがあったので、一応メモしておこうと思いました。

In file included from C:\Program Files (x86)\Arduino\libraries\Ethernet\src\Dns.cpp:8:0:

これはArduino自体のエラーらしく、コンパイル及び実行には何ら影響は無いそうです。
ですが、毎回エラーが出るのも鬱陶しいですし、一応エラーが出ないようにする方法を載せておきます。

#define htons(x) ( ((((x)&0xFF)<<8)&0xFF00) | (((x)>>8)&0xFF) )

これを自分のプログラムコードの一番最後の行に書いておくとエラーは消えます。どんなことを定義しているのかは僕も知らないです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0