在不使用Wifimanage的情况下,在ESP8266上避免使用Hard-Coding-WiFi-Credentials

时间:2017-07-23 15:04:53

标签: esp8266 arduino-esp8266

有可能吗? ESP8266通过iOS应用程序连接到路由器wifi? 我想通过ESP8266进行应用程序控制。我的工作流程如下:

  • 在连接到wifi路由器的设备上打开应用程序。
  • 连接到ESP8266并从当前的Wifi提供SSID和PASSWORD信息。
  • ESP8266收到此信息并自动连接到Wifi路由器。

首先感谢您的建议。

我试过这种方式,但我获得了用户体验。因为用户必须做很多步骤。 - 使用WiFiManager,使ESP8266成为wifi路由器。 - 从设备转到Wifi设置以连接到ESP8266 Wifi。 - 从网页浏览器转到192.168.4.1,提供Wifi信息(SSID,PASSWORD)。 请注意这里以避免这种方式

请给我你的意见。 谢谢

3 个答案:

答案 0 :(得分:1)

首先,我不认为您将ESP8266作为Wi-Fi路由器。我认为你的意思是它进入AP模式以提示用户提供凭据。

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

基本上是这样的:

  1. 预先将硬编码凭证(可以是首次运行的伪数据)发送到EEPROM。
  2. 当ESP8266启动时,加载这些凭据并尝试连接 Wi-Fi。
  3. 如果无法连接,请提示用户输入凭据。
  4. ESP8266尝试重新连接。如果它可以连接,那么写 凭证到EEPROM。
  5. 每次启动时从步骤2开始重复。
  6. 现在,它不是每次都有用户输入凭据,而是首先尝试连接。如果失败,那么用户将不得不做额外的工作。

    如果我能提供帮助,请告诉我,我已经就这个问题进行了广泛的工作,并且有工作代码。

答案 1 :(得分:0)

WiFiManager要求您:

  1. 连接到ESP8266的AP
  2. 转到192.168.4.1(或任何其他设置地址) - 在iOS上它应自动显示
  3. 点击Wifi扫描
  4. 选择您希望ESP8266连接的网络
  5. 提供密码(如果有)
  6. 点击保存按钮
  7. 这是用户必须做的最小的事情。他/她必须连接到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
    3. 但是,请记住没有意义。如果您的用户在配置ESP8266之前不需要下载任何应用程序,则不要求他/她执行此操作。 Web应用程序是目前的一种方式。此方法不需要用户下载另一个应用程序只是为了输入WiFi凭据。用户连接到设备的AP后,WiFiManager应自动出现。

答案 2 :(得分:0)

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

这是在Arduino上运行的ESP8266上的代码:

#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);
  }
}