3

我有一个关于从 NodeMCU ESP8266 板到 Apple iPhone6 个人热点的 wifi 连接的问题。iOS 版本为 10.2.1 (14027)。我使用的 NodeMCU 代码适用于使用 WPA2 的家庭 WLAN,没有任何问题。如果我更改 SSID 和密码以连接到 Apple 热点,则while()循环将永远运行(参见代码,我使用的是 Arduino IDE 1.8.2):

#include <ESP8266WiFi.h>

const char* ssid = "iPhone6";
const char* password = "passwd";

void setup() {
  Serial.begin(115200);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    Serial.print(".");
    delay(1500);
  }
}

void loop() {
  // do something
  delay(10000);
}

为了检查事情,我使用 NodeMCU 扫描 wifi 网络并列出了我的 Apple 热点(也使用 WPA2),以便开发板可以“看到”它。我可以用我的 iPad 和戴尔笔记本电脑连接到 Apple 热点,所以这也可以。我发现的所有网页都在处理将 NodeMCU 设置为 WiFi 服务器而不是客户端的问题。我的代码中是否还有其他细节忘记了?或者我可以使用除 ESP8266WiFi 之外的其他 WiFi 库吗?如果有人设法让这个连接工作,我会很感激任何提示。

4

1 回答 1

4

问题是(我相信)ESP8266 将处于上次通电时的任何模式(、、、APSTAAP_STA除非您明确更改它。因此,例如,您的代码对我来说工作得很好,就像我以前对我的董事会所做的一样,有几次。

为了使代码始终如一地工作,您必须(如@cagdas 所说)明确地将其置于 STA 模式。因此,对您的代码进行以下更改即可。我已经使用我的开发板和 iPhone 6s、1.8.2 Arduino IDE 和 ESP8266 库的 1.0.0 版验证了这一点。

#include <ESP8266WiFi.h>

const char* ssid = "iPhone6";
const char* password = "passwd";

void setup() {
  Serial.begin(115200);
  WiFi.mode(WIFI_STA); // SETS TO STATION MODE!
  WiFi.begin(ssid, password);

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

void loop() {
  Serial.print("IP is ");
  Serial.println(WiFi.localIP());
  delay(10000);
}
于 2017-04-29T16:01:07.303 回答