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

3.2 HTTP

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

所需的硬件、软件和电路,请阅读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,这是一个开放可用的测试服务器,只是会把收到的请求数据和一些额外的数据一起回送。在后面的作品中会使用能处理请求的数据的服务器。

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

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

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

标准函数

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

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

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

3.2.2 最终的作品

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

时间: 2024-10-09 10:25:16

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

《用于物联网的Arduino项目开发:实用案例解析》—— 2.4 Arduino Yún的无线连接(WiFi)

2.4 Arduino Yún的无线连接(WiFi) Yún(云)是很高级的Arduino型号,是为物联网而设计的.对于初学者来说,Arduino Yún可能比Arduino Uno要复杂一些,不过它有内置的以太网和无线功能,所以就不再需要额外的盾板了.在第1章中介绍过,本书会始终使用Arduino Uno.这一节只是给手上有Arduino Yún,又想用它来实现本书所介绍的原型作品的读者提供一个参考.尽管在本书的其他部分都不会再提到Arduino Yún,下载的代码还是会带有Arduino Y

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

3.3 MQTT MQTT是一个轻量级的机器对机器的协议.它采用的是发布者-订阅者模型,就是说由一个发布者把数据发布给服务器(也叫作代理),然后订阅者就能收到这个数据.发布者和订阅者彼此互不相识,但他们都连接在代理上,代理异步地完成这个通信.代理用话题的概念来通知所有的订阅者相关的数据已经发布这一消息.话题就像新闻推送,你可以订阅某些想要接收的新闻的话题.发布者和订阅者可以是传感器.机器或移动应用.图3-4是MQTT协议的高层概览.理解MQTT协议对于构建物联网应用是很重要的,接下来,看几个场景

《用于物联网的Arduino项目开发:实用案例解析》—— 第3章 通信协议 3.1 学习目标

第3章 通信协议 第2章已经分别用以太网或WiFi把Arduino连接到了互联网上.这一章将介绍发送和接收数据的协议.协议是一种用于网络通信的约定好了的结构化的格式.它定义了要发送和接收的信息,以及要采取的动作. 3.1 学习目标 到本章结束的时候,你将能够:理解HTTP协议的基本知识向服务器发送一个HTTP请求理解MQTT协议的基本知识向一个MQTT代码发布或订阅数据

《用于物联网的Arduino项目开发:实用案例解析》—— 1.2 硬件需求

1.2 硬件需求 Arduino有各种模块(又叫作板子),每种板子有不同的规格.如果你的板子不具有你需要的功能,那么总可以找到支持所需功能的盾板(或称扩展板).在Arduino的世界里,盾板和板子很类似,但是只支持特定的功能,比如可以连接到WiFi网络,或是能控制伺服电机.盾板就像一个插件,可以将它插到Arduino板上.一旦插上,这块Arduino板就也具有了那块盾板的功能.图1-1是Arduino Uno的外观图,而图1-2是以太网盾板的外观图. 下面列出了本书中各个作品都会用到的一些重要的

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

3.4 小结      本章我们研究了HTTP和MQTT,在物联网应用中它们是两个非常重要.流行.轻量级的通信协议.这些协议是与具体设备无关的,所以可以用作任何类型的设备或服务器的通信.下一章会大量地使用这两个协议.

《用于物联网的Arduino项目开发:实用案例解析》—— 2.3 Arduino Uno的无线连接(WiFi)

2.3 Arduino Uno的无线连接(WiFi) 这一节要给Arduino Uno安装一块无线盾板,然后写代码通过WiFi连接到互联网.如果你使用的Arduino板子有内置的无线功能,比如Arduino Yún,那么就不需要额外的无线盾板.Arduino Yún的互联网连接设置在本章后面介绍. 2.3.1 硬件需求 图2-4给出了通过无线盾板把Arduino Uno连接到互联网上所需的全部硬件. 2.3.2 软件需求 为了写互联网连接代码,需要Arduino IDE 1.6.4或更新版本的软

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

1.5 小结      本章我们学习了Arduino的硬件和软件基础,还研究了Arduino编程语言的一般代码结构,整本书的代码都像这个样子.     本章当然不可能是Arduino的完整内容,它只是实现本书中所有作品所需的基础知识.

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

2.5 小结 本章我们设计了用以太网或WiFi盾板把Arduino Uno连接到互联网的代码,还看到了Arduino Yún上的无线设置和用来访问互联网连接的代码.对于今后任何用以太网或WiFi的互联网连接作品,都可以使用本章的代码作为基础,然后在上面加入自己的代码.

有关<Visual Basic .NET数据库开发经典案例解析>这本书的问题

问题描述 前些时候在csdn这里下载了<VisualBasic.NET数据库开发经典案例解析>的pdg格式电子书,但是里面有部分文件在打开时提示格式不对,而且我非常需要这本书的随书光盘里的资料,谁能为我提供这些资料啊:<VisualBasic.NET数据库开发经典案例解析>这书的完整可用电子书和随书光盘里的脚本等所有资料.谢谢了!.我的邮箱是517044529@qq.com 解决方案 解决方案二:自己到书店去买本吧