明珠的个人博客

是谁告诉你,你是赤裸的?

0%

物联网之无线终端模式

无线终端模式(Wireless Station)

连接WiFI

插队:仔细想想,用arduino就是调用现成的库函数就可以实现功能,不需要去看底层或者原理。程序内容及命名也简单明了,适合快速上手。

如下图所示,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地址了。

和上篇文章一样,const定义的WIFI名称和密码用你自己家的即可,连接好WIFI后通过通过调用WiFi.localIP()函数来获取NodeMCU的IP地址。知道了NodeMCU的IP地址,就可以跟连接在这个WIFI的设备进行通信了,从上篇文章我们知道,电脑的ping命令可以进行通信。

现在咱们整理下整体流程,NodeMCU想要通信,目前只能连接WIFI,此时,所有连接WIFI的设备就分配到了一个IP,按照通信协议,用电脑的ping命令发起通信请求,这时电脑将会向NodeMCU所在的IP地址192.168.149.39发送多个数据包。如果NodeMCU成功接收到了这些数据包,那么它会同样回复几个数据包给电脑。如下:

失败了的话就会提示超时或者找不到主机或者其它非图示信息。

自动连接最强信号的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() {
}