本节我们学习使用WeMos D1连接网络,我这里使用手机开WIFI热点,SSID为sand,passwd为12345678,连接时候需要将模块设置为STA模式(Station模式)。
WeMos D1处于Station模式时候能够连接WIFI热点,Station模式也叫做STA站点,每一个连接到无线网络中的终端(如笔记本电脑、PDA及其它可以联网的用户设备)都可称为一个STA站点。
在STA连接WiFi热点过程中,首先WiFI热点会发出信标帧(beacon),同时STA也会发出Probe Request帧,然后STA会收到信标帧(beacon)或者WiFi热点回复的Probe Response数据帧,之后根据收到的信号强度决定连接哪一个热点,同一环境下不同WiFi热点可能含有相同的SSID,模块连接信号强度最强的WiFi热点。
从上图中可以看出ESP8266WiFi库主要包含Station、Soft AP、config、WiFiClient、WiFiServer、scan、hostname,本节主要介绍Station相关的函数使用。
#include?"ESP8266WiFi.h"
char*?ssid?=?"sand";
char*?passwd?=?"12345678";
void?setup()?{
??Serial.begin(115200);
??//?Set?WiFi?to?station?mode
??WiFi.mode(WIFI_STA);
??WiFi.begin(ssid,?passwd);
??while?(WiFi.status()?!=?WL_CONNECTED)
??{
????delay(500);
????Serial.println("connecting......");
??}
??Serial.println("Connect?to?router?successfully!");
??Serial.println(String("mac?address?is?")+WiFi.macAddress());
}
void?loop()?{
??if?(WiFi.status()?==?WL_CONNECTED)
??{
????Serial.println("Connect?to?router?success");
????Serial.println(String("Subnet?mask?is?")+WiFi.subnetMask().toString());
????Serial.println(String("gatewayIP?address?is?")+WiFi.gatewayIP().toString());
????Serial.println(String("dnsIP?address?is?")+WiFi.dnsIP().toString());
????Serial.println(String("SSID?is?")?+?WiFi.SSID());
????Serial.println(String("PSK?is?")?+?WiFi.psk());
????Serial.println(String("BSSID?is?")?+?WiFi.BSSIDstr());
????Serial.println(String("RSSI?is?")?+?WiFi.RSSI());
??}else
??{
????Serial.println("Connect?to?router?failed");??
??}
??//?Wait?a?bit?before?scanning?again
??delay(1000);
}
上述程序中,首先设置模块为WIFI_STA模式,然后程序调用WiFi.begin()连网后等待,直到WiFi.status()等于WL_CONNECTED,程序继续往下执行,然后打印MAC地址,并在loop()函数中循环打印IP地址网络信息。
程序编译上传后设备执行Log如下:
#include?"ESP8266WiFi.h"
char*?ssid?=?"sand";
char*?passwd?=?"12345678";
IPAddress?local_static_ip(192,?168,?43,?10);
IPAddress?local_gateway(192,?168,?43,?1);
IPAddress?local_subnet(255,?255,?255,?0);
IPAddress?local_dns_ip(192,?168,?43,?1);
void?setup()?{
??Serial.begin(115200);
??//?Set?WiFi?to?station?mode
??WiFi.mode(WIFI_STA);
??WiFi.begin(ssid,?passwd);
??WiFi.config(local_static_ip,?local_gateway,?local_subnet,?local_dns_ip);
??while?(WiFi.status()?!=?WL_CONNECTED)
??{
????delay(500);
????Serial.println("connecting......");
??}
??Serial.println("Connect?to?router?successfully!");
??Serial.println(String("mac?address?is?")+WiFi.macAddress());
}
void?loop()?{
??if?(WiFi.status()?==?WL_CONNECTED)
??{
????Serial.println("Connect?to?router?success");
????Serial.println(String("IP?address?is?")+WiFi.localIP().toString());
????Serial.println(String("Subnet?mask?is?")+WiFi.subnetMask().toString());
????Serial.println(String("gatewayIP?address?is?")+WiFi.gatewayIP().toString());
????Serial.println(String("dnsIP?address?is?")+WiFi.dnsIP().toString());
????Serial.println(String("SSID?is?")?+?WiFi.SSID());
????Serial.println(String("PSK?is?")?+?WiFi.psk());
????Serial.println(String("BSSID?is?")?+?WiFi.BSSIDstr());
????Serial.println(String("RSSI?is?")?+?WiFi.RSSI());
??}else
??{
????Serial.println("Connect?to?router?failed");??
??}
??//?Wait?a?bit?before?scanning?again
??delay(1000);
}
上述程序中,首先设置模块为WIFI_STA模式,然后程序调用WiFi.begin()连网后,设置固定IP地址后等待,直到WiFi.status()等于WL_CONNECTED,程序继续往下执行,然后打印MAC地址,并在loop()函数中循环打印IP地址网络信息。
程序编译上传后设备执行Log如下:
#include?"ESP8266WiFi.h"
char*?ssid?=?"sand";
char*?passwd?=?"12345678";
char?*host?=?"ESP8266_TEST1";
void?setup()?{
??Serial.begin(115200);
??//?Set?WiFi?to?station?mode
??WiFi.mode(WIFI_STA);
??WiFi.begin(ssid,?passwd);
??while?(WiFi.status()?!=?WL_CONNECTED)
??{
????delay(500);
????Serial.println("connecting......");
??}
??Serial.println("Connect?to?router?successfully!");
??Serial.println(String("mac?address?is?")+WiFi.macAddress());
??Serial.println(String("hostname?is?")+WiFi.hostname());
??WiFi.hostname(host);
}
void?loop()?{
??if?(WiFi.status()?==?WL_CONNECTED)
??{
????Serial.println("Connect?to?router?success");
????Serial.println(String("hostname?is?")+WiFi.hostname());
??}else
??{
????Serial.println("Connect?to?router?failed");??
??}
??//?Wait?a?bit?before?scanning?again
??delay(1000);
}
上述程序中,首先设置模块为WIFI_STA模式,然后程序调用WiFi.begin()连网后后等待,直到WiFi.status()等于WL_CONNECTED,程序继续往下执行,然后打印MAC地址和hostname,之后设置hostname为"ESP8266_TEST1",并在loop()函数中循环打印hostname信息。
3.2编译运行
程序编译上传后设备执行Log如下:
程序联网成功后获取hostname为ESP_08ED87,手机开的热点截图如下
程序修改hostname后,手机开的热点截图如下
本节完,实际操作过程中需要注意的地方有如下几点:
(1)获取网络状态?
程序需要在loop()函数中循环获取网络状态,如果网络发生变化,程序需要做出相应动作。
(2)配置静态IP地址等?
参考程序,注意WiFi.config()的参数设置。
如您在使用过程中有任何问题,请加QQ群进一步交流,也可以github提Issue。
QQ交流群:906015840 (备注:物联网项目交流)
获取源码:关注公众号,回复wemos即可
一叶孤沙出品:一沙一世界,一叶一菩提
wemos D1 arduino物联网开发板应用笔记6-STA模式连接网络
原文:https://blog.51cto.com/14616151/2469183