前言

本节我们学习使用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模式连接网络_第1张图片

从上图中可以看出ESP8266WiFi库主要包含Station、Soft AP、config、WiFiClient、WiFiServer、scan、hostname,本节主要介绍Station相关的函数使用。

wemos D1 arduino物联网开发板应用笔记6-STA模式连接网络_第2张图片

二、实例

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模式连接网络_第3张图片

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模式连接网络_第4张图片

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模式连接网络_第5张图片

程序联网成功后获取hostname为ESP_08ED87,手机开的热点截图如下

wemos D1 arduino物联网开发板应用笔记6-STA模式连接网络_第6张图片

程序修改hostname后,手机开的热点截图如下

wemos D1 arduino物联网开发板应用笔记6-STA模式连接网络_第7张图片

三、结语

1.总结:

本节完,实际操作过程中需要注意的地方有如下几点:

(1)获取网络状态?

程序需要在loop()函数中循环获取网络状态,如果网络发生变化,程序需要做出相应动作。

(2)配置静态IP地址等?

参考程序,注意WiFi.config()的参数设置。

2.后记:

如您在使用过程中有任何问题,请加QQ群进一步交流,也可以github提Issue。

QQ交流群:906015840 (备注:物联网项目交流)

获取源码:关注公众号,回复wemos即可

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

wemos D1 arduino物联网开发板应用笔记6-STA模式连接网络_第8张图片