3-1-4NodeMCU开发板的无线终端模式
无线终端模式(Station)
1. 连接WiFI
如下图所示,ESP8266可通过WiFi连接无线路由器。这与用您的手机通过WiFi连接无线路由器的模式相同。
以下示例程序用于演示如何使用NodeMCU以无线终端模式通过WiFi连接无线路由器。
注:我们在本教程中为您所提供的所有代码都会尽可能丰富的提供注释说明。这些注释说明的作用就是为了便于您更好的理解程序的运行。
无法复制本站示例程序?请点击这里找到解决方案。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
/* NodeMCU无线终端模式连接WiFi By 太极创客(http://www.taichi-maker.com) 2019-03-11 本示例程序用于演示如何使用NodeMCU无线终端模式连接WiFi 如需获得更多关于如何使用NodeMCU开发物联网的教程和资料信息 请参考太极创客网站(http://www.taichi-maker.com) 并在首页搜索栏中搜索关键字:物联网 */ #include <ESP8266WiFi.h> // 本程序使用ESP8266WiFi库 const char* ssid = 'taichi-maker'; // 连接WiFi名(此处使用taichi-maker为示例) // 请将您需要连接的WiFi名填入引号中 const char* password = '12345678'; // 连接WiFi密码(此处使用12345678为示例) // 请将您需要连接的WiFi密码填入引号中 void setup() { Serial.begin(9600); // 启动串口通讯 WiFi.begin(ssid, password); // 启动网络连接 Serial.print('Connecting to '); // 串口监视器输出网络连接信息 Serial.print(ssid); Serial.println(' ...'); // 告知用户NodeMCU正在尝试WiFi连接 int i = 0; // 这一段程序语句用于检查WiFi是否连接成功 while (WiFi.status() != WL_CONNECTED) { // WiFi.status()函数的返回值是由NodeMCU的WiFi连接状态所决定的。 delay(1000); // 如果WiFi连接成功则返回值为WL_CONNECTED Serial.print(i++); Serial.print(' '); // 此处通过While循环让NodeMCU每隔一秒钟检查一次WiFi.status()函数返回值 } // 同时NodeMCU将通过串口监视器输出连接时长读秒。 // 这个读秒是通过变量i每隔一秒自加1来实现的。 Serial.println(''); // WiFi连接成功后 Serial.println('Connection established!'); // NodeMCU将通过串口监视器输出'连接成功'信息。 Serial.print('IP address: '); // 同时还将输出NodeMCU的IP地址。这一功能是通过调用 Serial.println(WiFi.localIP()); // WiFi.localIP()函数来实现的。该函数的返回值即NodeMCU的IP地址。 } void loop() { } |
在以上程序的控制下,您的NodeMCU将会连接名称是”taichi-maker”的WiFi网络。当网络连接成功后,您可以通过串口监视器看到如下信息。其中最后一行“IP Address”信息就是NodeMCU连接WiFi以后的IP地址了。
如下图所示,为了确认NodeMCU的确已经联网,我们可以在Windows操作系统的“命令提示符”中输入:
ping 192.168.0.106
从以上截屏可以看到,NodeMCU成功的对我们的ping指令做出应答。到这里就可以确定当前NodeMCU已经成功连接WiFi了。
假如您不清楚以上操作的原理,请让我在这里给您做一个简单的介绍。当NodeMCU成功连接WiFi以后,电脑就可以通过WiFi与NodeMCU相互通讯了。反之,如果NodeMCU没有成功连接WiFi,那电脑自然是无法与NodeMCU通讯的。因此我们可以通过电脑能否与NodeMCU通讯来判断NodeMCU是否成功联网?但是该如何让电脑和NodeMCU进行通讯呢?这就要借助Windows指令ping了。
从以上的串口监视器截屏我们知道了NodeMCU在网络中的IP地址是192.168.0.106。接下来我们只需要在Windows的“命令提示符”中输入ping 192.168.0.106
然后回车。这时电脑将会向NodeMCU所在的IP地址192.168.0.106发送多个数据包。如果NodeMCU成功接收到了这些数据包,那么它会同样回复几个数据包给电脑。于是在“命令提示符”窗口中,我们看到了这几条Reply from 192.168.0.106: bytes=32 ...
信息如下图红色方框标注部分所示:
当我们在“命令提示符”窗口中看到了这几条Reply from 192.168.0.106: bytes=32 ...
以后,就可以确定电脑和NodeMCU可以彼此通讯了,这也就证明了NodeMCU已经成功联网。
相反,如果您的NodeMCU没有联网的话,在“命令提示符”窗口中将会看到Request timed out
信息。如下图所示。
2. 自动连接最强信号WiFi网络
假如我们的NodeMCU只在一个地方使用,它也就只需要知道一个WiFi网络的连接信息。但是如果NodeMCU需要在多个地方使用,这时候就需要它能存储多个地点的WiFi信息。通过以下示例程序,NodeMCU可以在它所处的网络环境里搜索预先存储好的WiFi。一旦找到预存的WiFi名称,NodeMCU将会使用预存的密码信息尝试连接该WiFi。如果同时找到多个预存WiFi,NodeMCU将会尝试连接信号最强的WiFi。
以下这段示例程序将会实现这一功能。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
/* NodeMCU无线终端模式连接WiFi-2 By 太极创客(http://www.taichi-maker.com) 2019-03-11 此程序将会控制NodeMCU在当前的网络环境里搜索预先存储好的WiFi。 一旦找到预存的WiFi名称,NodeMCU将会使用预存的密码信息尝试连接该WiFi。 如果同时找到多个预存WiFi,NodeMCU将会尝试连接信号最强的WiFi。 如需获得更多关于如何使用NodeMCU开发物联网的教程和资料信息 请参考太极创客网站(http://www.taichi-maker.com) 并在首页搜索栏中搜索关键字:物联网 */ #include <ESP8266WiFi.h> // 本程序使用ESP8266WiFi库 #include <ESP8266WiFiMulti.h> // 本程序使用ESP8266WiFiMulti库 ESP8266WiFiMulti wifiMulti; // 建立ESP8266WiFiMulti对象,对象名称是'wifiMulti' void setup() { Serial.begin(9600); // 启动串口通讯 //通过addAp函数存储 WiFi名称 WiFi密码 wifiMulti.addAP('taichi-maker', '12345678'); // 这三条语句通过调用函数addAP来记录3个不同的WiFi网络信息。 wifiMulti.addAP('taichi-maker2', '87654321'); // 这3个WiFi网络名称分别是taichi-maker, taichi-maker2, taichi-maker3。 wifiMulti.addAP('taichi-maker3', '13572468'); // 这3个网络的密码分别是123456789,87654321,13572468。 // 此处WiFi信息只是示例,请在使用时将需要连接的WiFi信息填入相应位置。 // 另外这里只存储了3个WiFi信息,您可以存储更多的WiFi信息在此处。 Serial.println('Connecting ...'); // 通过串口监视器输出信息告知用户NodeMCU正在尝试连接WiFi int i = 0; while (wifiMulti.run() != WL_CONNECTED) { // 此处的wifiMulti.run()是重点。通过wifiMulti.run(),NodeMCU将会在当前 delay(1000); // 环境中搜索addAP函数所存储的WiFi。如果搜到多个存储的WiFi那么NodeMCU Serial.print('.'); // 将会连接信号最强的那一个WiFi信号。 } // 一旦连接WiFI成功,wifiMulti.run()将会返回“WL_CONNECTED”。这也是 // 此处while循环判断是否跳出循环的条件。 Serial.println('\n'); // WiFi连接成功后 Serial.print('Connected to '); // NodeMCU将通过串口监视器输出。 Serial.println(WiFi.SSID()); // 连接的WiFI名称 Serial.print('IP address:\t'); // 以及 Serial.println(WiFi.localIP()); // NodeMCU的IP地址 } void loop() { } |