Arduino UNOにつないだセンサ情報をネットワーク経由で結果を取得するには、WiFi接続しないとなあ..とおもい、以下のWiFiシールドをあまり考えずにAmazonでポチった。
Seeed Wiki:WLS06201P WiFi Shield v1.2
あとで調べると純正のArduino WiFiシールドがあって、
Arduino WiFiShield
私の買ったWiFiシールドはサードパーティ製だった。
しかも..箱を開けると、なんとキット製品だった..
しょうがないので、はんだごてを買ってきてハンダ付けをする..
添付の小袋に、ジャンパピンが2個はいっていたので、もしやとおもいメーカのWikiを調べてみると、WIFI_TXとWIFI_RXをArduinoのデジタルピンへ割り付けないといけないことがかかれていた。
なので、Wiki上にある回線図どおりに WIFI_TXはD2へ、WIFI_RXはD3へ割り付けるジャンパピンを差し込む。
同梱のカバーは、なにがあるかわからないので、とりあえずつけないでおく。
そして、Arduino UNO上ににマウントする。シールド側のピン数のほうがArduinoより少ないが、位置は基板側のラベルに合わせてマウントする。
そしてUSBとPCを接続。
Wikiにかかれていたとおり、次にPCから https://github.com/Seeed-Studio/WiFi_Shield に行き、右下のDownload Zipボタンを押してライブラリをダウンロードする。
展開して、WiFi_Shield-masterフォルダをWiFi_Shieldに改名する。
そしてこのフォルダをArduino IDEディレクトリのlibrariesディレクトリへ移動する。
Arduino IDEを起動させる。
ボードをArduino UNO、ポートを適当に変更する。
ねんのため、BlinkサンプルでLチカ確認。
次に、ライブラリについているサンプルコードwifly_httpで疎通を試す。
ファイル>スケッチの例>WiFi_Shield>Examples>wifly_httpを選択。
Sketchファイルを以下のように変更する。
//#define SSID "Your-SSID"
//#define KEY "passphrase"
#define SSID "<WiFiルータのSSID>"
#define KEY "<WiFiルータのパスフレーズ>"
本当はTX/RXの割付先の番号を変更する必要があるのだが、Wikiどおりにジャンパピンをさしたのでヘンコウしなくて済んだ。
AUTHもデフォルトのWIFLY_AUTH_WPA2_PSKのままでOKだった。
コンパイルだけ実行してOKを確認し、マイコンボードに書き込む。
シリアルコンソールを開き、動作を確認する。
すぐにはつながらないので、つながるまで待つ。このあたりはWiFiルータとの距離とか環境によって違うと思うが、ArduinoはPCなんかよりも断然スペックが低いのだから処理速度も当然遅い。後で手動でscanを実行してみたが、アクセスポイントのとりこぼしがおおかった。毎回結果が違っていたり、そのへんはプログラム側で対応してあげないとダメだ。
使ったWiFiルータは自宅でホコリをかぶっていたこれだ。プロクシ設定などなしでインターネットに繋がる設定(デフォルト状態)で動かした。
#CloudStackを試しに入れるとき使ったルータだ..
ちなみに私の環境で実行した結果は、以下のとおり。
------- WIFLY HTTP --------
Try to join <SSID>
Failed to join <SSID>
Wait 1 second and try again...
Try to join <SSID>
Failed to join <SSID>
Wait 1 second and try again...
Try to join <SSID>
Failed to join <SSID>
Wait 1 second and try again...
Try to join <SSID>
Failed to join <SSID>
Wait 1 second and try again...
Try to join <SSID>
Failed to join <SSID>
Wait 1 second and try again...
Try to join <SSID>
Failed to join <SSID>
Wait 1 second and try again...
Try to join <SSID>
Failed to join <SSID>
Wait 1 second and try again...
Try to join <SSID>
Succeed to join <SSID>
Try to get url - http://httpbin.org/get?hello=world
------------------------------
Failed to connect.
Try to post data to url - http://httpbin.org/post
-------------------------------
Failed to connect.
HTTP/1.1 200 OK
Server: nginx
Date: Thu, 14 May 2015 08:08:50 GMT
Content-Type: application/json
Content-Length: 272
Connection: close
Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true
{
"args": {},
"data": "Hello world!",
"files": {},
"form": {},
"headers": {
"Content-Length": "12",
"Content-Type": "text/plain",
"Host": "httpbin.org"
},
"json": null,
"origin": "219.117.226.193",
"url": "http://httpbin.org/post"
}
*CLOS*
Enter command mode. Send "exit"(with \r) to exit command mode
RESTデータがとれておれば成功だ。
上記のシリアルデータログは、一番早くつながった時のもの。もっととてつもなくかかることもあるのだ。
ちなみにscan結果は、以下のとおり。
SCAN:Found 1この結果もほんとうにころころかわる。PCがどれだけ優れたWiFi機能を搭載しているのか身にしみてよくわかった。
Num SSID Ch RSSI Sec MAC Address Suites
1 <SSID> 06 -58 WPA2PSK 10:6f:3f:xx:xx:xx AESM-AES WPSPB 3104
END:
なおIDEにデフォルトでWiFiサンプルがはいっているが、おそらくこれがArduino純正用なのだとおもう(試してない)。
Groveコネクタがデジタル、アナログ1つづつついているので、これで済ませられるのであれば、BASEシールドはいらなさそうだ。
0 件のコメント:
コメントを投稿