从零开始的ESP8266探索(17)-Client(客户端)功能使用

目的

前面的文章中有介绍使用Server(服务器)功能,这里的Server和Client指的是基本的TCP的Server和Client,当然就像前面的文章演示的那样你也可以把它用成WEB Server和WEB Client,因为这两个就是建立在TCP之上的。这篇文章主要介绍及演示下之前没有用到的Client功能。

使用说明

Client的使用步骤如下:

  1. 引用#include <ESP8266WiFi.h>库;
  2. 连上网(好像是一句废话);
  3. 在想要连接服务器前声明一个WiFiClient对象,根据需求你也可以声明为全局对象;
  4. 使用connect(ip, port)connect(URL, port)方法连接到服务器;
  5. 进行读写通讯;
    具体的使用可以参考下面的演示:

作为TCP Client使用

使用下面代码进行测试:

#include <ESP8266WiFi.h>

const char *ssid = "********";
const char *password = "********";

const IPAddress serverIP(192,168, 21,100); //欲访问的地址
uint16_t serverPort = 38224;         //服务器端口号

WiFiClient client; //声明一个客户端对象,用于与服务器进行连接

void setup()
{
    Serial.begin(115200);
    Serial.println();

    WiFi.mode(WIFI_STA);
    WiFi.begin(ssid, password);
    while (WiFi.status() != WL_CONNECTED)
    {
        delay(500);
        Serial.print(".");
    }
    Serial.println("Connected");
    Serial.print("IP Address:");
    Serial.println(WiFi.localIP());
}

void loop()
{
    Serial.println("尝试访问服务器");
    if (client.connect(serverIP, serverPort)) //尝试访问目标地址
    {
        Serial.println("访问成功");

        client.print("Hello world!");                    //向服务器发送数据
        while (client.connected() || client.available()) //如果已连接或有收到的未读取的数据
        {
            if (client.available()) //如果有数据可读取
            {
                String line = client.readStringUntil('\n'); //读取数据到换行符
                Serial.print("读取到数据:");
                Serial.println(line);
                client.print(String("Receive:") + line);
            }
        }
        Serial.println("关闭当前连接");
        client.stop(); //关闭客户端
    }
    else
    {
        Serial.println("访问失败");
        client.stop(); //关闭客户端
    }
    delay(5000);
}

在这里插入图片描述
上图中我们用工具建立的TCP Server进行测试;

作为WEB Client使用

使用下面代码进行测试:

#include <ESP8266WiFi.h>

const char *ssid = "********";
const char *password = "********";

const char *host = "www.example.com"; //欲访问的域名

void setup()
{
    Serial.begin(115200);
    Serial.println();

    WiFi.mode(WIFI_STA);
    WiFi.begin(ssid, password);
    while (WiFi.status() != WL_CONNECTED)
    {
        delay(500);
        Serial.print(".");
    }
    Serial.println("Connected");
    Serial.print("IP Address:");
    Serial.println(WiFi.localIP());
}

void loop()
{
    WiFiClient client; //声明一个客户端对象,用于与服务器进行连接

    Serial.println("尝试访问服务器");
    if (client.connect(host, 80))
    {
        Serial.println("访问成功");

        //向服务器发送请求头,请求网页数据
        //******作为WEB Client使用最核心的就是和WEB Server连接成功后发送相应的请求头请求数据******
        //******关于请求头可以参考之前的文章《从零开始的ESP8266探索(06)-使用Server功能搭建Web Server》******
        client.print(String("GET /") + " HTTP/1.1\r\n" +
                     "Host: " + host + "\r\n" +
                     "Connection: close\r\n" +
                     "\r\n");

        //以下代码将收到的网页数据按行打印输出
        //如果是常见的WEB Client(浏览器)的话会将收到的html文件渲染成我们一般看到的网页
        while (client.connected() || client.available()) //如果已连接或有收到的未读取的数据
        {
            if (client.available()) //如果有数据可读取
            {
                String line = client.readStringUntil('\n'); //按行读取数据
                Serial.println(line);
            }
        }

        client.stop(); //关闭当前连接
    }
    else
    {
        Serial.println("访问失败");
        client.stop(); //关闭当前连接
    }
    delay(10000);
}

在这里插入图片描述
上图测试中我们首先去访问www.example.com(该网址是专门用于测试的),在连接成功后我们向服务器发送请求头请求网页数据,服务器在收到请求头向我们返回了响应头网页数据(数据可以参考下图,你也可以在浏览器中打开此页面然后右击查看源代码);
在这里插入图片描述

总结

上面两个就是Client常用的功能了,一般可以通过外网访问的物联网设备大多就是作为Client。
更多内容可以参考如下:
https://arduino-esp8266.readthedocs.io/en/latest/esp8266wifi/client-examples.html
https://arduino-esp8266.readthedocs.io/en/latest/esp8266wifi/client-class.html

发布了66 篇原创文章 · 获赞 176 · 访问量 22万+

猜你喜欢

转载自blog.csdn.net/Naisu_kun/article/details/86761103