Arduino UNO R4 WiFiをクライアントにする・httpsの場合

Arduino UNO R4

今度は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 から https443 に変更しています。

クライアントのインスタンスの生成
// クライアントのインスタンスの生成
WiFiSSLClient client;

httpで接続する場合は WiFiClientクラスのインスタンスを使用しましたが、
httpsで接続する場合は WiFiSSLClientクラスのインスタンスを使用します。

httpとhttpsでの違いは、実はここだけです!

実行結果

このようにhtmlドキュメントが読み込まれています(https://www.google.com/で読み込まれるドキュメントは結構長いです)。

まとめ

  • WiFiSSLClientクラスを使用すると、httpsでの接続が簡単にできる

コメント

タイトルとURLをコピーしました