需求分析

假如我们的NodeMCU只在一个地方使用,它也就只需要知道一个WiFi网络的连接信息。但是如果NodeMCU需要在多个地方使用,这时候就需要它能存储多个地点的WiFi信息。通过以下示例程序,NodeMCU可以在它所处的网络环境里搜索预先存储好的WiFi。一旦找到预存的WiFi名称,NodeMCU将会使用预存的密码信息尝试连接该WiFi。如果同时找到多个预存WiFi,NodeMCU将会尝试连接信号最强的WiFi。

代码如下

  1. #include <ESP8266WiFi.h> // 本程序使用ESP8266WiFi库
  2. #include <ESP8266WiFiMulti.h> // 本程序使用ESP8266WiFiMulti库
  3. ESP8266WiFiMulti wifiMulti; // 建立ESP8266WiFiMulti对象,对象名称是'wifiMulti'
  4. void setup() {
  5. Serial.begin(9600); // 启动串口通讯
  6. //通过addAp函数存储 WiFi名称 WiFi密码
  7. wifiMulti.addAP("taichi-maker", "12345678"); // 这三条语句通过调用函数addAP来记录3个不同的WiFi网络信息。
  8. wifiMulti.addAP("taichi-maker2", "87654321"); // 这3个WiFi网络名称分别是taichi-maker, taichi-maker2, taichi-maker3。
  9. wifiMulti.addAP("taichi-maker3", "13572468"); // 这3个网络的密码分别是123456789,87654321,13572468。
  10. // 此处WiFi信息只是示例,请在使用时将需要连接的WiFi信息填入相应位置。
  11. // 另外这里只存储了3个WiFi信息,您可以存储更多的WiFi信息在此处。
  12. Serial.println("Connecting ..."); // 通过串口监视器输出信息告知用户NodeMCU正在尝试连接WiFi
  13. int i = 0;
  14. while (wifiMulti.run() != WL_CONNECTED) { // 此处的wifiMulti.run()是重点。通过wifiMulti.run(),NodeMCU将会在当前
  15. delay(1000); // 环境中搜索addAP函数所存储的WiFi。如果搜到多个存储的WiFi那么NodeMCU
  16. Serial.print('.'); // 将会连接信号最强的那一个WiFi信号。
  17. } // 一旦连接WiFI成功,wifiMulti.run()将会返回“WL_CONNECTED”。这也是
  18. // 此处while循环判断是否跳出循环的条件。
  19. Serial.println('\n'); // WiFi连接成功后
  20. Serial.print("Connected to "); // NodeMCU将通过串口监视器输出。
  21. Serial.println(WiFi.SSID()); // 连接的WiFI名称
  22. Serial.print("IP address:\t"); // 以及
  23. Serial.println(WiFi.localIP()); // NodeMCU的IP地址
  24. }
  25. void loop() {
  26. }

源码阅读

1、首先导入两个库,ESP8266WiFi与ESP8266WiFiMulti
2、生成ESP8266WiFiMulti对象实例 ESP8266WiFiMulti wifiMulti
3、调用wifiMulti.addAP(“taichi-maker”, “12345678”),添加wifi信息,可以调用多次,将预设wifi全部加入
4、通过while循环和run方法持续检测wifi链接状态,保证wifi链接完成

  1. while (wifiMulti.run() != WL_CONNECTED) {
  2. delay(1000);
  3. Serial.print('.');
  4. }