ESP8266 (ESP-WROOM-02)에서 Wi-Fi 사용 시 SSID/비밀번호를 브라우저에서 설정할 수 있도록

개요



ESP8266 (이하 WROOM02)에서 Wi-Fi를 사용할 때 브라우저에서 SSID/Password를 설정할 수 있습니다.

소개



샘플 코드는 Wi-Fi SSID와 암호를 하드 코딩하는 경우가 많습니다.
이 상태에서는 Wi-Fi를 전환하기 위해 재컴파일이 필요합니다.

브라우저에서 SSID와 비밀번호를 설정할 수 있도록 하고 싶습니다. (아, 계란이 먼저인가 닭이 먼저인가..)

따라서 Wi-Fi를 설정할 때 WROOM02 자체가 액세스 포인트 겸 웹 서버가 되어 브라우저를 사용한 설정 변경을 서비스하도록 합니다. (서버 모드)
구성 후 재부팅하면 구성된 SSID에 연결됩니다. (클라이언트 모드)

(덧붙여 서버 모드에서의 액세스 포인트는 SSID는 WROOM02의 mac 주소, 패스워드는 「thereisnospoon」으로 하고 있습니다.)

모드 전환



편의를 위해 GPIO0 및 리셋은 택트 스위치를 사용하여 구현해야합니다.
자세한 내용은 다음을 참조하십시오.
ぃ tp // 이 m / 에우 gs / ms / 9 또는 4093813db71278b39

하드 WROOM02 부팅 모드는 다음과 같습니다.


모드
IO15
IO2
IO0
EN


쓰기
Low
High
Low
High

실행
Low
High
High
High


쓰기를 할 때는 IO0을 Low(버튼 누르기)로 한 상태에서 리셋 버튼을 클릭합니다. (시작 순간에 IO0가 Low이면 괜찮습니다)

이번에는 또한 실행 모드에서 시작한 후 서버 모드인지 클라이언트 모드인지를 IO0 상태로 결정했습니다.


모드
재부팅


클라이언트
리셋 버튼을 누르면

서버
리셋 버튼을 눌러 즉시 (1 초 이내) IO0을 길게 누릅니다.


스케치



스케치는 다음과 같습니다.
#include <ESP8266WiFi.h>
#include <WiFiClient.h> 
#include <ESP8266WebServer.h>
#include <FS.h>


// モード切り替えピン
const int MODE_PIN = 0; // GPIO0

// Wi-Fi設定保存ファイル
const char* settings = "/wifi_settings.txt";

// サーバモードでのパスワード
const String pass = "thereisnospoon";


ESP8266WebServer server(80);

/**
 * WiFi設定
 */
void handleRootGet() {
  String html = "";
  html += "<h1>WiFi Settings</h1>";
  html += "<form method='post'>";
  html += "  <input type='text' name='ssid' placeholder='ssid'><br>";
  html += "  <input type='text' name='pass' placeholder='pass'><br>";
  html += "  <input type='submit'><br>";
  html += "</form>";
  server.send(200, "text/html", html);
}

void handleRootPost() {
  String ssid = server.arg("ssid");
  String pass = server.arg("pass");

  File f = SPIFFS.open(settings, "w");
  f.println(ssid);
  f.println(pass);
  f.close();

  String html = "";
  html += "<h1>WiFi Settings</h1>";
  html += ssid + "<br>";
  html += pass + "<br>";
  server.send(200, "text/html", html);
}

/**
 * 初期化(クライアントモード)
 */
void setup_client() {

  File f = SPIFFS.open(settings, "r");
  String ssid = f.readStringUntil('\n');
  String pass = f.readStringUntil('\n');
  f.close();

  ssid.trim();
  pass.trim();

  Serial.println("SSID: " + ssid);
  Serial.println("PASS: " + pass);

  WiFi.begin(ssid.c_str(), pass.c_str());

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");

  Serial.println("WiFi connected");

  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());
}

/**
 * 初期化(サーバモード)
 */
void setup_server() {
  byte mac[6];
  WiFi.macAddress(mac);
  String ssid = "";
  for (int i = 0; i < 6; i++) {
    ssid += String(mac[i], HEX);
  }
  Serial.println("SSID: " + ssid);
  Serial.println("PASS: " + pass);

  /* You can remove the password parameter if you want the AP to be open. */
  WiFi.softAP(ssid.c_str(), pass.c_str());

  server.on("/", HTTP_GET, handleRootGet);
  server.on("/", HTTP_POST, handleRootPost);
  server.begin();
  Serial.println("HTTP server started.");
}

/**
 * 初期化
 */
void setup() {
  Serial.begin(115200);
  Serial.println();

  // 1秒以内にMODEを切り替える
  //  0 : Server
  //  1 : Client
  delay(1000);

  // ファイルシステム初期化
  SPIFFS.begin();

  pinMode(MODE_PIN, INPUT);
  if (digitalRead(MODE_PIN) == 0) {
    // サーバモード初期化
    setup_server();
  } else {
    // クライアントモード初期化
    setup_client();
  }
}

void loop() {
  server.handleClient();
}

사용법


  • 서버 모드로 부팅 (재설정 버튼을 누르고 IO0을 길게 누릅니다) 후 직렬 모니터에 표시되는 SSID/암호 네트워크에 연결합니다.
  • SSID: 18fe34eexx92  ←  ここはチップ(WROOM02)毎に異なります
    PASS: thereisnospoon
    HTTP server started.
    

  • htp://192.168.4.1/ 방문. Wi-Fi 설정 화면을 엽니다.


  • SSID와 암호를 설정합니다.
  • WROOM02를 재시작 (리셋 버튼을 누르십시오).

  • 요약



    ESP8266(이하 WROOM02)에서 Wi-Fi를 사용할 때 브라우저에서 SSID/Password를 설정할 수 있습니다.

    좋은 웹페이지 즐겨찾기