概要
ESP32 の Wifi 接続機能を使ってみました
Wifi 接続後に動作確認としてインターネット上の外部のサイトに https で接続してレスポンスをシリアルに表示してみます
環境
- macOS 11.6
- Arduino IDE 1.8.16
- ESP-WROOM-32 devkitc v4
スケッチ
#include <WiFi.h>
#include <WiFiMulti.h>
#include <WiFiClientSecure.h>
WiFiMulti wifiMulti;
WiFiClientSecure client;
const char* host = "kaka-request-dumper.herokuapp.com";
void setup() {
Serial.begin(115200);
delay(100);
wifiMulti.addAP("ssid", "ssid_pass");
if (wifiMulti.run() == WL_CONNECTED) {
Serial.println("Wifi Connected.");
}
}
void onButton() {
client.setInsecure();
// インターネットにアクセスできるかテスト
if (!client.connect(host, 443)) {
Serial.println("Connection failed!");
} else {
client.println("GET / HTTP/1.1");
client.println("Host: " + String(host));
client.println();
// レスポンスが返ってくるまで待つ
unsigned long timeout = micros();
while (client.available() == 0) {
if (micros() - timeout > 5000000) {
Serial.println(">>> Client Timeout !");
client.stop();
return;
}
}
// レスポンスの表示
while (client.available()) {
String line = client.readStringUntil('\n');
Serial.println(line);
}
client.stop();
}
}
void loop() {
static uint8_t lastPinState = 1;
uint8_t pinState = digitalRead(0);
if (!pinState && lastPinState) {
onButton();
}
lastPinState = pinState;
delay(500);
}
解説
wifiMulti.addAP でアクセスポイントの情報を定義します
WiFiMulti を使うと複数のアクセスポイントに接続できます
接続完了後に ESP32 のブートボタンを押すと外部のサイトに接続テストします
WiFiClientSecure を使って外部に接続する場合証明書が必要になります
今回はテストなので証明書を使わない方法として client.setInsecure()
を設定しています
HTTP のリクエストは client.println
で作成します
ヘッダ情報やボディ情報などをそれぞれ書き足していきます
レスポンスを使用する場合はレスポンスが返ってくるまで待つ必要があります
レスポンスが取得できる状態になったら client.readStringUntil
で各行を表示しています
最後に
リクエストを作るのが少し面倒ですが HTTP リクエストを送信することができました
今回は実装していませんが Wifi の再接続などの処理も必要かもしれません
0 件のコメント:
コメントを投稿