文章目录
-
1. 前言
-
2. WiFiClient库
-
-
2.1 连接相关
-
2.2 响应相关
-
-
2.2.1 available —— 返回接收缓存区可读取字节数
-
2.2.2 avdilableForWrite —— 返回发送缓存区剩余可写空间(单位:字节)
-
2.2.3 read —— 读取接收缓冲区一个字节
-
2.2.4 read(buf, size) —— 读取接收缓存区size大小的字节数据
-
2.2.5 peek —— 读取接收缓冲区一个字节
-
2.2.6 peekBytes(buf,size) —— 读取接收缓冲区size大小的字节数据
-
2.2.7 readStringUntil —— 读取响应数据直到某个字符串为止
-
2.2.8 find – 判断是否存在某个字符串
-
2.2.9 flush —— 清除接收缓冲区
-
-
3. 演示
-
-
4. 参考博客
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服务器主机地址
port
:
port
:TCP服务器端口返回值:1—-连接成功
0—-连接失败
代码示例:
WiFiClient client; //建立WiFi客户端对象 client.connect("www.baidu.com",80);//建立TCP连接
-
int connect(const String host, uint16_t port)
参数介绍:
host
:TCP服务器主机ip地址
port
:
port
: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. 参考博客