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