低功耗4G模组HTTP网络协议应用
大家好,今天我们来学习合宙Air780E模组LuatOS开发4G通信中HTTP网络协议的应用,实现模组和服务器之间数据的传输。
一、HTTP概述
1.1 简介
HTTP是HyperTextTransferProtocol(超文本传输协议)的缩写。HTTP是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型。HTTP是一个无状态的协议。HTTP协议通常承载于TCP协议之上,有时也承载于TLS或SSL协议层之上,这个时候,就成了我们常说的HTTPS,所以HTTPS相关的指令只需要参考SSL部分配置连接,其他和http都是一样的。
HTTP协议的_主要应用场景_有:基于浏览器的网页获取与表单提交、文件上传与下载、移动应用、物联网设备的数据上报等。
1.2 请求报文
●method:请求方法,GET和POST是最常见的HTTP方法。
●URL:为请求对应的URL地址,它和报文头的Host属性组成完整的请求URL。
●Version:协议名称及版本号。
●Headerlines:HTTP的报文头,报文头包含若干个属性,格式为“属性名:属性值”,服务端据此获取客户端的信息。
●Entitybody:是报文体,它将一个页面表单中的组件值通过param1=value1&m2=value2的键值对形式编码成一个格式化串,它承载多个请求参数的数据。
●请求报文示例如下:
1.3 响应报文
●version:报文协议及版本。
●statuscode:状态码及状态描述。
●phrase:原因短语。
●Headerlines:响应报文头。
●Entitybody:响应报文体,即我们真正要的内容。
●响应报文示例如下:
注意:sp表示空格,crlf表示回车换行,报文头和报文体之间要有一行空格
1.4 HTTP请求方法
HTTP客户端发出请求,告知服务端需要执行不同类型的请求命令,这些命令被称为HTTP方法。
●GET:获取资源方法
●POST:传输实体数据方法
●HEAD:获取头部报文方法
●PUT:传输文件方法
●DELETE:删除指定资源方法
1.5 HTTP状态码
HTTP状态码由三个十进制数字组成,第一个十进制数字定义了状态码的类型。响应分为五类:
●信息响应(100–199),信息响应中,服务器收到请求,需要请求者继续执行操作;
●成功响应(200–299),信息响应成功,操作被成功接收并处理;
●重定向,需要进一步操作(300–399),信息需要被重新定向,需要进一步的操作以完成请求;
●客户端错误(400–499),客户端错误,请求包含语法错误或无法完成请求;
●服务器错误(500–599),服务器错误,服务器在处理请求的过程中发生了错误。
二、演示功能概述
本文教你合宙4G模组使用LuatOS开发4G通信中http网络协议的应用,实现模组和服务器之间数据的传输!
本教程实现的功能定义是:
使用Air780E核心板下载Air780的LuatOS示例代码中http的例程进行验证,包含get请求,post请求,文件上传,文件下载等功能。
三、硬件环境
3.1 Air780E核心板
使用Air780E核心板,如下图所示:
此核心板的详细使用说明参考:Air780E产品手册中的<<开发板Core_Air780E使用说明VX.X.X.pdf>>,写这篇文章时最新版本的使用说明为:开发板Core_Air780E使用说明V1.0.5.pdf;核心板使用过程中遇到任何问题,可以直接参考这份使用说明pdf文档。
3.2 SIM卡
中国大陆环境下,可以上网的sim卡,一般来说,使用移动,电信,联通的物联网卡或者手机卡都行;
3.3 PC电脑
WINDOWS系统,其他暂无特别要求;
3.4 数据通信线
USB数据线,暂无特别要求;
四、软件环境
4.1 Luatools工具
要想烧录AT固件到4G模组中,需要用到合宙的强大的调试工具:Luatools;
详细使用说明参考:Luatools工具使用说明。
Luatools工具集具备以下几大核心功能:
一键获取最新固件:自动连接合宙服务器,轻松下载最新的合宙模组固件。
固件与脚本烧录:便捷地将固件及脚本文件烧录至目标模组中。
串口日志管理:实时查看模组通过串口输出的日志信息,并支持保存功能。
串口调试助手:提供简洁的串口调试界面,满足基本的串口通信测试需求。
Luatools下载之后,无需安装,解压到你的硬盘,点击Luatools_v3.exe运行,出现如下界面,就代表Luatools安装成功了.
4.2 准备需要烧录的代码
首先要说明一点:脚本代码,要和固件的bin文件一起烧录。
4.2.1 烧录的底层固件文件
底层core下载地址:LuatOS固件版本下载地址
Air780E的底层固件在Luatools解压后目录的LuatOS-SoC_V1112_EC618_FULL.soc
4.2.2 烧录的脚本代码
首先要下载Air780的LuatOS示例代码到一个合适的项目目录,示例代码网站:https://gitee.com/openLuat/LuatOS-Air780E
下载流程参考下图:
下载的文件解压,找到
LuatOS-Air780E-master\demo\http\main.lua,如图:
4.3 烧录步骤
4.3.1 正确连接电脑和4G模组电路板
使用带有数据通信功能的数据线,不要使用仅有充电功能的数据线;
4.3.2 识别4G模组的boot引脚
在下载之前,要用模组的boot引脚触发下载,也就是说,要把4G模组的boot引脚拉到1.8v,或者直接把boot引脚和VDD_EXT引脚相连。我们要在按下BOOT按键时让模块开机,就可以进入下载模式了。
具体到Air780E开发板:
1、当我们模块没开机时,按着BOOT键然后长按PWR开机。
2、当我们模块开机时,按着BOOT键然后点按重启键即可。
4.3.3 识别电脑的正确端口
判断是否进入BOOT模式:模块上电,此时在电脑的设备管理器中,查看串口设备,会出现一个端口表示进入了boot下载模式,如下图所示:
当设备管理器出现了3个连续数字的com端口,并且每个数字都大于4,这时候,硬件连接上就绪状态,恭喜你,可以进行烧录了!
4.3.4 用LuatOS工具烧录
新建项目
首先,确保你的Luatools的版本,上大于3.0.6版本的。
在Luatools的左上角上有版本显示的,如图所示:
Luatools版本没问题的话,就点击LuaTOols右上角的“项目管理测试”按钮,如下图所示:
这时会弹出项目管理和烧录管理的对话框,如下图:
开始烧录
选择780E板子对应的底层core和刚改的main.lua脚本文件。下载到板子中。
点击下载后,我们需要进入boot模式才能正常下载。
五、API说明
http客户端:
http.request(method,url,headers,body,opts,ca_file,client_ca,client_key,client_password)
参数
传入值类型 |
解释 |
string |
请求方法,支持GET/POST等合法的HTTP方法 |
string |
url地址,支持http和https,支持域名,支持自定义端口 |
tabal |
请求头可选例如{[“Content-Type”]=“application/x-www-form-urlencoded”} |
string/zbuff |
body可选 |
table |
额外配置可选包含timeout:超时时间单位ms可选,默认10分钟,写0即永久等待dst:下载路径,可选adapter:选择使用网卡,可选debug:是否打开debug信息,可选,ipv6:是否为ipv6默认不是,可选callback:下载回调函数,参数content_len:总长度body_len:以下载长度userdata用户传参,可选userdata:回调自定义传参 |
string |
服务器ca证书数据,可选,一般不需要 |
string |
客户端ca证书数据,可选,一般不需要,双向https认证才需要 |
string |
客户端私钥加密数据,可选,一般不需要,双向https认证才需要 |
string |
客户端私钥口令数据,可选,一般不需要,双向https认证才需要 |
返回值
返回值类型 | 解释 |
int |
code,服务器反馈的值>=100,最常见的是200.如果是底层错误,例如连接失败,返回值小于0 |
tabal |
headers当code>100时,代表服务器返回的头部数据 |
string/int |
body服务器响应的内容字符串,如果是下载模式,则返回文件大小 |
创建HTTP客户端
六、功能验证
6.1 GET请求
HTTPGET请求是一种用于从指定资源URI(统一资源标识符)请求数据的HTTP方法。它通常用于请求服务器发送资源(如HTML页面、图片等)给客户端,且请求信息包含在URL中。
下面根据demo演示HTTP的GET请求用法,示例代码如下(具体demo可以点此链接跳转)
示例如下:
对应log:
6.2 POST请求
HTTPPOST请求是一种HTTP方法,用于向指定的资源提交数据。与GET请求不同,POST请求的数据包含在请求体中,可以提交大量数据且数据不会显示在URL中,常用于提交表单数据或上传文件等操作。
下面根据demo演示HTTP的POST请求方法提交一个表单,示例代码如下(具体demo可以点此链接跳转)
示例:
对应log:
6.3 文件上传
HTTPPOST请求在文件上传场景中发挥着关键作用。用户通过POST请求可以将文件数据包含在请求体中发送给服务器,而不是像GET请求那样通过URL传递。这种方式允许上传大量数据,包括各种类型的文件,如图片、视频、文档等。服务器接收到请求后,会解析请求体中的文件数据,并存储到服务器上相应的位置。文件上传是HTTP应用中常见的功能。
下面根据demo演示HTTP文件上传的功能,示例代码如下(具体demo可以点此链接跳转)
示例:
对应log:
6.4 文件下载
下面根据demo演示HTTP文件下载的功能,示例代码如下(具体demo可以点此链接跳转)
示例:
对应log:
6.5 处理JSON数据
处理json数据主要有两个函数,json.encode(t)和json.decode(str),参考示例代码:
https://gitee.com/openLuat/LuatOS-Air780E/tree/master/demo/json
6.6 压缩和解压
这个例程用和风天气的api做演示,请求到的数据配合miniz库进行解压,示例代码如下(具体demo可以点此链接跳转)
示例:
对应log:
也可以参考例程:
https://gitee.com/openLuat/LuatOS-Air780E/tree/master/demo/miniz
七、总结
本文档主要介绍4G通信中http网络协议的应用。讲解了HTTP基本原理,GET和POST请求,以及文件上传下载、HTTPS加密、JSON数据处理和数据压缩等高级功能,直接烧录例程即可测试,旨在实现高效、安全的数据传输。
八、常见问题
8.1 HTTP支持多连接吗
目前HTTP仅支持单连接,不支持多连接。
8.2 重试多次PDP,HTTP应用一直连接失败
如果重试多次PDP激活,PDP一直激活失败,或者HTTP一直请求应答失败,则尝试使用如下手段恢复:
1、使用RESET引脚复位模块
2、极端情况下,直接给模块断电,再上电,POWERKEY引脚拉低开机
8.3 为什么我只发了10字节消息,100次却消耗了那么多流量?
因为还有HTTP自带的请求头。如何统计流量
8.4 为什么频繁请求会失败?
支持的http连接总数有限数量为tcp连接数量8个,建议一个http连接返回请求结果之后,再去请求下一个连接;不要使用循环定时器方式不断的发起新的http请求。
8.5 专网卡访问白名单
用定向Ip的物联网卡,需要把域名或IP加入白名单才能使用。如果不加入白名单会出现无法访问服务器的情况.
低功耗4G模组HTTP网络协议应用的更多相关文章
- 手把手教你基于luatos的4G(LTE Cat.1)模组接入华为云物联网平台
摘要:本期文章采用了4G LTE Cat.1模块,编程语言用的是lua,实现对华为云物联网平台的设备通信与控制 本文分享自华为云社区<基于luatos的4G(LTE Cat.1)模组接入华为云物 ...
- OSI 七层模型和 TCP/IP 四层模型 及 相关网络协议
简介 OSI 是理论上的模型,也就是一个统一的国际标准,现在的很多网络设备或者是网络协议都不同程度的精简了自己的所谓的模型,那么他们为了自己的通讯兼容都会参考这个OSI模型 TCP/IP 包括: TC ...
- 中国移动推出NB-IoT/eMTC/GSM多模通信模组Qualcomm调制解调器支持
亚洲电子消费展(CES Asia)在上海举行.期间,中国移动正式推出NB-IoT/eMTC/GSM三模通信模组A9500.该通信模组采用Qualcomm MDM9206 LTE IoT调制解调器,具有 ...
- 网络协议 7 - UDP 协议:性善碰到城会玩
网络协议五步登天路,我们一路迈过了物理层.链路层,今天终于到了传输层.从这一层开始,很多知识应该都是服务端开发必备的知识了,今天我们就一起来梳理下. 其实,讲到 UDP,就少不了 TC ...
- 最全的NB-IoT芯片厂商、模组厂商信息
NB-IoT作为LPWAN(低功耗广域网)的新兴技术,因为具有低功耗.低成本.广覆盖.海量节点等优势,并且在授权频段可以与2G.3G无缝连接而被运营商所青睐且接受.特别是到了2017年,据统计全球有5 ...
- 【OSI】网络协议模型
一.网络相关概念 IP地址: 主机 用于 路由寻址 用的数字标识 域名: 便于IP地址记忆 DNS: 通过注册的 域名 指向 ip 的服务 DDNS: 将用户的动态IP地址映射到一个固定的域名解析服 ...
- NFC模组,开发NFC功能 仅仅要几条指令的事情
特点:实现NFC透明传输.内置NFC协议栈,支持UART串口直接读写,用于门禁能够同一时候兼容手机和卡片开门,还能实现动态密钥,读到的NFC数据自己主动串口输出,会串口就能开发NFC,不须要研究LLC ...
- 网络协议 7 - UDP 协议
网络协议五步登天路,我们一路迈过了物理层.链路层,今天终于到了传输层.从这一层开始,很多知识应该都是服务端开发必备的知识了,今天我们就一起来梳理下. 其实,讲到 UDP,就少不了 TCP.这俩 ...
- BC26模组UDP调试
BC26模组调试 数据上报AT流程 [15:33:46.819]收←◆ F1: 0000 0000 V0: 0000 0000 [0001] 00: 0006 000C 01: 0000 0000 U ...
- 制作一个有趣的涂鸦物联网小项目(涂鸦模组SDK开发 CBU BK7231N WiFi+蓝牙模组 HSV彩色控制)
实现的功能: l APP控制月球灯 l 本地月球灯控制 l APP控制"大白"颜色,实现各种颜色变身 l 门状态传感器状态APP显示 l 网络状态指示灯,连接服务器长亮, ...
随机推荐
- Catlan--卡特兰数--组合数学
卡特兰数 \(Catlan\) ·赘述 其实发现卡特兰数和之前不同的是,前面的是给你公式,让你去求具体的例子,然而卡特兰数这里是给你大量例子来给你证明和解释什么是卡特兰数. ·定义 对于卡特兰数来说, ...
- Java 读取 IP 地址
使用 InetAddress 类 可以利用 Java 自带的 InetAddress 类来检查一个字符串是否为有效的 IP 地址: import java.net.InetAddress; // 导入 ...
- 本地部署 Overleaf 服务
️ 注意:本教程只适用于 macOS / Linux 操作系统.如果需要在 Windows 上部署 Overleaf,请先安装 WSL,之后在 WSL 中部署 Overleaf . 本地部署 Over ...
- 已知两个长度分别为m和n的升序链表,若将它们合并为长度为m+n的一个降序链表,则最坏情况下的时间复杂度是
已知两个长度分别为m和n的升序链表,若将它们合并为长度为m+n的一个降序链表,则最坏情况下的时间复杂度是(). 解析:选D 两个升序合并为降序,操作就不多说了,两数列依次比较放入,其中一个数列结束了, ...
- 【转】 Vue中import from的来源:省略后缀与加载文件夹
原文地址 Vue中import from的来源:省略后缀与加载文件夹_超频化石鱼的博客-CSDN博客 ,原文地址排版格式可能更好,建议看原文,本文只是为了转载记录 Vue使用import ... fr ...
- Identity – 冷知识
RoleManager, RoleStore, EF Core 关系 RoleManager 可以理解为一个上层 service, 是让我们操作 Role 的. 比如 create, update, ...
- Mininet安装记录
安装环境: Ubuntu虚拟机版本:14.04 Mininet版本:2.3.1b1 1.更改软件镜像源 在设置中进行如下操作: 选择国内的镜像站点,如阿里云. 点击关闭后,在弹出的窗口中点击重新载入, ...
- HarmonyOS ArkTS基础语法
前提:安装开发工具 教程:https://developer.harmonyos.com/cn/docs/documentation/doc-guides/tools_overview-0 ...
- 全网最适合入门的面向对象编程教程:55 Python字符串与序列化-字节序列类型和可变字节字符串
全网最适合入门的面向对象编程教程:55 Python 字符串与序列化-字节序列类型和可变字节字符串 摘要: 在 Python 中,字符编码是将字符映射为字节的过程,而字节序列(bytes)则是存储这些 ...
- Android USB 整条通知链分析
以Android13 为例:在Android 13中,USB插入拔出事件的通知链从硬件层到应用层,依次经过硬件.内核.HAL.Framework.以及应用广播等多个模块,整个流程涉及的具体文件和逻辑如 ...