代码之家  ›  专栏  ›  技术社区  ›  Truc

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

  •  1
  • Truc  · 技术社区  · 7 年前

    有可能吗?ESP8266是否通过iOS应用程序连接到路由器wifi?

    • 连接到ESP8266,并从当前Wifi向其提供SSID和密码信息。

    首先感谢您的建议。

    我试过这种方法,但我得到了用户体验。因为用户需要执行许多步骤。 -使用WiFiManager,将ESP8266作为wifi路由器。 -从web浏览器转到192.168.4.1,提供Wifi信息(SSID、密码)。 请注意此处以避免这种情况

    请给我你的建议。

    3 回复  |  直到 7 年前
        1
  •  1
  •   Community CDub    4 年前

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

    我使用EEPROM库解决了这个问题。您可以很容易地找到代码示例 here

    所以基本上:

    1. 当ESP8266启动时,加载这些凭据并尝试连接到 Wi-Fi。
    2. ESP8266尝试重新连接。如果可以连接,则写入 EEPROM凭据。

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

        2
  •  0
  •   Defozo    7 年前

    WiFiManager要求您:

    1. 连接ESP8266的AP
    2. 提供密码(如有)
    3. 单击保存按钮

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

    1. 扫描WiFi网络并连接到ESP8266的AP(例如通过搜索
    2. http://192.168.4.1/wifisave?s=NETWORK_SSID&p=NETWORK_PASSWORD

    但是,请记住 否则就没有意义了

        3
  •  0
  •   Truc    7 年前

    这是iOS应用程序上的代码: https://github.com/EspressifApp/EsptouchForIOS

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