在物联网技术的浪潮中,低功耗无线通信模组因其高效能和低成本而备受青睐。本文将详细介绍如何使用Air724UG模组,结合LuatOS操作系统,通过HTTP协议进行数据传输的完整开发流程。
一、HTTP 概述
此部分内容只是简单的对HTTP作一个介绍,更详细的说明或协议文档,请查阅相关网站或文档。
1.1 HTTP 请求方法
HTTP/1.1 协议中共定义了八种方法来以不同方式操作指定的资源。
a.GET
向指定的资源发出请求。使用 GET 方法应该只用在读取数据。
b.HEAD
与 GET 方法一样,都是向服务器发出指定资源的请求。只不过服务器将不传回资源的本文部分。
c.POST
向指定资源提交数据,请求服务器进行处理,例如上传文件。
d.PUT
向指定资源位置上传其最新内容。
e.DELETE
请求服务器删除 Request-URI 所标识的资源。
f.TRACE
回显服务器收到的请求,主要用于测试或诊断。
g.OPTIONS
这个方法可使服务器传回该资源所支持的所有 HTTP 请求方法。用’*'来代替资源名称,向 Web 服务器发送 OPTIONS 请求,可以测试服务器功能是否正常运作。
h.CONNECT
HTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器。通常用于 SSL 加密服务器的链接。
HTTP 服务器至少应该实现 GET 和 HEAD 方法,其他方法都是可选的。
1.2 HTTP 状态码
状态代码的第一个数字代表当前响应的类型:
1xx 消息——请求已被服务器接收,继续处理
2xx 成功——请求已成功被服务器接收、理解、并接受
3xx 重定向——需要后续操作才能完成这一请求
4xx 请求错误——请求含有词法错误或者无法被执行
5xx 服务器错误——服务器在处理某个正确请求时发生错误
RFC 2616 中已经推荐了描述状态的短语,例如"200 OK",“404 Not Found”。
1.3 URL 链接地址
超文本传输协议(HTTP)的地址包含五个基本元素,分别是:
a.传送协议, 层级 URL 标记符号(为[//],固定不变) 访问资源需要的凭证信息服务器,一般情况下为域名,也可以使用 IP 地址。
b.端口号,以数字方式表示,HTTP 默认为”:80“,默认值可不给出。
c.路径,字符“/”区别路径中的每一个目录名称。
d.查询,GET 模式的窗体参数,用“?”字符作为起点,每个参数用“&”隔开,再以“=”分开参数名称与数据。
e.片段,以“#”字符为起点。
由于超文本传输协议允许服务器将浏览器重定向到另一个网页地址,因此许多服务器允许用户省略网页地址中的部分内容,比如 www。
本文通过几个具体的例子,演示 http 与 https 协议的具体实现。
二、功能演示概述
2.1 演示内容
本文通过作者自身的使用经历与实践,给大家演示 http 的常见操作与使用,包括:
a.get 方法的实现;
b.post 方法的实现;
c.文件的上传操作;
d.文件的下载操作;
e.https 加密通讯;
f.处理 JSON 数据;
g.gzip 操作。
三、硬件环境准备
3.1 开发板准备
本文所涉及到的所有演示,都使用开发板 EVB_Air724UG_A14 完成
此核心板的详细使用说明参考:
https://docs.openluat.com/air724ug/product/
中国大陆环境下,可以上网的 sim 卡,一般来说,使用移动,电信,联通的物联网卡或者手机卡都行;
3.2 开发板的接线方式
首先将开发板放置好,接上 USB 并连接到电脑,同时,记得将天线也连接好,保证信号环境比较良好,比如可以看看手机信号来判断一下所在环境的信号状况。USB 的连接如上图所示。
在上图中,连接 USB 的插口旁边有一个 USB 字样,在进行脚本下载时,须连接此端口。旁边另一个 USB 插口是 USB 转 UART 的接口,可以通过串行口工具查看调试 TRACE 信息。在本文的测试环境中,使用 USB 打印 trace,即在 Luatools工具中,将软件上的"usb 打印 trace"选中即可,不必再另外连接串行口监视打印 trace 的相关信息。
3.3 固件操作相关内容
a.Luatools,是下载固件与脚本必不可少的工具,并且使用其查看 TRACE 调试信息也非常方便。
https://docs.openluat.com/Luatools/
b.Luatools 工具的使用请参阅:
https://docs.openluat.com/blog/Luatools/
c.远程固件升级请参阅:
https://docs.openluat.com/blog/fota_lesson/
d.USB 驱动安装请参阅:
https://docs.openluat.com/blog/usb_drv/
四、软件环境准备
4.1 Lua 脚本语言
本文以 Lua 脚本语言为基础,因而需要有 Lua 脚本语言基础,可以通过下列文档了解:
Lua 脚本语言的语法,请参阅:
https://wiki.luatos.com/luaGuide/luaReference.html#lua-5-3
https://docs.openluat.com/blog/lua_lesson/
4.2 Lua 脚本语言的 http 接口 API
本文既然是说 http,除了在 http 概述内的简单说明,还有必要对 Lua 脚本语言的 API 有一个了解。http 的 API 接口定义如下面的代码。我之所以贴出下面这段定义代码,三个方面的原因。
a.首先当然是注释说明中有较明晰的 http 协议结构的定义;
b.其次对参数的解释说明比演示文档 testHttp.lua 文件内容更全面,更有利于读者对各个参数形式有一个了解。比如,传递证书就有了较明晰的表达式形式,这样也方便大家组织参数时,能做到心里有数;
c.最后是给出了不少调用示例,而这些示例在 testHttp.lua 文档内没有或者不全面,而此处的示例能起到一个很好的补充。
关于 http 接口的具体说明,读者还可以查询其它相关资料或参考其它文件档。
4.3 辅助工具
为了有效的分析开发过程中可能遇到的问题,并能查看数据,准备一些辅助工具很有必要,将大大缩短大家解决问题的时间。本文编写过程中,使用了几款工具介绍给大家,本文在后面将使用用或提到这些工具,请大家先了解。
1)Progress Telerik Fiddler Classic,抓包工具。
https://downloads.getfiddler.com/fiddler-classic/FiddlerSetup.5.0.20244.10953-latest.exe
2)Postman,API 调试平台工具,可以方便的验证本文所提到的各种操作。
https://dl.pstmn.io/download/latest/win64
3)httpbin.org,一个很不错的 API 调试网站,本文有关 http 的不少内容的演示,即使用本网站完成。
五、Luatools 的基本使用
5.1 准备演示代码
本文使用 air724 模块的演示代码 testHttp 作为蓝本,在此基础上进行修订删改,来完成本文第二章中所提到的内容。该演示蓝本有两个文件,分别为 main.lua、testHttp.lua 两个文件。大家如果了解可以跳过,如果不熟悉又不想去费劲下载资源,可以直接复制使用。testHttp.lua 随着本文的测试进行,会有所修订,本文最后会给出完整的包含所有修订的文件。
5.2 使用 Luatools 工具
按照本文的第三章第 2 节所描述的方式连接好开发板后,确认无误后,我们就可以启动 Luatools 工具,如下图所示。点击界面中“项目管理与测试”按钮,出现下图所示的窗口,点击“创建项目”,并输入项目名称,如本文建立的项目名称为 http_doc。
项目建立完成后,点添加脚本或资源文件,按上节所说将蓝本 main.lua 与 testHttp.lua 添加上去,如图所示。
将"usb 打印 trace”使能,“添加默认 lib”选中。
完成上面的操作后,还要选择底层 CORE。因为合宙模块有各种资源,不同的底层 CORE 支持的内容不同,这些底层内核一般安装在工具所在目录的 ressoure 子目录下。打开此目录,会有不同的选择,如图。因为