3-4-2 Stream – ESP8266物联网应用

位置导航: 首页 / 物联网教程 / 第3章 – 用C/C++开发物联网 / 3-4 网络客户端 / 本页

Stream这个概念可能很多朋友会感到陌生。其实在过去的学习和开发中,我们已经使用Stream很久了。Stream对于ESP8266-Arduino语言来说指的是数据序列。请留意:在C++编程中Stream常被翻译作“流”。我们认为将Stream称为数据序列更加直观。因为数据序列这一概念有两个很关键特点。

第一个特点是“序”,即数据序列不能是杂乱无章的数据罗列。

第二个特点是“列”,即数据序列是排成一列的。

综上所述,数据序列可以理解为一列有先后顺序的数据。为了让您对数据序列也就是Stream数据有更直观的认识,这里我们将通过几个实例来向您说明Stream数据是什么。

示例1 使用串口监视器演示Stream概念

在本示例中,我们使用了Serial.available来判断ESP8266开发板是否接收到串口数据。这里的开发板通过串口所接收到的数据就是Stream数据。另外,程序通过Serial.println语句将接收到的Stream数据通过串口输出并显示在串口监视器中,这里ESP8266通过串口所输出的数据也是Stream数据。换句话说,ESP8266开发板通过串口收发的数据都是Stream数据。

示例2 使用HTTP请求和响应信息演示Stream概念

以下示例程序是上一节课“3-4-1 ESP8266网络客户端基本操作”中的第二个示例程序。该示例程序中,ESP8266开发板通过client.print向服务器发送HTTP请求。这里开发板所发出的HTTP请求信息就是Stream数据。另外,以下示例程序中,ESP8266开发板通过client.readStringUntil来读取服务器响应信息。这里服务器响应信息也是Stream数据。

示例3 使用File对象演示Stream概念

以下示例程序是从“3-3-1 ESP8266闪存文件系统基本操作”中的第1个示例程序修改而来。该示例程序通过dataFile.println来向文件中写入信息。使用dataFile.find从闪存文件内容里查找指定信息。使用dataFile.readString来获取信息。这些操作都是针对Stream数据的操作。

通过以上几个示例程序相信您已经感受到了。Stream是ESP8266-Arduino开发环境中的一种数据类型。Serial库,WiFiClient库,FS库所建立的对象都可以处理Stream数据。另外除了以上这些库以外,以下列表中的库也可以处理Stream数据。

Serial Serial
SoftwareSerial SoftwareSerial
Ehternet EthernetClient
ESP8266FS File
SD File
Wire Wire
GSM GSMClient
WifiClient WiFiClient
WiFiServer WiFiServer
WiFiUDP WiFiUDP
WiFiClientSecure WiFiClientSecure

如需了解以上Stream类函数的使用方法,请参考本站Stream类资料页面

请注意:尽管以上表格中的库都可以处理Stream数据,但是这并不意味着这些库所拥有的函数都是一样的。

下面我们来看一个Stream操作的实例。这个实例演示了如何利用find函数配合parseInt函数从ESP8266接收到的Serial数据中寻找整数数值。

在以上示例中,当ESP8266找到了find函数所指定的参数“ok”后,随即在后续接收到的数据中查找数字信息。一旦找到数字,则通过串口监视器输出。接下来串口监视器还将输出找到数字后剩余的串口输入信息是什么。