見出し画像

【ミーア】Wi-Fi接続を直接入力ではなく、候補リストから選べるようにする。

はじめに

現状のミーアはESP32とアプリの接続を、まずはBluetoothで接続した後に、Wi-Fi の接続をアプリから BLE 経由で行っている。

ただ、Wi-Fi接続のSSIDとパスワードを直書きする仕様になっていて、これだと、ユーザーからするととても面倒なため、接続可能なWi-Fiを探索して選べる形式に変更したい。


デバイス(ESP32)側実装

Wi-Fiネットワークの探索機能をESP32に実装

ESP32が利用可能なWi-Fiネットワークをスキャンしてリストを作成し、そのリストをBLE経由でアプリに送信するようにファームウェアを実装する。

現在のPlatformIOでのWifi接続部分のコードはこちら

// WifiConnection.h
#pragma once

#include <WiFi.h>

bool setupWiFi(const char *ssid, const char *password);
// WifiConnection.cpp
#include "WiFiConnection.h"
#include "SPIFFS.h"

#define WIFI_CONNECT_TIMEOUT 5000

bool setupWiFi(const char *ssid, const char *password) {
  unsigned long startTime = millis();

  if (ssid == nullptr || password == nullptr) {
    Serial.println("Connecting to WiFi with previously stored credentials...");
    WiFi.begin();
  } else {
    Serial.println("Connecting to WiFi with SSID and password from build flags...");
    WiFi.begin(ssid, password);
  }

  while (WiFi.status() != WL_CONNECTED && millis() - startTime < WIFI_CONNECT_TIMEOUT) {
    delay(1000);
    Serial.println("Connecting to WiFi...");
  }

  if (WiFi.status() == WL_CONNECTED) {
    Serial.println("Connected to WiFi");
    return true;
  } else {
    Serial.println("Not connected to WiFi");
    return false;
  }
}

ESP32でのWi-Fi機能に関する解説はこちらがわかりやすい

ESP32のWi-Fiライブラリは、WiFi.scanNetworks()という、利用可能なWi-Fiネットワークリスト表示してくれる関数がある。

今回は、ESP32をWi-Fiステーションモードに設定する。これにより、ESP32はWi-Fiアクセスポイントとして動作するのではなく、利用可能なWi-Fiネットワークをスキャンしたり、特定のネットワークに接続したりできるようになる。


続きはこちらで記載しています。


この記事が参加している募集

今月の振り返り

よろしければサポートお願いします!いただいたサポートはクリエイターとしての活動費に使わせていただきます!