Translate

2015年5月14日木曜日

Arduino UNOにWiFiシールド(WLS06201P)をつないで動作確認する



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
Num            SSID   Ch  RSSI   Sec    MAC Address    Suites
 1                  <SSID> 06 -58 WPA2PSK 10:6f:3f:xx:xx:xx AESM-AES  WPSPB 3104
END:
この結果もほんとうにころころかわる。PCがどれだけ優れたWiFi機能を搭載しているのか身にしみてよくわかった。



なおIDEにデフォルトでWiFiサンプルがはいっているが、おそらくこれがArduino純正用なのだとおもう(試してない)。

Groveコネクタがデジタル、アナログ1つづつついているので、これで済ませられるのであれば、BASEシールドはいらなさそうだ。

0 件のコメント:

NVIDIA K20C で Tensor2Tensor を動かしてみた

ふとしたことで一時的にNVIDIA K20Cが使える機会ができた。 ので、ココぞとばかりに前に動かしたTransformerモデルの 実装サンプル Tensor2Tensor を オプションなし で動かしてみた。 [GitHub]T2T: Tensor2Tensor Tra...