wemos D1 arduino物聯網開發板應用筆記6-STA模式連接網絡

前言

本節我們學習使用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庫

wemos D1 arduino物聯網開發板應用筆記6-STA模式連接網絡

從上圖中可以看出ESP8266WiFi庫主要包含Station、Soft AP、config、WiFiClient、WiFiServer、scan、hostname,本節主要介紹Station相關的函數使用。

wemos D1 arduino物聯網開發板應用筆記6-STA模式連接網絡

二、實例

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如下:

wemos D1 arduino物聯網開發板應用筆記6-STA模式連接網絡

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如下:

wemos D1 arduino物聯網開發板應用筆記6-STA模式連接網絡

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如下:

wemos D1 arduino物聯網開發板應用筆記6-STA模式連接網絡

程序聯網成功後獲取hostname爲ESP_08ED87,手機開的熱點截圖如下

wemos D1 arduino物聯網開發板應用筆記6-STA模式連接網絡

程序修改hostname後,手機開的熱點截圖如下

wemos D1 arduino物聯網開發板應用筆記6-STA模式連接網絡

三、結語

1.總結:

本節完,實際操作過程中需要注意的地方有如下幾點:

(1)獲取網絡狀態?

程序需要在loop()函數中循環獲取網絡狀態,如果網絡發生變化,程序需要做出相應動作。

(2)配置靜態IP地址等?

參考程序,注意WiFi.config()的參數設置。

2.後記:

如您在使用過程中有任何問題,請加QQ羣進一步交流,也可以github提Issue。

QQ交流羣:906015840 (備註:物聯網項目交流)

獲取源碼:關注公衆號,回覆wemos即可

一葉孤沙出品:一沙一世界,一葉一菩提

wemos D1 arduino物聯網開發板應用筆記6-STA模式連接網絡

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章