Arduino Ethernet シールド [改訂増分版]


  以前の記録"Arduino,いざEthernetへ."に記載したプログラムを改訂したので,ここに載せます. 最近またArduinoに触れる機会が増えたことと,Dustin BoswellとTrevor Foucherの著作である"リーダブルコード"を読んだことがきっかけです. より安定した動作とより読みやすいコードを目指して,行数は増えましたが,改変した結果をぜひ共有させてください.

改訂点
  改訂点は,
  • 読みやすさが損なわれない程度にコードをより小さな単位へと分割したこと.
  • GETパラメタをより適切に扱うようにしたこと.
  • コメントを付加したこと.
  • 動作を安定させたこと.
以上4つが挙げられます. なお,今回はGitHubにてコードを公開しています. ご利用はご自由に. GitHubからArduinoEthernet.inoをダウンロード   Arduinoの公式サイトにあるWebServerなるサンプルコードを利用. HTTPリクエストの終端を意味する"2回連続の改行"をBoolひとつで検知します. Webブラウザ(クライアント)がArduinoにGETパラメタ付きでアクセスした際のHTTPリクエストを見ると分かりますが,
GET /?9=ON HTTP/1.1
Host: 192.168.11.22
Connection: keep-alive
...以下略
というように,必ず先頭行にGETパラメタ(キーと値のペア)があります. そこで今回,先頭行をfirstLineOfRequestなるString型変数に丸々代入,あとでその中からGETパラメタのキーと値を探りだす方法を採りました. これにより,キーと値をそれぞれ取り出すことが出来るようになり,プログラム中で自由に使えるようになりました. 自由度の向上です. 本プログラム中ではキーにディジタルピン番号を,値に"ON"か"OFF"かを指定出来るようになっています. サブルーチン"changeOutputPinsStatusBasedOn"中でgetKeyというString型変数にはGETパラメタのキーが代入され,getValueには値が代入されています. 使い方次第で可能性が広がるコードです. Webブラウザという一般的なソフトウェアから,ニッチなWebサーバ(Arduino)上のI/Oを操れるとは,なかなか乙ではありませんか?
  追記:
EthernetシールドにSDカードが挿入されている場合,上のプログラムがうまく動作しない場合があります. SDカードを取り外して失くさないよう大切にしまっておくと期待通りの動作を得ることが出来るかもしれません. もしSDカードを取り外したくない場合は次のコードをsetup()内に追記してください.
void setup() {
  ...
  pinMode(4, OUTPUT);
  digitalWrite(4, HIGH);
  ...
}

8644836129874758701 http://www.storange.jp/2014/04/arduino-ethernet.html http://www.storange.jp/2014/04/arduino-ethernet.html Arduino Ethernet シールド [改訂増分版] 2014-04-30T20:32:00+09:00 http://www.storange.jp/2014/04/arduino-ethernet.html Hideyuki Tabata 200 200 72 72