次に、昨日FETやソレノイドと一緒に買っておいた「イーサネットシールド」というやつを試す。
これを買ったのは、簡単なウェブインターフェイスで、例えばフォームのボタンをクリックするとデジカメのシャッターが落ちる、みたいなのをやりたかったからだ。千石電商で3240円だったが、多分、もっと安い互換品などもあるのだろう。
ともかく、こんな箱に入っている、こういう形のブツである。

この方のサイトなどを勝手に参考にさせていただきつつ、いじくってみる。
Arduinoに取り付けるとこのようになる。

で、ArduinoのIDEにサンプルプログラムが入っているから、それをタッチアップして目的を達する。
注意しなければならないのは、私の買ったのは「ETHERNET SHIELD 2」という最新のもので、ネットで多く紹介されている「ETHERNET SHIELD R3」というものとは違うということだ。
私の買った「ETHERNET SHIELD 2」は、最新のArduino IDE 1.7.3でないと、サンプルコードなども違い、扱えない。私が使っているIDEは1.6.4なので、アップグレードしなければならない。
アップグレードしたIDEで、次のように「ファイル」→「スケッチの例」→「Ethernet2」とメニューを操作していくとサンプルコードが出てくる。

- AdvancedChatServer
- BarometricPressureWebServer
- ChatServer
- DhcpAddressPrinter
- DhcpChatServer
- TelnetClient
- UdpNtpClient
- UDPSendReceiveString
- WebClient
- WebClientRepeating
- WebServer
……このように、けっこういろいろなものが入っている。今日は一番下の「WebServer」を選ぶ。
このソースのMACアドレスとIPアドレスを、先達サイトを参考に現況に合わせて書き換える。MACアドレスはシールドの基板の裏にシールで貼ってある。
出来上がったらそのへんにのたくっているカテ5のモジュラーをえいっとつっこみ、ブラウザにIPアドレスを入れれば、すぐにミニWebサーバとして動き出す。

これは、各アナログピンの現在の値を5秒毎にモニタしている。何かセンサをピンにつなげば、即、ネット温度計やネット照度計の出来上がりである。
さて、次に、コイツで「POST」を受け取る段取りだ。コイツにアクセスして、フォームのボタンを押すと、ソレノイドが動く、という機構を作るためである。
本当ならクライアントから来る文字列を標準入力で受ける段取りが必要だが、今日は簡略化して、ブラウザがPOSTを投げたら、内容はなんでもいいから、とりあえずソレノイドを動かす、というふうにする。
そのソースコードはこんな感じだ。
//
// WebServerでソレノイドを動かす。
// 佐藤俊夫
// 27.5.24(日)1352~
//
#include <SPI.h>
#include <Ethernet2.h>
const int FET = 9;
byte mac[] = {
0x90, 0xA2, 0xDA, 0x0F, 0xF6, 0x74
};
IPAddress ip(192, 168, 1, 129);
EthernetServer server(80);
void setup() {
Ethernet.begin(mac, ip);
server.begin();
pinMode(FET, OUTPUT);
}
void loop() {
String recvbuf;
EthernetClient client = server.available();
if (client) {
// an http request ends with a blank line
boolean currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
recvbuf += c;
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connection: close");
client.println();
client.println("<!DOCTYPE HTML>");
client.println("<html>");
client.println("<head></head>");
client.println("<body>");
client.println("<center><h3>Drive solenoid.</h3>");
client.println("<hr>");
client.println("<form method=\"POST\">");
client.println("<input type=\"submit\" value=\"Do!\">");
client.println("</form>");
client.println("</center>");
client.println("</body>");
client.println("</html>");
if (c == '\n' && currentLineIsBlank) {
break;
}
if (c == '\n') {
currentLineIsBlank = true;
if(recvbuf.indexOf("POST") == 0){
digitalWrite(FET, HIGH);
delay(2000);
digitalWrite(FET, LOW);
}
recvbuf = "";
}
else if (c != '\r') {
currentLineIsBlank = false;
}
}
}
delay(1);
client.stop();
}
}
次に、ちょっと仕掛けを作る。本当はカメラのシャッターを切りたいのだが、買ってきたソレノイドの力があんまりなくて、シャッターが切れない。それで、ガラスのコップをソレノイドで叩いて音を出す。
ソレノイドは、午前中やったように、電流がちょいとばかり多く流れるので、FETでリレーしてやる。
こんな仕掛けにする。

こんなフォームを作り、携帯電話にロードする。「Do!」というボタンをクリックすると、ソレノイドが動く。

で、ガラスのコップにソレノイドの軸を近づけて……。

操作するとこんな風になる。