Posts Tagged ‘Webサービス’
2016年10月1日のアドミンティーチャーズのラボワークでは、ESP8266 WiFi モジュールを搭載した Arduino WeMos D1 を 2台使い、一方を WiFi アクセスポイント、もう一方を WiFi クライアントとして接続し、Web サービスでデータ通信をする。
アドミンティーチャーズのラボワークでは、8月と9月にESP8266 WiFi モジュールを搭載した Arduino WeMos D1 を使って通信を試した。WeMos D1 は安価で手に入れやすいマイコンボードで、実習教材にも適していると思われる。しかしまとまった解説やサンプルスケッチがなかなか見当たらない。多く見られるのは WiFi クライアントにしてアクセスポイントに接続し、Web サービスを実装するというものだが、WiFi クライアントにすることや Web クライアントを実装する事例は少ない。試行錯誤が必要だったが、うまく通信できるようになった。
今回の「ラボワーク」では 2台の WeMos D1 を使う。一方の WeMod D1 を WiFi アクセスポイントの設定にし、Web サービスを実装する。Web サービスでは、アナログ I/O ポート A0 に接続したボリュームの電圧を Web ページに表示するようにしておく。もう一方の WeMos D1 は WiFi クライアントの設定をし、起動したら WiFi アクセスポイントにした WeMos D1 に接続するようにし、Web クライアントを実装して Web ページを取得し、HTML テキストからボリュームの値を取り出して Multifunction Shield の 7セグメント LED に表示する。
マイコンボードが互いに WiFi 接続できれば応用範囲が広がるだろう。また Web サービスや Web クライアントを実装することで、Web サービスの仕組みも理解できる。
アドミンティーチャーズのラボワークは、会の性質上「情報教育に関心のある方」としているが、必ずしも学校関係者に限定しているわけではないので、興味のある方はぜひ来てほしい。またノートパソコンの Arduino 開発環境は、当日ラボワークで設定することもできるし、ノートパソコンがなくても実習を楽しめるし、ゆるやかな体験、交流の場なので、気軽に手ぶらで来てもらってかまわない。
アドミンティーチャーズ Web サイト
https://adminteachers.wordpress.com/
アドミンティーチャーズのラボワーク LW04 「W5100 イーサネットシールドを使ったWebサービスのプログラミング」の報告
今年2月から毎月第一土曜日と決めて神戸三ノ宮の会議室で行っているマイコンボード勉強会「ラボワーク」。5月は「W5100 イーサネットシールドを使ったWebサービスのプログラミング」をテーマにした。
このイーサネットシールドは 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 をコントロールするようなこともできる。
しかし、メモリの制約だと思われるが、あまり長い HTML テキストを送ることや POST メソッドも長いメッセージを受け取ることができない。そこで、HTML テキストは SD カードに保存しておき逐次読みだして送信することを考えなければいけない。また POST メソッドも不要なテキストを削除して処理する必要がある。
イーサネットシールドになぜ SD カードスロットが付いているのかが疑問だったが、実用的な Web サービスを構築するには長い HTML テキストを処理する必要があるからだ、ということがよくわかった。
Arduino と Web サービスは今後も「ラボワーク」でとりあげることにする。無線ネットワークもやってみたい。わかったことの詳細は、また別途項を改めて報告したい。
今週末は神戸三ノ宮でアドミンティーチャーズのラボワーク。ArduinoでWebサービスをプログラミング。
今週末は連休の後半だが、5月7日(土)に神戸三ノ宮でアドミンティーチャーズのラボワーク第4会をやる。今回のテーマは「Webサービス」だ。使うのは WIZnet の TCP/IP ハードウェア処理チップ W5100 を使った Arduino UNO 用の定番イーサネットシールドだ。
アドミンティーチャーズ「ラボワーク LW04 – W5100イーサネットシールドを使ったWebサービスのプログラミング」
https://adminteachers.wordpress.com/2016/04/18/%e3%83%a9%e3%83%9c%e3%83%af%e3%83%bc%e3%82%af-lw04-w5100%e3%82%a4%e3%83%bc%e3%82%b5%e3%83%8d%e3%83%83%e3%83%88%e3%82%b7%e3%83%bc%e3%83%ab%e3%83%89%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%9fweb/
Arduino には、このイーサネットシールドを使って TCP/IP 通信をするライブラリが提供されている。このライブラリを利用すると簡単に TCP/IP 通信をするプログラムを作ることができる。Web サービスのサンプルコードも提供されており、簡単に Web サーバーを作ることができる。
Web サーバーを作るだけでなく、プログラム上で TCP/IP 通信のデータを見ると、Web サービスでどんなデータがやりとりされているかがわかる。すると単に決まった固定の HTML テキストを返すだけでなく、I/O ポートから受け取ったデータを返すことや、POST メソッドで受け取ったデータをどう処理すればいいかが理論的に理解できる。
このように今回の実習では、単に実用的な Web サービスを作るだけでなく、HTTP 通信の中身を明らかにすることもラボワークの目的とする。まさに「ラボ」という言葉にぴったりの時間にするように企画している。
日経ソフトウエア 2014年5月号 – プログラミングは学ぶより作れ! 実技優先 C言語入門(書評)
特集1「プログラミングは学ぶより作れ! 実技優先C言語入門」は28ページの特集で、前半が「ソフトエア開発の概要」、「開発ツールの準備」、「コマンドプロンプトを使いこなす」、「本、ソフト、ヘルプ、検索で情報収集」となっており、プログラミングのガイダンス的な内容だ。しかしここにはある程度プログラミングができる人にも参考になることがたくさん書かれている。実際にプログラミングを始める前に、何を作るか、どう作るかなどの考え方や、ある程度できるようになった次に壁にぶつかったときのこと、などだ。後半は「『作る』は簡単ではないが楽しい」として、実際にあるプログラムをステップ・バイ・ステップで作っていく。この過程では、仕様の決定からテスト、ユーザーの誤入力対策、テストデータの作り方など、ひとつのプログラムを完成させる過程が丁寧に説明されている。もちろん、この後半部分は、実際に自分でやりながら読むのが正しいだろう。
特集2「今年ブレークする4言語」ではMicrosoftのTypeScript、GoogleのGo言語、そしてScalaとRuby2.1が紹介されている。この記事では、これらの言語の特徴を実際のコードを示しながら解説している。もちろんこの記事だけでコードを書けるようにはなりそうにないが、各言語の特徴は簡潔にまとめられておりわかりやすい。ここで紹介されている4つの言語では、やはりMicrosoftのTypeScriptとGoogleのGo言語に強く興味を引かれた。
「すぐにでも自分でやってみたい」と思わせる秀逸な記事が、特集3の「Unityで弾幕系シューティングゲームを作ろう」だ。Unityはもともと3Dゲームを作るための開発ツールだが、2013年11月にリリースされた新バージョン「Unity 4.3」には2Dゲームを作る機能が搭載された。筆者が「3次元への苦手意識からUnityに手を出さなかった人も多いでしょう」「2次元のゲームであればハードルは一気に下がります」と言うように確かに3Dゲームを作るには、たとえ開発ツールがどんなに優秀でも難しいだろうが2次元なら何かしらのゲームは作れそうな気がする。記事では「スプライト」や「コライダー2D」といったゲーム製作上の概念を説明し、実際にシューティングゲームを作る過程が説明される。これを読んでいて、シューティングゲームを作るのもいいが、パズルゲームを作るのも面白そうだと思わせられた。
特別レポート「Googleの新デバイスを試す Chromecastでアプリとテレビを連携」も面白かった。パソコンやゲームマシンがテレビの機能を取り込み、テレビはそれを迎え撃つ、スマホとタブレットが参戦を挑む、といった映像メディアをめぐるデバイス戦争ともいうべき状況が生まれているが、そこでGoogleが発表したドングル型のデバイスChromecastだ。これがどのような仕組みで機能し、アプリ製作者としてはどのような可能性があるかが示されている。これも面白い。
そして連載2回目「ハードウエア入門塾 ラズベリーパーで遊ぼう」だ。この第二回では「スイッチを接続してWebアプリと連動させる」が課題で、ラズベリーパイにスイッチをつけて入力とし、ラズベリーパイにWebサービスを動かしてスイッチの押された回数をWebでネットワークから参照する、といういきなり実用的なものとなった。この回を読めば、温度センサや距離センサなど様々なセンサをラズベリーパイにとりつけ、取得値をWebサービスで公開するという応用ができるだろう。この連載はたいへん興味深い。要注目だ。
付録の冊子は「これで始める これで教える HTML超入門」だ。内容的にはHTMLのタグなど基本的な説明で、「小中学生向けのプログラミング塾創設者が徹底的にわかりやすく解説」とあるように、初心者向けのものだ。しかし、最近よくあるマンガによる解説といったものではなく、しっかりテキストで読ませる内容だ。