今度はSSLでWebサーバに接続する
すでに通常のhttpでサーバに接続する実験は行いましたが、今度は https でサーバに接続してみましょう。Arduino UNO R4 WiFiのためのライブラリを使用すると非常に簡単です。
プログラム
#include "WiFiS3.h"
// 無線LAN接続情報は別ファイルに移した
#include "arduino_secrets.h"
char ssid[] = _SSID;
char pass[] = _PASS;
// 接続先の情報
char host_name[] = "www.google.com";
int host_port = 443;
char host_file[] = "/";
// クライアントのインスタンスの生成
WiFiSSLClient client;
void setup(){
// シリアルインターフェイスの初期化
Serial.begin(9600);
delay(1000);
// WiFiモジュールの存在確認
if(WiFi.status() == WL_NO_MODULE){
Serial.println("WiFiモジュールがありません");
while(true);
}
// WiFiファームウェアバージョンの確認
String fv = WiFi.firmwareVersion();
if(fv < WIFI_FIRMWARE_LATEST_VERSION){
Serial.println("ファームウェアが最新のものではありません");
}
// 無線LANへの接続
Serial.print("接続中...");
while(true){
if(WiFi.begin(ssid, pass) == WL_CONNECTED)break;
Serial.print(".");
delay(1000);
}
Serial.println("完了");
// Arduinoに割り当てられたIPアドレスの確認
Serial.print("IPアドレス:");
Serial.println(WiFi.localIP().toString());
if(client.connect(host_name, host_port)){
// サーバにリクエストを送信
char sendBuffer[128];
sprintf(sendBuffer, "GET %s HTTP/1.1\r\nHost: %s\r\n\r\n", host_file, host_name);
client.print(sendBuffer);
}
while(true){
while(client.available()){
// サーバからのデータを受信
char c = client.read();
Serial.print(c);
}
if(!client.connected()){
// サーバ側から切断されたら終了
Serial.println("disconnected");
client.stop();
break;
}
}
}
void loop() {
}
プログラムの解説
httpで接続するプログラムとほとんど同じなので、相違点のみ解説します。
接続先情報
// 接続先の情報
char host_name[] = "www.google.com";
int host_port = 443;
char host_file[] = "/";
今回は接続先として www.google.com を利用します。なぜかローカル環境やこのブログのあるサーバだと上手くいかなかったので…(証明書がナンチャッテなせいか?)。
接続先ポートも http の 80 から https の 443 に変更しています。
クライアントのインスタンスの生成
// クライアントのインスタンスの生成
WiFiSSLClient client;
httpで接続する場合は WiFiClientクラスのインスタンスを使用しましたが、
httpsで接続する場合は WiFiSSLClientクラスのインスタンスを使用します。
httpとhttpsでの違いは、実はここだけです!
実行結果
このようにhtmlドキュメントが読み込まれています(https://www.google.com/で読み込まれるドキュメントは結構長いです)。
まとめ
- WiFiSSLClientクラスを使用すると、httpsでの接続が簡単にできる
コメント