瑞芯微Rockchip开发者社区
直播中

偶是糕富帅

12年用户 788经验值
私信 关注
[问答]

ESP8266是怎样与网络进行连接的呢

ESP8266连接网络有哪几种模式呢?

ESP8266是怎样与网络进行连接的呢?

回帖(1)

蔡丹青

2022-1-14 11:58:59
ESP8266的最重要的作用就是连接网络,那么就来研究下怎样使用。
首先,ESP8266连接网络有三种模式:STA模式、AP模式、STA+AP模式。
typedef enum WiFiMode
{
      WIFI_OFF = 0, WIFI_STA = 1, WIFI_AP = 2, WIFI_AP_STA = 3
} WiFiMode_t;
位置:Arduino15packagesesp8266hardwareesp82662.3.0librariesESP8266WiFisrcESP8266WiFiType.h
这三种模式大家应该都很熟悉,STA模式用于连接到路由器的模式,AP模式是指ESP8266相当于路由器,其他的设备可以连接到ESP8266发出的WiFi中,STA+AP模式当然就是两者兼顾。
那么我们要连接网络,可以设置成STA模式。

在ESP8266的例程里面,一般都包含ESP8266WiFi.h这个头文件,因为在这个头文件中又包含了很多用于其他功能的头文件。
include "IPAddress.h"
include "ESP8266WiFiType.h"
include "ESP8266WiFiSTA.h"
include "ESP8266WiFiAP.h"
include "ESP8266WiFiScan.h"
include "ESP8266WiFiGeneric.h"


include "WiFiClient.h"
include "WiFiServer.h"
include "WiFiClietSecure.h"
连接时只需要使用WiFi.begin()函数,这个WiFi又是从哪里冒出来的,我们在文件中并没有定义啊,其实在ESP8266WiFi.h中早已帮我们定义了一个对象:
extern ESP8266WiFiClass WiFi;
因此这里我们可以直接使用。
那为什么直接使用WiFi.begin()就可以实现了呢,不是应该设置成STA模式吗,没错在这个函数内部,这些工作都已经帮我们做好了。
wl_status_t ESP8266WiFiSTAClass::begin(const char* ssid, const char *passphrase, int32_t channel, const uint8_t* bssid, bool connect) {


// 设置成STA模式
    if(!WiFi.enableSTA(true)) {
        // enable STA failed
        return WL_CONNECT_FAILED;
    }
// 判断WiFi的SSID和PASS是否符合规范
    if(!ssid || *ssid == 0x00 || strlen(ssid) > 31) {
        // fail SSID too long or missing!
        return WL_CONNECT_FAILED;
    }


    if(passphrase && strlen(passphrase) > 64) {
        // fail passphrase too long!
        return WL_CONNECT_FAILED;
    }
.............................  // 忽略


    ETS_UART_INTR_DISABLE();
    if(connect) {
        wifi_station_connect();   // 连接
    }
.............................  // 忽略


    return status();
}


下面是完整的代码


#include


#define KEY     4
#define LED     2


const char *ssid = "your ssid";
const char *pass = "your password";


void setup() {
  // put your setup code here, to run once:
  pinMode(KEY, INPUT);
  pinMode(LED, OUTPUT);


  Serial.begin(115200);


  Serial.println();
  Serial.println();
  Serial.print("Connecting to ");
  Serial.print(ssid);


  WiFi.begin(ssid, pass);


  while(WiFi.status() != WL_CONNECTED){
    delay(500);
    Serial.print(".");
  }


  Serial.println();
  Serial.println("WiFi Connected");
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());
}


void loop() {
  // put your main code here, to run repeatedly:
  delay(500);
}
举报

更多回帖

发帖
×
20
完善资料,
赚取积分