|
本帖最后由 allen100 于 2020-3-5 11:45 编辑
Nodemcu买了很久了,不能再继续吃灰,于是打算完完整整的把基础的东西学一遍,顺便在此记录学习经历和经验,参考前辈,同时为社区做点贡献。
那么,废话不多说了,直接看代码;
示例1:8266连上局域网
[mw_shl_code=arduino,true]#include <ESP8266WiFi.h> //载入ESP8266WiFi库文件
void setup()
{
Serial.begin(115200);
Serial.println();
WiFi.begin("ALLEN 6904", "953598974"); //让esp8266作为station连上手机开的热点,或者路由器,这是我的手机热点,改成自己的即可
Serial.print("Connecting");
while (WiFi.status() != WL_CONNECTED) //判断当前连接状态,若没有连接上,则一直在这儿等待
{
delay(500);
Serial.print(".");
}
Serial.println();
Serial.print("Connected, IP address: "); //输出当前IP地址(局域网地址,网关就是手机),localIP是获取IP的函数(方法)
Serial.println(WiFi.localIP());
}
void loop() {}[/mw_shl_code]
示例效果如图:
如果你在串口监视器迟迟不见IP地址输出,而是无休止的.............输出,一定一定看看WiFi.begin("ALLEN 6904", "953598974"); 这里的WIFI有没有改成自己的。
这个函数的两个参数,第一个改成自己WIFI 的SSID ,第二个改成密码(password)。
示例2:8266自动选择设定WIFI列表里信号最强的WIFI
在上一个例程中,我们可以看到这个esp8266客户端获得了我们期望的效果,连上了WiFi。那么,如果我们家里有好几个WiFi,或者需要在家里、工作地多地连接WiFi,那么我们是否可以实现把多个WiFi的SSID和password预存在程序里,当搜到哪个WiFi就连接哪个,而不用每次都更改程序代码重新上传呢?答案是肯定的。ESP8266WiFiMulti库完美的解决了这个问题。
看代码:
[mw_shl_code=arduino,true]#include <ESP8266WiFi.h> //载入相应的库文件
#include <ESP8266WiFiMulti.h>
ESP8266WiFiMulti wifiMulti;//建立wifiMulti对象
void setup()
{
Serial.begin(115200);
Serial.setDebugOutput(true);
Serial.println();
wifiMulti.addAP("ALLEN 6904", "953598974");//这里是这个ESP8266WiFiMulti库特别的地方,使用addAP这个方法,可以给wifiMulti对象添加一个WiFi的信息,包括SSID和password
wifiMulti.addAP("1001", "953598");//通过这个方法,添加多个WiFi接入点信息
wifiMulti.addAP("tertiary-network-name", "pass-to-tertiary-network");//这里我就只添加两个WiFi接入点了,具体数量根据自己需要选择
}
void loop()
{
wifiMulti.run();//尝试连接预设在程序里的WiFi
}[/mw_shl_code]
代码中可以添加多个WiFi接入点,8266将会一个一个尝试连接。那么我们处于多个WiFi环境下时,怎么知道当前连接的是哪个WiFi呢?看如下示例
看代码:
[mw_shl_code=arduino,true]#include <ESP8266WiFi.h> //载入相应的库文件
#include <ESP8266WiFiMulti.h>
ESP8266WiFiMulti wifiMulti; //建立wifiMulti对象
boolean connectioWasAlive = true;
void setup()
{
Serial.begin(115200);
Serial.println();e
wifiMulti.addAP("ALLEN 6904", "953598974");//这里是这个ESP8266WiFiMulti库特别的地方,使用addAP这个方法,可以给wifiMulti对象添加一个WiFi的信息,包括SSID和password
wifiMulti.addAP("1001", "953598");//通过这个方法,添加多个WiFi接入点信息
wifiMulti.addAP("tertiary-network-name", "pass-to-tertiary-network");//这里我就只添加两个WiFi接入点了,具体数量根据自己需要选择
}
void monitorWiFi() //这个函数负责在连上WiFi后输出一次当前WiFi的SSID,当没有连上WiFi时输出一次Looking for WiFi,然后不断输出.
{
if (wifiMulti.run() != WL_CONNECTED)
{
if (connectioWasAlive == true)
{
connectioWasAlive = false;
Serial.print("Looking for WiFi ");
}
Serial.print(".");
delay(500);
}
else if (connectioWasAlive == false)
{
connectioWasAlive = true;
Serial.printf(" connected to %s\n", WiFi.SSID().c_str());
}
}
void loop()//循环函数执行monitorWiFi()
{
monitorWiFi();
}[/mw_shl_code]
效果如下:
可以看到在程序里,通过WiFi.SSID().c_str()函数,获取了当前接入的WiFi的SSID 。
|
|