《用于物联网的Arduino项目开发:实用案例解析》—— 3.2 HTTP

简介: 网站使用超文本传输协议(Hyper Text Transfer Protocol,HTTP)。HTTP支持多种数据传输的方法,在这个作品中,我们会用其中两种较常用的方法:GET和POST。GET和POST方法要做的事情是一样的,所以代码也很相似,它们的不同在于请求的格式略有变化。

本节书摘来自华章出版社《用于物联网的Arduino项目开发:实用案例解析》一 书中的第3章,第3.2节,作者[美]安德尔·杰韦德(Adeel Javed),更多章节内容可以访问云栖社区“华章计算机”公众号查看。

3.2 HTTP

网站使用超文本传输协议(Hyper Text Transfer Protocol,HTTP)。HTTP支持多种数据传输的方法,在这个作品中,我们会用其中两种较常用的方法:GET和POST。GET和POST方法要做的事情是一样的,所以代码也很相似,它们的不同在于请求的格式略有变化。与POST相比,GET所能发送的数据量是有限制的。POST还被认为比GET要略为安全一些。根据你的需要,你可以决定哪个方法更适用。图3-1给出了设备和HTTP服务器之间的高层交互。

e496386b9a7390cc566fbe14d86876aeda8da6f0

所需的硬件、软件和电路,请阅读2.3节。

3.2.1 代码(Arduino)

接下来,我们来写用WiFi连接Arduino和互联网,并通过HTTP协议发送测试数据给服务器的代码。
启动Arduino IDE,输入下面的代码,或者从本书的网站下载代码文件然后打开。所有的文件都在单个源文件(*.ino)中,不过为了便于理解和重用,这个代码被分成四个部分:

  • 外部库
  • 互联网连接(无线)
  • 数据发布(HTTP)
  • 标准函数

外部库

代码的第一部分引入了运行代码所需的全部外部库。这一部分的代码和程序2-6是完全一样的。

互联网连接(无线)

代码的第二部分定义了连接互联网要用的变量、常量和函数。在这里使用了程序2-7、程序2-8和程序2-9中的代码。
数据发布
代码的第三部分定义了将来发送给使用HTTP的服务器要用到的变量、常量和函数。
程序3-1首先定义了Arduino要连接和发送数据的服务器的地址和端口。对于这个作品来说,可以把数据发布到www.httpbin.org,这是一个开放可用的测试服务器,只是会把收到的请求数据和一些额外的数据一起回送。在后面的作品中会使用能处理请求的数据的服务器。

1c27abf04ae50a8a7c2e86791a0a002477f154be

程序3-2里的doHttpGet()函数封装了为GET方法准备请求数据的所有细节,它会连接到服务器然后发送请求。
接下来,在一个if语句中,用client.connect(server, port)来尝试连接服务器。如果连接成功,就准备请求数据。
在使用GET方法的请求中,数据是以名值对格式作为URL的一部分被发送的。
最后,用client.println()方法把HTTP请求发送给服务器。这个方法会通过网络把命令发送给服务器,然后接收服务器的响应。

ee40c9fb974c701e7c11a201459696e92734b0c3 3e4908b7d0aa58b551937deb018fab9d0d7d4998

这个代码是用来发送HTTP GET请求的,不过,前面提到过,这种方法有数据长度的限制,如果要突破这个限制,就要使用HTTP POST方法。
程序3-3的doHttpPost()函数把POST方法的所有准备工作封装了起来,它会连接到服务器,然后发送请求。
在一个if语句中,用client.connect(server, port)来尝试连接服务器。到这里,代码和用HTTP GET做请求是相似的。如果连接成功,就准备请求的数据。
用POST方法做请求的时候,数据也是以名值对的格式成对出现的,但是这些数据是请求的一部分(而不是网址的一部分)。从程序3-3可以看出,发送一个HTTP POST请求需要额外的头部数据。
最后,用client.println()方法把HTTP请求发送给服务器。这个方法会通过网络把命令发送给服务器,然后接收服务器响应。

725acab5c2b52f5b2a52225099633a3df069594b d2ade9631c2526095acb6cbea7851b005a094f84

从Arduino向服务器发布数据的大致过程基本如此。

标准函数

代码的第四部分和第五部分实现了Arduino标准的setup()和loop()函数。
如程序3-4所示,setup()函数初始化串口,然后通过调用doHttpGet()函数来做HTTP GET请求,或是通过调用doHttpPost()函数来做HTTP POST请求。

bb19b86d5a68a42b6c53d7ed4150e4209a074877

