避免在不使用 Wifimanage 的情况下在您的 ESP8266 上硬编码 WiFi 凭据

Avoid-Hard-Coding-WiFi-Credentials-on-Your-ESP8266 without using Wifimanage

可能吗? ESP8266 通过 iOS 应用程序连接到路由器 wifi? 我想通过 ESP8266 使应用程序控制某些东西。我的工作流程如下:

先谢谢你的指点。

我尝试过这种方式,但我获得了用户体验。因为用户必须执行许多步骤。 - 使用 WiFiManager,将 ESP8266 作为 wifi 路由器。 - 从设备转到 Wifi 设置以连接到 ESP8266 Wifi。 - 通过从网络浏览器转到 192.168.4.1 提供 Wifi 信息(SSID、密码)。 这里注意一下,避免这样

请多多指教。 谢谢

WiFiManager 要求您:

  1. 连接ESP8266的AP
  2. 转到 192.168.4.1(或任何其他设置的地址)- 在 iOS 它应该自动出现
  3. 点击 Wifi 扫描
  4. 选择您希望 ESP8266 连接的网络
  5. 如果有密码请提供密码
  6. 点击保存按钮

这是用户必须做的最少的事情。 He/she 必须连接到 ESP8266 的 AP 并以某种方式提供 WiFi 凭据。您唯一可以更改的是用户提供该凭据的方式。如果您已经让您的用户下载您的 iOS 应用程序,那么也许可以在您的应用程序中增加配置 ESP8266 的可能性。

为了在板载 WiFiManager 上配置 ESP8266,您的应用必须:

  1. 扫描 WiFi 网络并连接到 ESP8266 的 AP(例如通过搜索 对于特定的 SSID)
  2. 发送 GET 请求到 http://192.168.4.1/wifisave?s=NETWORK_SSID&p=NETWORK_PASSWORD

但是,请记住否则就没有意义。如果您的用户在配置 ESP8266 之前不需要下载任何应用程序,则不需要 him/her 来执行此操作。 Web 应用程序是当今的一种方式。这种方法不需要用户下载另一个应用程序来输入 WiFi 凭据。 WiFiManager 应该在用户连接到设备的 AP 后自动出现。

我找到了这样做的方法: 这是 iOS 应用程序中的代码: https://github.com/EspressifApp/EsptouchForIOS

这是 ESP8266 运行 Arduino 上的代码:

#include <ESP8266WiFi.h>
#include <WiFiUdp.h>

WiFiUDP Udp;

void setup() {
  int cnt = 0;
  //Allocate baud 115200
  Serial.begin(115200);
  //Mode wifi is station
  WiFi.mode(WIFI_STA);
  //Waiting for connect
  while(WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
    if(cnt++ >= 10){
       WiFi.beginSmartConfig();
       while(1){
           delay(1000);
           //Check the connect and print inform if success
           if(WiFi.smartConfigDone()){
             Serial.println("SmartConfig Success");
             break;
           }
       }
    }
  }

  Serial.println("");
  Serial.println("");

  WiFi.printDiag(Serial);

  // Allocate server
  Udp.begin(49999);
  Serial.println("Server started");

  // Print IP address
  Serial.println(WiFi.localIP());
}

void loop() {
  // Receive the package from ESPTouch
  Udp.parsePacket();
  //Print IP of ESP8266
  while(Udp.available()){
    Serial.println(Udp.remoteIP());
    Udp.flush();
    delay(5);
  }
}

首先,我不认为你把ESP8266做成了一个Wi-Fi路由器。我想你的意思是它进入 AP 模式以提示用户输入凭据。

我已经通过使用 EEPROM 库解决了这个问题。您可以轻松找到代码示例 here

所以基本上:

  1. 预硬编码凭据(第一个 运行 可以是虚拟数据)到 EEPROM。
  2. 当 ESP8266 启动时,加载这些凭据并尝试连接到 Wi-Fi。
  3. 如果无法连接,提示用户输入凭据。
  4. ESP8266 尝试重新连接。如果可以连接,则写入 EEPROM 的凭据。
  5. 每次启动时从第 2 步开始重复。

现在,它不再每次都让用户输入凭据,而是先尝试连接。如果失败,则用户将不得不做额外的工作。

如果我能提供帮助,请告诉我,我已经在这个问题上进行了大量工作并且有工作代码。