ホチキス先生の「プログラマーと呼ばれたい」

InfoPath & SQL Server !

Posts Tagged ‘LAN

アドミンティーチャーズのラボワーク LW04 「W5100 イーサネットシールドを使ったWebサービスのプログラミング」の報告

leave a comment »

今年2月から毎月第一土曜日と決めて神戸三ノ宮の会議室で行っているマイコンボード勉強会「ラボワーク」。5月は「W5100 イーサネットシールドを使ったWebサービスのプログラミング」をテーマにした。

P1100979_clip_640_480

このイーサネットシールドは Arduino の事実上のデファクトスタンダードなイーサネットシールドで、Wiznet の W5100 チップが使われている。Arduino IDE 開発環境で標準でライブラリが用意されているのでプログラミングもしやすい。

このイーサネットシールドを使って Web サービスを実装するには次のようにする。

———————————————————————————

void setup() {
  Ethernet.begin(mac,ip);
  server.begin();
}

void loop() {
  EthernetClient client = server.available();
}

———————————————————————————

たったこれだけで Web サービスが動く。あとは受け取ったデータを解析し、適切な HTML テキストをクライアントに返すだけだ。

クライアントに対してテキストを送り返すには次の一行でいい。

———————————————————————————

  client.println("This is my web");

———————————————————————————

ただこれを単に void loop() に書くだけでは、ひたすら際限なく同じテキストをクライアントに送り続けることになる。そこでクライアントから接続要求があったときに、テキストを一回だけ送るという処理が必要になる。

たとえば次のスケッチは接続要求のキャラクタを文字列につなぎ、文字列に「GET」があれば HTML のリクエストだと判断し、一回だけテキストを返してサービスを終了する。

———————————————————————————

void loop() {
  EthernetClient client = server.available();
    if(client.connected() == 1){
    c = client.read();
    stc.concat(c);
    if(client.available() == 0){
      Serial.println(stc);
    }
  }
  if(stc.indexOf("GET") != -1 && client.available() == 0){
    client.println("This is my web");
    client.stop();
    stc = "";
  }
}

———————————————————————————

これでクライアントから接続すると「This is my web」の文字がブラウザに表示される。正しい HTML 文ではないが、表示されるはずだ。

クライアントからの要求が POST メソッドだったときは、受け取ったテキストを解析して必要な処理をさせることができる。たとえば HTML 文にチェックボックスとボタンを用意して、8 x8 マトリックス LED をコントロールするようなこともできる。

P1160747_mid_640_480

P1160639_mid_640_480

しかし、メモリの制約だと思われるが、あまり長い HTML テキストを送ることや POST メソッドも長いメッセージを受け取ることができない。そこで、HTML テキストは SD カードに保存しておき逐次読みだして送信することを考えなければいけない。また POST メソッドも不要なテキストを削除して処理する必要がある。

イーサネットシールドになぜ SD カードスロットが付いているのかが疑問だったが、実用的な Web サービスを構築するには長い HTML テキストを処理する必要があるからだ、ということがよくわかった。

Arduino と Web サービスは今後も「ラボワーク」でとりあげることにする。無線ネットワークもやってみたい。わかったことの詳細は、また別途項を改めて報告したい。

広告

USBで給電できる Logitec の超小型スイッチングハブ LAN-SW03PSWE を買った。

leave a comment »

出先でイーサネットを実験できるように、USBで給電できるスイッチングハブを探していた。これが意外にない。たとえば、ホテルのイーサネットを WiFi にするような WiFi ルーターは何種類もあり、USB で給電できるものも多い。しかし有線のイーサネットハブで USB 給電できるものは少ない。俺が探したところでは、これ以外には他に2種類しかない。PLANEX 8ポート 10/100M スイッチングハブ FX-08Mini か BUFFALO 10/100Mbps対応 プラスチック筺体 AC&USB電源 3ポート ブラック スイッチングハブ LSW-TX-3EP/CUB だ。

このロジテックの USB 給電スイッチングハブは 2種類あって、もうひとつは LAN ポートが3つしかない LAN-SW03PSWE だ。どちらにしようか迷った。というのも、出先でイーサネットの実験をするには多くのポートは必要なく、3ポートあれば十分だからだ。しかし 5ポートの LAN-SW05PSWE が実売価格で 1,091円、5ポートの LAN-SW03PSWE が 945円。その差はたったの 146円だ。ほんのペットボトル飲料一本程度の違いしかない。応用場面を考えると 5ポートのものを選ぶのがいいだろう、と思った。

P1140033_mid_640_480

USB 給電できる WiFI ハブがあって USB 給電できるスイッチングハブの種類が少ないのには、どうやら消費電力も問題があるようだ。そこは確かに気になっていて、たとえばこの Logirtec の製品でも、商品電力を考えて、あえて 3ポートのものを選択することも考えた。しかしこのモデルは、使っていないポートの電力供給を制限する機能が入っているらしい。それなら 5ポートを選択しても大丈夫だ。

大きさもとってもコンパクトで、掌にすっぽりと収まる大きさだ。実に小さい。

P1140036_mid_640_480

ちなみに厚さはこんか感じだ。イーサネットの RJ45 コネクタの大きさを考えると、厚みはこれがほぼ限界だと思われる。薄い。

P1140038_mid_640_480

持ち歩くことを考えると少しでも重量が小さいほうがいい。だがこれも、スペック上では 3ポートのスイッチングハブが 29g、5ポートのスイッチングハブが 39gとあった。10gの違いは大きくない。実際のところ、購入した 5ポートのスイッチングハブ LAN-SW05PSWE をキッチンスケールに載せて量ると 38g だった。

P1140041_mid_640_480

さてこれを何に使うのかといえば、マイコンボードのイーサネットを使うプログラミング、Web サービスを実装するようなプログラミングを出先で試したいからだ。ちなみに先日、これを持ち出して近所のホームセンターのフードコートでプログラミングをした。快適だった。

P1140106_mid_640_480

もちろん家でも職場でもプログラミングをするが、ちょっとした空き時間、いつもとは違う空間でプログラミングをするのも楽しい。意外に作業がはかどる。ということで、これからもこの USB 給電スイッチングハブを持ち歩き、あちこちでネットワークプログラミングをすることを楽しみにする。

2016年4月20日

松本 吉生(まつもとよしお)
Microsoft MVP Data Platform

1961年京都に生まれ、神戸で幼少期を過ごす。大学で応用化学を学んだのち、理科教諭として高等学校に勤務する。教育の情報化が進む中で校内ネットワークの構築運用に従事し、兵庫県立明石高等学校で文部科学省の「光ファイバー網による学校ネットワーク活用方法研究開発事業」に携わる。兵庫県立西宮香風高等学校では多部整単位制の複雑な教育システムを管理する学籍管理データベースシステムをSQL ServerとInfoPath、AccessなどのOfficeソフトウエアによるOBA開発で構築・運用する。現在は兵庫県立神戸工業高等学校でC#プログラミング、IoTなどのコンピュータ教育を行う。2004年からマイクロソフトMVP(Microsoft Most Valuable Professional)を受賞し、現在14回目の連続受賞。2016年にマイクロソフト認定教育者(Microsoft Innovative Educator Experts : MIEE)を受賞。