3-4-5-1 ESP8266客户端请求JSON信息

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

由于易于解析且量级很轻,JSON成为了常用的物联网信息传输格式之一。在这一节里,我们将一起学习以下几个主要知识点:

1. 使用ESP8266来建立物联网服务器,该服务器可以向客户端发送JSON格式响应信息从而实现物联网信息通讯。
2. 使用ESP8266来通过网络向物联网服务器请求JSON信息
3. 使用ESP8266来通过ArduinoJson库解析JSON信息

在接下来的讲解中,我们将需要两块ESP8266-NodeMCU开发板。其中一块作为服务器,另一块作为客户端。如下图所示,客户端将会向服务器发送请求信息。服务器端在接收到客户端请求后,会将JSON信息加入服务器响应信息中发送给客户端。

ESP8266-Client-Gets-Json
ESP8266-Client-Gets-Json

注意,以下示例中的服务器端和客户端ESP8266必须连接同一WiFi网络,方可实现数据通讯。

示例一 ESP8266客户端请求单一JSON数据信息

本示例分为两部分,一部分为服务器程序,另一部分为客户端程序。

服务器端程序
服务器端程序主要功能:

1. 实时读取A0、 D1、D2以及D3引脚的读数。
2. 当有客户端请求时,通过响应信息将引脚读数和测试数据信息发送给客户端。
信息发送格式为json格式。以下为该json信息的示例:

以上JSON信息包含有三个数据,第一个数据”info”对应的值是一个包含有三个数据的对象。这三个数据值都是字符串格式。他们在整个程序运行中是保持不变的。第二个数据”digital_pin”所对应的值是一个含有三个数据的对象,这三个数据是ESP8266开发板的D1、D2、D3引脚的实时电平状态。其中D3引脚的状态正是NodeMCU开发板上按键的引脚状态。我们通过按下该按键,可以改变D3引脚电平状态。第三个数据”analog_pin”对应的值是一个含有一个数据的对象。该数据是ESP8266的模拟输入引脚实时读数。换句话说, “digital_pin”和”analog_pin”所对应的数据值都是ESP8266引脚的实时状态,这些信息是会改变的。

以上程序的重点是函数rootJson。该函数作用是实时获取ESP8266开发板引脚信息并且建立JSON信息。该信息将会通过服务器响应信息发送给请求这一信息的客户端。此方法相对简单,但是缺点是不够灵活。假如我们需要修改响应的JSON信息,那么就要重新构建JSON字符串。另外,假如我们的响应JSON信息比较复杂,那么构建这个字符串的工作还是很麻烦的。接下来我们再以上程序的基础上做一下修改。我们将使用ArduinoJson官网的在线工具来自动生成代码,搭建我们想要的JSON信息并应用到程序的rootJson函数中。

那么接下来我们看一下ESP8266客户端的程序内容,

客户端程序
客户端程序的主要功能:

1. 向服务器端请求json数据信息
2. 解析服务器端响应的json信息内容。
3. 将解析后的数据信息显示于串口监视器
4. 利用服务器端D3引脚(按键引脚)读数来控制客户端开发板上LED的点亮和熄灭

以上程序中最重点的部分是函数httpRequest。该函数向服务器发送HTTP请求,并且对服务器相应的JSON信息进行了解析。解析后的数据信息将通过串口监视器显示,其中服务器按键引脚的状态信息还被用于控制客户端板上的LED点亮和熄灭。

示例二 ESP8266客户端请求多种JSON数据信息

在以上示例程序中,服务器响应的信息形式只有一种,也就是将所有JSON信息全部响应给客户端。然而在我们实际开发物联网项目过程中,可能客户端只需要服务器JSON信息中的的某一个或某几个信息。这种情况下,如果服务器总是把所有信息都发送给客户端,这一操作会产生网络资源和系统运算资源的浪费。

接下来的示例程序中,客户端可以有选择性地向服务器请求信息内容。服务器端也会在接收到客户端请求后,根据客户端的需求来选择性的发送服务器信息。当然了,这些信息同样使用了JSON格式来传输。

服务器端程序

以上示例程序中,我们建立了一系列回调函数handleRoot、handleInfo、handleDigitalPin。这些回调函数会针对客户端的请求来发送不同的JSON响应信息。这一点与之前的服务器端示例程序有所区别。另外请留意,我们在建立JSON响应信息时,使用了ArduinoJson库的createNestedObject函数以及serializeJson函数来实现。

客户端程序

我们通过使用不同参数来调用以上示例程序中的httpRequest函数,从而实现客户端向服务器发送不同JSON请求。在解析服务器JSON响应信息时,我们使用逻辑判断语句来检查服务器响应JSON信息中是否包含有所需的信息内容。如果包含所需信息,则进一步操作来获取信息内容。否则,ESP8266将会通过串口监视器告诉我用户,服务器的响应JSON中,没有指定的内容。

关于此程序的详细讲解,同样还是欢迎您收看我们制作的《零基础入门学用物联网》教程的相关部分。