Esp8266 使用 Arduino 開發(一)

Esp8266 使用 Arduino 開發(一)

學習過程中的理解,如有不對之處,望指出。

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);
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章