要在loop()函数里加上代码来读取服务器的响应。这个作品不会对从传感器发送过去的数据做任何服务器端的处理,我们所用的测试服务器只会在响应中把全部的请求数据重复发回来,所以只要读取响应,然后在串口监视器输出即可。
根据程序3-5,首先检查WiFiClient里是否有字节可以读,读取所有的字节,然后在串口监视器打印出来。一旦读取了全部字节并打印出来,就停止这个客户端对象。

edb3b269e5af4f99870b614a1ba2950b57d1fcd1 f01f6f8f2b669b89cb37b58f458616d5e6f009c9

至此,完成了编写Arduino代码。

3.2.2 最终的作品

要测试这个应用,按照第1章所介绍的,校验然后上传代码到Arduino。代码上传后,打开串口监视器会看到如图3-2所示的HTTP GET日志消息,或是图3-3所示的HTTP POST日志消息。

4babb48655194057ae6dd1e19271ea866cd61433 285a95633e107bee8f948eeadd4d55c3ca801cfa
相关实践学习
钉钉群中如何接收IoT温控器数据告警通知
本实验主要介绍如何将温控器设备以MQTT协议接入IoT物联网平台,通过云产品流转到函数计算FC,调用钉钉群机器人API,实时推送温湿度消息到钉钉群。
阿里云AIoT物联网开发实战
本课程将由物联网专家带你熟悉阿里云AIoT物联网领域全套云产品,7天轻松搭建基于Arduino的端到端物联网场景应用。 开始学习前,请先开通下方两个云产品,让学习更流畅: IoT物联网平台:https://iot.console.aliyun.com/ LinkWAN物联网络管理平台:https://linkwan.console.aliyun.com/service-open
相关文章
|
17天前
|
Python
查看DataFrame信息案例解析
该文介绍了如何使用pandas库查看DataFrame信息。首先,导入pandas并创建一个字典,将字典转换为DataFrame,展示了一组包含“姓名”、“年龄”和“城市”列的数据。之后,通过调用DataFrame的info()方法,显示了数据框的详细信息,包括行数、列数及每列的数据类型,如:3行3列,数据类型为1个int64和2个object。
12 0
|
17天前
|
Python
DataFrame缺失值处理案例解析
该文展示了如何处理DataFrame中的缺失值。首先,通过导入pandas并创建含缺失值的DataFrame,然后使用fillna()方法以平均值填充年龄列的NaN。接着,运用dropna()删除年龄列有NaN的行,最后用interpolate()方法对年龄列进行线性插值填充缺失值。
18 0
|
24天前
|
监控 前端开发 JavaScript
实战篇:商品API接口在跨平台销售中的有效运用与案例解析
随着电子商务的蓬勃发展,企业为了扩大市场覆盖面,经常需要在多个在线平台上展示和销售产品。然而,手工管理多个平台的库存、价格、商品描述等信息既耗时又容易出错。商品API接口在这一背景下显得尤为重要,它能够帮助企业在不同的销售平台之间实现商品信息的高效同步和管理。本文将通过具体的淘宝API接口使用案例,展示如何在跨平台销售中有效利用商品API接口,以及如何通过代码实现数据的统一管理。
|
4天前
并发编程之读写锁ReadWriteLock的详细解析(带小案例)
并发编程之读写锁ReadWriteLock的详细解析(带小案例)
7 0
|
4天前
并发编程之Callable方法的详细解析(带小案例)
并发编程之Callable方法的详细解析(带小案例)
11 0
|
4天前
|
JSON Java Maven
Javaweb之SpringBootWeb案例之自动配置以及常见方案的详细解析
Javaweb之SpringBootWeb案例之自动配置以及常见方案的详细解析
7 0
Javaweb之SpringBootWeb案例之自动配置以及常见方案的详细解析
|
4天前
|
JSON Java Maven
Javaweb之SpringBootWeb案例之 SpringBoot原理的详细解析
Javaweb之SpringBootWeb案例之 SpringBoot原理的详细解析
8 0
Javaweb之SpringBootWeb案例之 SpringBoot原理的详细解析
|
4天前
|
Java 容器 Spring
Javaweb之SpringBootWeb案例之 Bean管理的Bean作用域详细的解析
Javaweb之SpringBootWeb案例之 Bean管理的Bean作用域详细的解析
12 0
|
4天前
|
Java 数据库
Javaweb之SpringBootWeb案例之AOP案例的详细解析
Javaweb之SpringBootWeb案例之AOP案例的详细解析
11 0
|
4天前
|
Java Spring
Javaweb之SpringBootWeb案例之事务进阶的详细解析
Javaweb之SpringBootWeb案例之事务进阶的详细解析
11 0

相关产品

  • 物联网平台
  • 推荐镜像

    更多