WiFiNINAライブラリ (2) WiFi Web Server
Arduino UNO WiFi Rev.2マイコン・ボードを使い、WiFiNINAのサンプル・スケッチのWiFi Web Server を動かします。
サンプルWiFiWebServer.inoを選択すると、本体のスケッチと、もう一つarduino_secrets.hが開きます。こちらのファイルにWi-Fiのアクセス・ポイントのSSIDとパスフレーズを記入します。
#define SECRET_SSID "Buffalo-G-20EA" #define SECRET_PASS "*********" |
●WiFi Web Server を動かす
コンパイル、書き込みをしたときのシリアルモニタの表示です。DHCPによってArduino UNO WiFiにふられたIPアドレスが表示されます。
PCのWebブラウザのURL欄に表示されたIPアドレスを入れて、Arduino UNO WiFiのWebサーバにアクセスします。アナログ・ポートの読み取った値が表示されます。
上記の画面には、クライアントPCからWebサーバーにアクセスしたときのhttpのやり取りが記録されています。1回のアクセスは、「new client」から「client disconnect」までのやりとりです。
Serverクラス
- WiFiServer() 指定したポートで接続を待つ
- begin() 着信接続の待機を開始
- available() サーバに接続されていて読み取り可能なデータをもつクライアントを取得
WiFiクラス
- status() 接続時のステータス
- begin() 初期化
- SSID() アクセス・ポイントのSSID
- localIP() DHCPでふられたWi-Fiアドレス
- RSSI() 信号強度
Clientクラス
- WiFiClient() 指定されたインターネットIPアドレスとポートに接続できるクライアントを作成
- connected() クライアントは接続されている
- available() 接続先のサーバによってクライアントに書き込まれたデータ量を返す
- read() サーバから受信した次のバイトを読み込む
- println() サーバにデータ(ASCII文字)を出力し、その後改行する。
- print() サーバにデータ(ASCII文字)を出力
- stop() サーバとの接続を切る
●ステータスを増やす
このスケッチでは、SSID、IPアドレス、信号強度を表示しました。これに加えて、
- MACアドレス WiFi.macAddress()
- Gatewayアドレス WiFi.gatewayIP()
- サブネット・マスク WiFi.subnetMask()
- 時刻(1970/1/1からの) WiFi.getTime()
上記の項目を追加したステータス関数printWifiStatus()です。
void printWifiStatus() {
// print the SSID of the network you're attached to:
Serial.print("SSID: ");
Serial.println(WiFi.SSID());
// print your board's IP address:
IPAddress ip = WiFi.localIP();
Serial.print("IP Address: ");
Serial.println(ip);
// print the received signal strength:
long rssi = WiFi.RSSI();
Serial.print("signal strength (RSSI):");
Serial.print(rssi);
Serial.println(" dBm");
byte mac[6];
WiFi.macAddress(mac);
Serial.print("MAC: "); Serial.print(mac[5],HEX);
Serial.print(":"); Serial.print(mac[4],HEX);
Serial.print(":"); Serial.print(mac[3],HEX);
Serial.print(":"); Serial.print(mac[2],HEX);
Serial.print(":"); Serial.print(mac[1],HEX);
Serial.print(":"); Serial.println(mac[0],HEX);
IPAddress gateway = WiFi.gatewayIP();
Serial.print("GATEWAY: ");
Serial.println(gateway);
IPAddress subnet = WiFi.subnetMask();
Serial.print("NETMASK: ");
Serial.println(subnet);
Serial.println(WiFi.getTime());
}
実行結果です。WiFi.getTime()の結果は0で、取得を失敗したようです。
●接続時のステータスWiFi.status()
上記のステータス情報は、個々の関数を呼んだ結果です。Wi-Fi接続時のステータスは、WiFi.status()で得られます。Wi-Fi接続を行って10秒待つ後に追加しました。
// wait 10 seconds for connection:
delay(10000);
Serial.println("Wi-Fi status " + String(WiFi.status()));
3が返ってきました。
正常につながったので、3はWL_CONNECTEDだと思われます。passを入れずにSSIDだけで接続しようとすると4が返りました。4はWL_CONNECT_FAILEDと思われます。SSIDを存在しない名前にすると同じく4です。WL_NO_SSID_AVAILではないです。