zoukankan      html  css  js  c++  java
  • 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('
    ');
        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);
    }
    
     
    
    }
    
     
  • 相关阅读:
    Unity3d Platformer Pro 2D游戏开发框架使用教程
    程序员如何学习一门新的编程语言
    走进函数式编程
    1001. Exponentiation高精度运算总结
    Kindle PaperWhite3 越狱和PDF插件的安装
    Unity3d中的PlayerPrefs游戏存档API的扩展
    程序员学习路线和学习书单
    1000. A+B Problem
    Mac端SVN工具CornerStone详解
    Unity3d粒子系统详解
  • 原文地址:https://www.cnblogs.com/--Destroyer--/p/13286004.html
Copyright © 2011-2022 走看看