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;
1
因此这里我们可以直接使用。

那为什么直接使用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 == 0×00 || 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);
}
———————
作者:AndyLau__
来源:CSDN
原文:https://blog.csdn.net/AndyLau__/article/details/77171118
版权声明:本文为博主原创文章,转载请附上博文链接!