当前位置: 首页 > 工具软件 > client > 使用案例 >

ESP8266之WiFiClient库学习

堵彬彬
2023-12-01

1. 前言

​ WiFIClient库是ESP8266作为TCP客户端使用的库,现在它已经是ESP8266WiFi库的一部分了,本篇中博主会介绍WiFiClient库中相关函数

2. WiFiClient库

2.1 连接相关

2.1.1connect —— 建立TCP连接

  • int connect(IPAddress ip, uint16_t port)
    

    参数介绍:

    ip:TCP服务器端的ip地址

    port:TCP服务器端口

    返回值:1----连接成功

    ​ 0----连接失败

  • int connect(const char *host, uint16_t port)
    

    参数介绍:

    host:TCP服务器主机地址

    portport:TCP服务器端口

    返回值:1----连接成功

    ​ 0----连接失败

    代码示例:

    WiFiClient client; //建立WiFi客户端对象
    client.connect("www.baidu.com",80);//建立TCP连接
    
  • int connect(const String host, uint16_t port)
    

    参数介绍:

    host:TCP服务器主机ip地址

    portport:TCP服务器端口

    返回值:1----连接成功

    ​ 0----连接失败

2.1.2 connected —— client连接是否成功

uint8_t connected()

参数介绍

返回值:1----连接成功

​ 0----连接失败

2.1.3 stop —— 关闭连接

void stop()

2.1.4 status —— 连接状态

uint8_t status()

参数介绍:

返回值:CLOSED = 0 LISTEN = 1 SYN_SENT = 2 SYN_RCVD = 3

​ ESTABLISHED = 4 FIN_WAIT_1 = 5 FIN_WAIT_2 = 6 CLOSE_WAIT = 7

​ CLOSING = 8 LAST_ACK = 9 TIME_WAIT = 10

2.1.5 write —— 发送数据到服务器端

  • size_t write(uint8_t str)
    

    参数介绍:

    str:发送的单个字节

    size_t:成功写入发送缓冲区的字节数

  • size_t write(const char *str)
    

    参数介绍:

    str:需要发送字符串或者字符数组

    size_t:成功写入发送缓冲区的字节数

  • size_t write(const char *buffer, size_t size)
    

    参数介绍:

    **buffer **:要发送字符串或者字符数组

    size: 数据字节数

    size_t:成功写入发送缓冲区的字节数

  • size_t write(Stream& stream)
    

    参数介绍:

    stream: 数据流

    size_t: 成功写入发送缓冲区的字节数

2.1.6 print —— 发送数据到服务器端

  • size_t print(const __FlashStringHelper *ifsh)
    

    参数介绍:

    ifsh:需要发送的字符串,字符串存在flash中(PROGMEM)

    size_t:成功写入发送缓冲区的字节数

  • size_t print(const String &s)
    

    参数介绍:

    s: 需要发送的字符串,字符串存在内存中

    size_t :成功写入发送缓冲区的字节数

  • size_t print(const char[] str[])
    

    参数介绍:

    str: 需要发送的字符串,字符串存在内存中

    size_t :成功写入发送缓冲区的字节数

  • size_t print(char c)
    

    参数介绍:

    c: 需要发送的字符

    size_t :成功写入发送缓冲区的字节数

  • size_t print(unsigned char b, int = base);
    size_t print(int n, int = base);
    size_t print(unsigned int n, int = base);
    size_t print(long n, int = base);
    size_t print(long long n, int = base);
    size_t print(unsigned long n, int = base);
    size_t print(unsigned long long n, int = base);
    size_t print(double n, int = digits);
    

2.1.7 println —— 发送数据到服务器端

参考print

2.2 响应相关

2.2.1 available —— 返回接收缓存区可读取字节数

int available()

2.2.2 avdilableForWrite —— 返回发送缓存区剩余可写空间(单位:字节)

size_t availableForWrite()

2.2.3 read —— 读取接收缓冲区一个字节

int read();
  • 此函数读取完数据后,会把该数据从缓冲区清掉

2.2.4 read(buf, size) —— 读取接收缓存区size大小的字节数据

int read(uint8_t *buf, size_t size)

参数介绍:

buf: 数据存储到该buf

size: 读取大小

int: 成功读取的大小

  • 此函数读取完数据后,会把该数据从缓冲区清掉

2.2.5 peek —— 读取接收缓冲区一个字节

int peek()
  • 此函数读取完数据后,不会把该数据从缓冲区清掉,所以需要特别关注这一点

2.2.6 peekBytes(buf,size) —— 读取接收缓冲区size大小的字节数据

size_t peekBytes(uint8_t *buffer, size_t length);
size_t peekBytes(char *buffer, size_t length);

参数介绍:

buf: 数据存储到该buf

length: 读取大小

int: 成功读取的大小

  • 此函数读取完数据后,不会把该数据从缓冲区清掉,所以需要特别关注这一点

2.2.7 readStringUntil —— 读取响应数据直到某个字符串为止

String readStringUntil(char end)

参数介绍:

end:结束字符

2.2.8 find - 判断是否存在某个字符串

bool find(char *buffer)

参数介绍:

buffer:目标字符串

  • 此函数会把数据从缓冲区清掉

2.2.9 flush —— 清除接收缓冲区

void flush(void)
  • 新版本flush功能是等待缓冲区中的所有传出字符都已发送

3. 演示

#include <ESP8266WiFi.h>
 
#define AP_SSID "RenKaixuan-PC" //这里改成你的wifi名字
#define AP_PSW  "qwertyuiop"//这里改成你的wifi密码
 
const uint16_t port = 8234;
const char * host = "192.168.137.100"; // ip or dns
WiFiClient client;//创建一个tcp client连接
 
void setup() {
  //设置串口波特率,以便打印信息
  Serial.begin(115200);
  //延时5s 为了演示效果
  delay(5000);
  // 我不想别人连接我,只想做个站点
  WiFi.mode(WIFI_STA);
  WiFi.begin(AP_SSID, AP_PSW);
 
  Serial.print("\n Wait for WiFi... ");
  //等待wifi连接成功
  while (WiFi.status() != WL_CONNECTED) {
    Serial.print(".");
    delay(500);
  }
 
  Serial.println("");
  Serial.println("WiFi connected");
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());
 
  delay(500);
}
 
void loop() {
  
  Serial.print("connecting to ");
  Serial.println(host);
 
  if (!client.connect(host, port)) {
    Serial.println("connection failed");
    Serial.println("wait 5 sec...");
    delay(5000);
    return;
  }
 
  // 发送数据到Tcp server
  Serial.println("Send this data to server");
  client.println(String("Send this data to server"));
 
  //读取从server返回到响应数据
  String line = client.readStringUntil('\r');
  Serial.println(line);
 
  Serial.println("closing connection");
  client.stop();
 
  Serial.println("wait 5 sec...");
  delay(5000);
}

4. 参考博客

ESP8266开发之旅 网络篇⑦ TCP Server & TCP Client

 类似资料: