前言
本節我們學習使用WeMos D1連接網絡,我這裏使用手機開WIFI熱點,SSID爲sand,passwd爲12345678,連接時候需要將模塊設置爲STA模式(Station模式)。
一、基礎知識
1.Station模式簡介
WeMos D1處於Station模式時候能夠連接WIFI熱點,Station模式也叫做STA站點,每一個連接到無線網絡中的終端(如筆記本電腦、PDA及其它可以聯網的用戶設備)都可稱爲一個STA站點。
在STA連接WiFi熱點過程中,首先WiFI熱點會發出信標幀(beacon),同時STA也會發出Probe Request幀,然後STA會收到信標幀(beacon)或者WiFi熱點回復的Probe Response數據幀,之後根據收到的信號強度決定連接哪一個熱點,同一環境下不同WiFi熱點可能含有相同的SSID,模塊連接信號強度最強的WiFi熱點。
2.ESP8266WiFi庫
從上圖中可以看出ESP8266WiFi庫主要包含Station、Soft AP、config、WiFiClient、WiFiServer、scan、hostname,本節主要介紹Station相關的函數使用。
二、實例
1.應用程序1
1.1 動態IP方式連接WiFi熱點
#include "ESP8266WiFi.h"
char* ssid = "sand";
char* passwd = "12345678";
void setup() {
Serial.begin(115200);
// Set WiFi to station mode
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, passwd);
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.println("connecting......");
}
Serial.println("Connect to router successfully!");
Serial.println(String("mac address is ")+WiFi.macAddress());
}
void loop() {
if (WiFi.status() == WL_CONNECTED)
{
Serial.println("Connect to router success");
Serial.println(String("Subnet mask is ")+WiFi.subnetMask().toString());
Serial.println(String("gatewayIP address is ")+WiFi.gatewayIP().toString());
Serial.println(String("dnsIP address is ")+WiFi.dnsIP().toString());
Serial.println(String("SSID is ") + WiFi.SSID());
Serial.println(String("PSK is ") + WiFi.psk());
Serial.println(String("BSSID is ") + WiFi.BSSIDstr());
Serial.println(String("RSSI is ") + WiFi.RSSI());
}else
{
Serial.println("Connect to router failed");
}
// Wait a bit before scanning again
delay(1000);
}
上述程序中,首先設置模塊爲WIFI_STA模式,然後程序調用WiFi.begin()連網後等待,直到WiFi.status()等於WL_CONNECTED,程序繼續往下執行,然後打印MAC地址,並在loop()函數中循環打印IP地址網絡信息。
1.2編譯運行
程序編譯上傳後設備執行Log如下:
2.應用程序2
2.1 靜態IP方式連接WiFi熱點程序
#include "ESP8266WiFi.h"
char* ssid = "sand";
char* passwd = "12345678";
IPAddress local_static_ip(192, 168, 43, 10);
IPAddress local_gateway(192, 168, 43, 1);
IPAddress local_subnet(255, 255, 255, 0);
IPAddress local_dns_ip(192, 168, 43, 1);
void setup() {
Serial.begin(115200);
// Set WiFi to station mode
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, passwd);
WiFi.config(local_static_ip, local_gateway, local_subnet, local_dns_ip);
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.println("connecting......");
}
Serial.println("Connect to router successfully!");
Serial.println(String("mac address is ")+WiFi.macAddress());
}
void loop() {
if (WiFi.status() == WL_CONNECTED)
{
Serial.println("Connect to router success");
Serial.println(String("IP address is ")+WiFi.localIP().toString());
Serial.println(String("Subnet mask is ")+WiFi.subnetMask().toString());
Serial.println(String("gatewayIP address is ")+WiFi.gatewayIP().toString());
Serial.println(String("dnsIP address is ")+WiFi.dnsIP().toString());
Serial.println(String("SSID is ") + WiFi.SSID());
Serial.println(String("PSK is ") + WiFi.psk());
Serial.println(String("BSSID is ") + WiFi.BSSIDstr());
Serial.println(String("RSSI is ") + WiFi.RSSI());
}else
{
Serial.println("Connect to router failed");
}
// Wait a bit before scanning again
delay(1000);
}
上述程序中,首先設置模塊爲WIFI_STA模式,然後程序調用WiFi.begin()連網後,設置固定IP地址後等待,直到WiFi.status()等於WL_CONNECTED,程序繼續往下執行,然後打印MAC地址,並在loop()函數中循環打印IP地址網絡信息。
2.2編譯運行
程序編譯上傳後設備執行Log如下:
3.應用程序3
3.1 修改hostname程序
#include "ESP8266WiFi.h"
char* ssid = "sand";
char* passwd = "12345678";
char *host = "ESP8266_TEST1";
void setup() {
Serial.begin(115200);
// Set WiFi to station mode
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, passwd);
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.println("connecting......");
}
Serial.println("Connect to router successfully!");
Serial.println(String("mac address is ")+WiFi.macAddress());
Serial.println(String("hostname is ")+WiFi.hostname());
WiFi.hostname(host);
}
void loop() {
if (WiFi.status() == WL_CONNECTED)
{
Serial.println("Connect to router success");
Serial.println(String("hostname is ")+WiFi.hostname());
}else
{
Serial.println("Connect to router failed");
}
// Wait a bit before scanning again
delay(1000);
}
上述程序中,首先設置模塊爲WIFI_STA模式,然後程序調用WiFi.begin()連網後後等待,直到WiFi.status()等於WL_CONNECTED,程序繼續往下執行,然後打印MAC地址和hostname,之後設置hostname爲"ESP8266_TEST1",並在loop()函數中循環打印hostname信息。
3.2編譯運行
程序編譯上傳後設備執行Log如下:
程序聯網成功後獲取hostname爲ESP_08ED87,手機開的熱點截圖如下
程序修改hostname後,手機開的熱點截圖如下
三、結語
1.總結:
本節完,實際操作過程中需要注意的地方有如下幾點:
(1)獲取網絡狀態?
程序需要在loop()函數中循環獲取網絡狀態,如果網絡發生變化,程序需要做出相應動作。
(2)配置靜態IP地址等?
參考程序,注意WiFi.config()的參數設置。
2.後記:
如您在使用過程中有任何問題,請加QQ羣進一步交流,也可以github提Issue。
QQ交流羣:906015840 (備註:物聯網項目交流)
獲取源碼:關注公衆號,回覆wemos即可
一葉孤沙出品:一沙一世界,一葉一菩提