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