Esp8266 使用 Arduino 开发(一)

ESP8266的最重要的作用就是连接网络,那么就来研究下怎样使用。 首先,ESP8266连接网络有三种模式:STA模式、AP模式、STA+AP模式。 typedef enum WiFiMode  {       WIFI_OFF = 0, WIFI_STA...

ESP8266的最重要的作用就是连接网络,那么就来研究下怎样使用。

首先,ESP8266连接网络有三种模式:STA模式、AP模式、STA+AP模式。

typedef enum WiFiMode 

{

      WIFI_OFF = 0, WIFI_STA = 1, WIFI_AP = 2, WIFI_AP_STA = 3

} WiFiMode_t;

位置:\Arduino15\packages\esp8266\hardware\esp8266\2.3.0\libraries\ESP8266WiFi\src\ESP8266WiFiType.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 <ESP8266WiFi.h>


#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);

}

  • 发表于 2020-09-30 16:57
  • 阅读 ( 93 )

0 条评论

请先 登录 后评论
淡若清风
淡若清风

35 篇文章

作家榜 »

  1. 淡若清风 35 文章
  2. 杨杨 2 文章
  3. seaky 0 文章
  4. 15139236712 0 文章
  5. selectcc 0 文章
  6. 温志亮 0 文章
  7. jamesfan007 0 文章
  8. Gavin 0 文章