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热点,也可以让别的无线终端连接,这两个过程能同时进行。

作者:firewt
链接: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);
}

 

}

 

 

posted @ 2020-07-11 23:03  提货人  阅读(7249)  评论(0编辑  收藏  举报