arduino开发ESP8266学习笔记八------(WIFI通信)STA模式、AP模式、混合模式
AP模式
AP是 Access Point的简称,提供无线接入服务,提供数据访问,允许其它无线终端接入,简单来说就是和路由器在多数情况下的工作模式相同,能让手机接入。在ESP8266中这种模式主要用于动态修改接入点信息。
一些用ESP8266制作的WIFI广告播放器就是工作在这种模式下的。
STA模式
STA是Station的简称,类似于无线终端,STA本身并不接受无线的接入,它可以连接到AP,简单来说就是和手机连接WIFI热点的工作状态相同,可以连接其它的热点。
ESP8266工作在STA模式下有一下几个特点,开发的时候需要记住:
1. 在连接丢失的情况下,一旦WiFi再次可用,ESP8266将自动重新连接到接入点(热点)。
2. 模块重启后ESP8266将使用最后一次保存到Flash存储器中的接入点认证信息(ssid,password是加密保存)连接到接入点。
3. 如果仅仅是修改了和WIFI模式不相干的代码,ESP8266仍然使用保存到Flash存储器上的认证信息。
AP混合STA模式
了解了前两个概念,AP混合STA模式就不难理解了,就是既可以连接到其它的WIFI热点,也可以让别的无线终端连接,这两个过程能同时进行。
链接:https://www.jianshu.com/p/daf05f79a330
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
STA模式
实验代码部分:
#include <BearSSLHelpers.h> #include <CertStoreBearSSL.h> #include <ESP8266WiFi.h> #include <ESP8266WiFiAP.h> #include <ESP8266WiFiGeneric.h> #include <ESP8266WiFiMulti.h> #include <ESP8266WiFiScan.h> #include <ESP8266WiFiSTA.h> #include <ESP8266WiFiType.h> #include <WiFiClient.h> #include <WiFiClientSecure.h> #include <WiFiClientSecureAxTLS.h> #include <WiFiClientSecureBearSSL.h> #include <WiFiServer.h> #include <WiFiServerSecure.h> #include <WiFiServerSecureAxTLS.h> #include <WiFiServerSecureBearSSL.h> #include <WiFiUdp.h> const char *STAssid="vivo";//定义需要连接路由器的名称 const char *STApassword="QiFei159874";//路由器的密码 int led=14;//设置指示灯 void gotowifi() { while(WiFi.status()!=WL_CONNECTED)//如果没脸连接上,继续连接,且闪烁LED { bool is=digitalRead(led);//用来接收LED之前的状态 digitalWrite(led,!is);//翻转状态 delay(500); } digitalWrite(led,LOW);//当WiFi连接成功后设置LED为常亮 } void setup() { pinMode(led,OUTPUT); Serial.begin(9600); digitalWrite(led,HIGH);//默认LED是熄灭的 WiFi.mode(WIFI_STA);//设置为STA模式 WiFi.begin(STAssid,STApassword);//配置连接信息,开始连接 //运行自定义函数,当未连接到路由器的过程中,闪烁LED,直到连接成功,点亮LED gotowifi(); Serial.print("IP Address: "); Serial.println(WiFi.localIP());//ESP8266的IP地址 } void loop() { if(WiFi.status()!=WL_CONNECTED)//在setup中已经连接上了,这里如果没有连接上,说明是断线了 //路由器有13个信道,设备连接到路由器会记住他信道,方便下次连接 //但是如果路由器重启后, 信道可能发生变化,这样的话,正确的名字和密码,但是信道错误,也连接不成功 { WiFi.disconnect();//清除之前的配置 WiFi.begin(STAssid,STApassword);//配置连接信息,开始连接 gotowifi();//连接路由器 } }
在上传结束后,代开arduino IDE的串口,在ESP8266上按一次复位按键,会看到ESP8266返回的IP地址,在命令行模式下,输入ping +刚才得到的IP地址,得到如图1所示,则说明ESP8266真的和路由器建立了连接,注使用电脑和ESP8266连接到同一个路由器上才可以这样。
图1
在多个WiFi网络中 自动连接WiFi信号最强的网络
代码部分
#include <BearSSLHelpers.h> #include <CertStoreBearSSL.h> #include <ESP8266WiFi.h> #include <ESP8266WiFiAP.h> #include <ESP8266WiFiGeneric.h> #include <ESP8266WiFiMulti.h> #include <ESP8266WiFiScan.h> #include <ESP8266WiFiSTA.h> #include <ESP8266WiFiType.h> #include <WiFiClient.h> #include <WiFiClientSecure.h> #include <WiFiClientSecureAxTLS.h> #include <WiFiClientSecureBearSSL.h> #include <WiFiServer.h> #include <WiFiServerSecure.h> #include <WiFiServerSecureAxTLS.h> #include <WiFiServerSecureBearSSL.h> #include <WiFiUdp.h> ESP8266WiFiMulti WiFiMulti;//建立ESP8266WiFiMulti对象,对象名称为WiFiMulti int led=14;//设置指示灯 void gotowifi() { while(WiFi.status()!=WL_CONNECTED)//如果没脸连接上,继续连接,且闪烁LED { bool is=digitalRead(led);//用来接收LED之前的状态 digitalWrite(led,!is);//翻转状态 delay(500); } digitalWrite(led,LOW);//当WiFi连接成功后设置LED为常亮 } void setup() { pinMode(led,OUTPUT); Serial.begin(9600); WiFiMulti.addAP("vivo","QiFei159874");//这条指令就是告诉ESP8266下面会告诉你多个WiFi网络名称和密码 WiFiMulti.addAP("vivo1","qifei159874");//注意这里的双引号要加上,没加报错 WiFiMulti.addAP("vivo2","QIFEI159874");// digitalWrite(led,HIGH);//默认LED是熄灭的 //运行自定义函数,当未连接到路由器的过程中,闪烁LED,直到连接成功,点亮LED //gotowifi(); Serial.println("WiFi正在连接中"); int i=0; while(WiFiMulti.run()!=WL_CONNECTED)//WiFiMulti.run()和WiFi.Status()功能一样,都是用来表示当前WiFi连接的状态 { delay(1000); Serial.print("."); } Serial.println('\n'); Serial.print("连接到"); Serial.print(WiFi.SSID()); Serial.print("IP Address: "); Serial.println(WiFi.localIP());//ESP8266的IP地址 } void loop() { }
图2为串口返回的数据,图三为验证是否连接
图2
图3
AP模式
代码部分:
#include <ESP8266WiFi.h> const char *ssid="BOOM";//设置AP的名称 const char *password="QiFei159874";//设置AP的密码 int LED=14;//练接状态指示灯 void setup() { Serial.begin(9600); pinMode(LED,OUTPUT); digitalWrite(LED,HIGH);//默认熄灭LED WiFi.mode(WIFI_AP);//设置为AP模式 WiFi.softAP(ssid,password);//配置AP信息,并开启AP //默认IP为192.168.4.1,这里设置AP的IP段 IPAddress softLocal(192,168,1,1);//IP地址,用来设置IP第四字段 IPAddress softGateway(192,168,1,1);//IP网关,用来设置IP第三字段 IPAddress softSubnet(255,255,255,0);//配置自定义IP信息 WiFi.softAPConfig(softLocal,softGateway,softSubnet); IPAddress myIP=WiFi.softAPIP(); Serial.println(myIP);//打印输出myIP地址 } void loop() { int connectedValue=WiFi.softAPgetStationNum();//获取当前连接到AP的数量 // 如果没有连接到AP,熄灭LED,否则点亮LED if(connectedValue==0) { digitalWrite(LED,LOW); } else { digitalWrite(LED,HIGH); } }