ESP8266网络客户端基本操作
- 在我们上网过程中,经常使用网页浏览器来浏览网站信息。在这一场景中,我们的网站浏览器就是一个网络客户端。网络客户端的主要功能就是向服务器发送网络请求。服务器在接收到客户端请求后会将请求的信息回复给客户端。
- 在本节课程中,我们一起学习如何让ESP8266-NodeMCU开发板扮演网络客户端的角色,从而向网络服务器发送HTTP请求以获取服务器响应信息。
- ---------------------------------------------可以回顾一下前面呢我们都是将 开发板当做服务器,电脑浏览器当做客户端,当客户端进行请求时服务器返回对应的响应给客户端
- 在新章节里 我们的开发板通过互联网向服务器发送请求信息
- 这两个库虽然功能相似,但是他们却是截然不同的两个库。ESP8266HTTPClient库相对简单易用。该库的库函数可以自动生成客户端请求信息并解析服务器响应信息。但正是由于该库的库函数为我们做了所有底层工作,这就导致该库不如WiFiclient库灵活。假如我们需要用ESP8266建立自定义客户端请求信息时,就要用WiFiClient库来实现了。另外WiFiClient库在解析服务器响应信息时可以使用丰富的STREAM类函数,这也为我们提供了很多便利。
- 因此,在我们使用ESP8266开发项目时,更多的时候是使用WiFiClient库来实现物联网通讯功能。换句话说,我个人认为WiFiClient库的重要性和实用性要高于ESP8266HTTPClient库。
- 以上描述有些抽象,接下来我们看两个简单示例。这两个示例的功能是相同的。都是通过ESP8266通过互联网向网络服务器发送请求并且将将网站服务器响应的信息输出在屏幕中。不同的是,示例一使用了ESP8266HTTPClient库来实现这一操作,示例二使用了WiFiClient库实现。
- 在成功编译上传之后,按下复位键就可以在串口监视器里看见请求头 与响应体的输出了 我们将响应体部分复制 粘贴到HTML编辑器里面就可以发现与我们用浏览器访问的结果一样
- 关键代码分析
- 头文件 http请求 http协议都在该头文件里对通过http协议对请求和响应进行解析
- 通过宏定义的形式对URL进行规定 记得必须加上http://
- 关键函数 通过该函数对开发版进行设置为无线终端模式、
- 客户端实例二
- 与一有所不同的是,换用了另一个通用库WiFiClient库在解析服务器响应信息时可以使用丰富的STREAM类函数。
- 这部分逻辑判断语句中的判断条件是client.connect(host, httpPort)的返回值。ESP8266所实现的网络客户端是通过connect函数来实现与网络服务器的连接的。被连接的网络服务器网址为connect函数的第一个参数,即host。这里的第二个参数httpPort则是连接网络服务器的端口编号。关于host 和 httpPort的具体定义都在程序刚一开始的部分。
- 这里的 while (client.connected() || client.available())循环语句判断条件由两个函数的返回值来决定。
- 第一个条件是 client.connected() 的返回值。connected()这个函数用于检查当前ESP8266与网络服务器的连接情况。如果连接状态为“真”,则返回真。否则返回“假”。
- 第二个条件是 client.available()的返回值。available()函数用于检查网络客户端是否有接收到服务器发来的信息。如果有信息则返回真,否则返回“假”。
- 利用以上两个条件进行“或”运算所得到的结果即是这里while循环语句的判断条件。换句话说,就是当ESP8266与服务器保持连接以及服务器有信息发送给ESP8266这两个条件满足一个,while循环语句体就会执行循环。当这两个条件都不满足了,则跳出循环。
- 接下来我们看一下while循环的具体内容。这里我们使用了一个逻辑判断语句。判断条件再次出现了client.available()。
- ------------------我们通过请求的形式进行客户端的访问其实根本是发送该请求进行客户端的访问
- ------------------请求的内容 请求头与请求体之间是通过空行的形式进行分割 也就是最后的\r\n 因为该请求只有请求头和请求行所以请求体是没有的所以结尾是\r\n 无论是请求头还是请求体 响应头 还是响应体都是通过空格进行分割的 请求头包含请求和请求行
- --------其次要点输出访问服务器的信息是也就是第一句函数进行请求服务器的内容,就可以在浏览器中显示如图 第三图第二句函数进行访问读取服务器响应信息
|