Air780EP-AT开发-HTTP应用指南

news2024/9/20 6:17:23

简介

  • 关联文档和使用工具:

    • AT固件获取
    • AT指令手册

概述

4G模块支持HTTP和HTTPS协议, HTTP应用的基本流程如下:

 1、激活PDP(参考:http://oldask.openluat.com/article/937)

 2、初始化HTTP服务

 3、设置HTTP会话参数

 4、如果要支持SSL,配置SSL参数

 5、如果使用POST命令,输入POST数据

 6、发起HTTP请求

 7、收到HTTP应答,读取应答数据

 8、终止HTTP服务

 第1步出现异常后:首先需要排查http连接和请求参数是否正常,通过postman是否可以请求成功,模块上网是否正常(AT+CEREG?)

 第2步到第5步,只要输入格式正确,基本不会出问题;如果出错,可以跳过,直接处理第6步的异常

 第6步和第7步出现异常后:终止HTTP服务,有选择性的去激活PDP;然后再有选择性的激活PDP,从第2步开始重新执行

材料准备

  • [EVB_Air780EP]开发板一套,包括天线SIM卡
  • USB线
  • PC电脑
  • 串口调试工具(如果没有准备,推荐可以使用llcom,下载地址:https://llcom.papapoi.com)
  • AT固件获取:https://gitee.com/openLuat/airm2m-ec718-at/releases ,进页面按下Ctrl+F 搜索 AirM2M_780EP_LTE_AT 即可找到780EP模块所使用的AT固件,推荐选用该固件名称后面数字版本号最高的最新relase版本进行调试。
  • 当前文档示例使用AirM2M_780EP_V1007_LTE_AT版本固件(除780EP模块不能烧录,但可以在上面AT固件获取连接获取到其他模块型号的AT固件。)

在这里插入图片描述

HTTP GET请求示例

具体指令和参数使用说明,可参考AT指令手册

AT+CPIN?

+CPIN: READY    //查询sim卡是否正常

OK

AT+CGATT?

+CGATT: 1        //查询是否附着上数据网络,如果返回+CGATT: 0表示未附着上

OK

AT+SAPBR=3,1,"CONTYPE","GPRS"

OK

AT+SAPBR=3,1,"APN",""    //设置APN,此处""表示使用从网络端自动获取到的APN

OK

AT+SAPBR=1,1             //发起激活PDP的请求

OK

AT+SAPBR=2,1             //注意:此命令仅仅查询PDP地址,可以不执行

+SAPBR: 1,1,"10.159.1.145"    //请求到的PDP地址

OK

AT+HTTPINIT

OK

AT+HTTPPARA="CID",1

OK

AT+HTTPPARA="URL","airtest.openluat.com"

OK

AT+HTTPACTION=0		// GET请求

OK

+HTTPACTION: 0,200,285

AT+HTTPREAD

+HTTPREAD: 285

<!DOCTYPE html>
<html lang="en">


<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    Hello
</body>

</html>
OK

在这个过程中,注意事项如下:

1、发送AT+HTTPACTION命令后,收到OK仅仅表示4G模块开始处理这条命令,并不表示请求发送成功,收到了应答;只有收到+HTTPACTION: n,statusCode,len才表示请求结束,statusCode表示应答成功,其余都表示应答失败
2、HTTP应答数据的缓冲区大小为4KB,如果返回的http body数据超过了这个大小,则需要断点下载,可以使用AT+HTTPPARA命令,通过设置BREAK和BREAKEND参数来实现

2、HTTP被动断开示例
发送AT+HTTPACTION命令,和服务器建立了http连接后,如果连接异常被动断开,会输出+HTTPACTION: ,,提示

3、PDP被动去激活示例
先来看下PDP被动去激活时的AT命令处理序列,如果不理解AT命令含义,请自行参考AT手册。

+PDP DEACT // 出现PDP去激活的URC上报,后面如果没做任何处理,接着做http请求会失败,可以按照下方的建议处理。

应对处理每次结束都需要重新走一遍HTTP请求流程

第一种方法:

AT+CIPSHUT // 关闭移动场景

第二种方法:

AT+CIPSHUT // 关闭移动场景

AT+CGDCONT=5,“IP”,“”//请填写实际APN

AT+CGACT=1,5

第三种方法:

AT+CFUN=0 // 进入飞行模式

AT+CFUN=1 // 退出飞行模式

第四种方法:

AT+RESET // 重启模块

参考下发流程中收到"+SAPBR 1: DEACT"错误提示,表示PDP被动去激活,为异常处理的触发点。

AT+HTTPINIT

OK

AT+HTTPPARA="CID",1

OK

AT+HTTPPARA="URL","www.baidu.com"

OK

AT+HTTPACTION=0			// 传入0为GET请求

OK 

+SAPBR 1: DEACT       	// 此处PDP被动去激活

+HTTPACTION: 0,601,0

AT+HTTPTERM

OK                     	// 此处无论返回OK、ERROR还是CME ERROR,都直接跳过,不用做正确性判断

AT+SAPBR=0,1

+CME ERROR: 3         	// 此处无论返回OK、ERROR还是CME ERROR,都直接跳过,不用做正确性判断

--------------------

下方进行异常处理
AT+CIPSHUT				// 关闭移动场景

OK

AT+CGDCONT=5,"IP",""	// 请填写实际APN 

OK

AT+CGACT=1,5			// 激活PDP

OK

AT+HTTPINIT

OK

AT+HTTPPARA="CID",1

OK

AT+HTTPPARA="URL","airtest.openluat.com"

OK

AT+HTTPACTION=0

OK

+HTTPACTION: 0,200,285

HTTP POST请求示例

POST请求流程与GET流程基本一致,只有AT+HTTPACTION指令参数要从AT+HTTPACTION=0变为AT+HTTPACTION=1

具体指令和参数使用说明,可参考AT指令手册

AT+CPIN?

+CPIN: READY    //查询sim卡是否正常

OK

AT+CGATT?

+CGATT: 1        //查询是否附着上数据网络,如果返回+CGATT: 0表示未附着上

OK

AT+SAPBR=3,1,"CONTYPE","GPRS"

OK

AT+SAPBR=3,1,"APN",""    //设置APN,此处""表示使用从网络端自动获取到的APN

OK

AT+SAPBR=1,1             //发起激活PDP的请求

OK

AT+SAPBR=2,1             //注意:此命令仅仅查询PDP地址,可以不执行

+SAPBR: 1,1,"10.159.1.145"    //请求到的PDP地址

OK

AT+HTTPINIT

OK

AT+HTTPPARA="CID",1

OK

AT+HTTPPARA="URL","airtest.openluat.com"

OK

AT+HTTPACTION=1		// POST请求

OK

+HTTPACTION: 0,200,285

AT+HTTPREAD

+HTTPREAD: 285

<!DOCTYPE html>
<html lang="en">


<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    Hello
</body>

</html>
OK

HTTPS SSL请求示例

具体指令和参数使用说明,可参考AT指令手册

带SSL证书双向验证功能的HTTPS过程:

AT+FSCREATE=“ca.crt” // 创建服务器端CA 证书文件
OK

AT+FSCREATE=“client.crt” // 创建客户端证书文件
OK

AT+FSCREATE=“client.key” // 创建客户端密钥文件
OK

AT+FSWRITE=“ca.crt”,0,2080,15 // 文件长度2080字节只是举例,要根据实际填写。指令发送后会返回">",随后写入数据

这里输入CA证书文件
OK

AT+FSWRITE=“client.crt”,0,128,10 // 指令发送后会返回">",随后写入数据
这里输入客户端证书文件
OK

AT+FSWRITE=“client.key”,0,188,10 // 指令发送后会返回">",随后写入数据
这里输入客户端密钥文件
OK

AT+SAPBR=3,1,“CONTYPE”,“GPRS”
OK

AT+SAPBR=3,1,“APN”,“” // 设置PDP承载之APN参数 模块注册网络后会从网络自动获取并激活一个 PDP上下文,用于RNDIS上网使用(此可以通 过AT+CGDCONT?来查询),所以输入 AT+SAPBR=3,,“APN”,“” 即可,模块内部会按 照自动获取的来设置APN
OK

AT+SAPBR=1,1
OK

AT+SAPBR=2,1
+SAPBR: 1,1,010.169.179.213

OK

下发ssl配置请根据实际请求服务器所需要的进行设置

AT+SSLCFG=“cacert”,153,“ca.crt” // 设置服务器CA 证书 SSL 上下文id,在TCP单链接的情况下缺省为0; 在HTTPS链接下为153,下同
OK

AT+SSLCFG=“clientcert”,153,“client.crt” // 设置客户端证书
OK

AT+SSLCFG=“clientkey”,153,“client.key” // 设置客户端KEY
OK

AT+SSLCFG=“seclevel”,153,2 // 设置安全等级
OK

AT+SSLCFG=“ciphersuite”,153,0X0035 // 设置加密套件
OK

AT+SSLCFG=“clientrandom”,153,01B12C31 41516171F19202122232425262728293031 323334353637D // 设置随机数
OK

AT+HTTPINIT // HTTP协议栈初始化
OK

AT+HTTPPARA=“CID”,1 // 设置HTTP会话参数:CID
OK

AT+HTTPPARA=“URL”,“https://..**” // 设置HTTP会话参数:URL 请写具体的网址,而不要照抄
OK

AT+HTTPACTION=0 // GET 开始
OK

+HTTPACTION:0,200,1348

+HTTPACTION:0,200,1348

+HTTPACTION:0,200,1348 … … // 出现这些URC上报表明GET数据成功,等待READ

AT+HTTPREAD // 读取从HTTP 服务器GET的数据

+HTTPREAD:1592 ……………… // …表示HTTP数据

OK

AT+HTTPTERM // 结束HTTP服务
OK

断点续传

在实际的应用场景中,可能需要下载一个非常大的文件,例如几百K字节、几M字节,但是4G模块中HTTP可用的内存缓冲区780EP模块只有4KB左右,当文件大小超过这个缓冲区时,就要使用断点续传功能来分段下载处理了。下面以“下载一个119345字节的文件”为例,来说明如何使用断点续传功能(注意:本示例仅仅演示了正常流程的HTTP AT命令,完整流程以及异常处理流程请参考本文应用流程部分)

AT+CGATT?

+CGATT: 1

OK

AT+SAPBR=3,1,"CONTYPE","GPRS"

OK

AT+SAPBR=3,1,"APN",""

OK

AT+SAPBR=1,1

OK

AT+SAPBR=2,1

+SAPBR: 1,1,"10.55.195.210"

OK

AT+HTTPINIT 

OK

AT+HTTPPARA="URL","http://rcems.hzccs.com/upfile/ROBAM-M2-V13704A7-20240308-APP.bin"

OK

AT+HTTPACTION=2		// 使用head方式请求

OK

+HTTPACTION: 2,200,0


AT+HTTPHEAD		

+HTTPHEAD: 247
Accept-Ranges: bytes
ETag: W/"119345-1710117624106"
Last-Modified: Mon, 11 Mar 2024 00:40:24 GMT
Content-Type: application/octet-stream
Content-Length: 119345
Date: Mon, 22 Jul 2024 03:34:24 GMT
Keep-Alive: timeout=20
Connection: keep-alive

OK


//如下指令,表示下载文件的第一个3KB数据

AT+HTTPPARA="BREAK",0

OK

AT+HTTPPARA="BREAKEND",3071

OK

AT+HTTPACTION=0

OK

+HTTPACTION: 0,206,3072


AT+HTTPREAD

+HTTPREAD: 3072

......                          //此处输出3072字节数据

OK			//表示下载文件的第一个3KB数据完成


//如下指令,表示下载文件的第二个3KB数据

AT+HTTPPARA="BREAK",3072

OK

AT+HTTPPARA="BREAKEND",6143

OK

AT+HTTPACTION=0

OK

+HTTPACTION: 0,206,3072


AT+HTTPREAD

+HTTPREAD: 3072

......                          //此处输出3072字节数据

OK		 //表示下载文件的第二个3KB数据完成

//此处参考上文指令,一直循环读取文件的下一个300KB数据,直到读取结束

......

AT+HTTPTERM			// 断开HTTP

OK

常见问题

1、HTTP支持多连接吗

目前HTTP仅支持单连接,不支持多连接

2、HTTPS如何使用

本文主要描述了基本流程和异常处理,对于HTTPS使用方法没有做过多描述,这一部分,请自行参考AT指令手册HTTP章节下《使用方法举例》中的"带SSL证书验证功能的HTTPS流程"使用方法;支持的SSL参数,请自行参考AT+SSLCFG命令说明
如果SSL的参数配置不变,则每次开机运行过程中,仅设置一次即可

3、重试多次PDP,HTTP应用一直连接失败

如果重试多次PDP激活,PDP一直激活失败,或者HTTP一直请求应答失败,则尝试使用如下手段恢复:

​ 使用RESET引脚复位模块

​ 极端情况下,直接给模块断电,再上电,POWER KEY引脚拉低开机

4、HTTP下载的大文件如何可靠的发送给MCU(AT流控)

需要在断点续传流程指令里开头加入AT+IFC的配置指令

AT+HTTPREAD

+HTTPREAD: 3072

… //此处输出3072字节数据

OK
…处的3072字节数据,是模块通过UART AT口发送给MCU,在实际传输过程中,由于串口芯片驱动、MCU端的处理能力、波特率的选择都存在不确定性,可能会导致MCU端接收到的数据,实际上没有3072字节,这就要求UART AT口打开流控功能。模块支持硬流控和软流控两种:

硬流控,参考如下步骤操作:
(1) 模块和 的UART口,CTS、RTS要交叉相连

(2) MCU端固件要支持并且打开硬流控功能

(3) MCU端要发送AT+IFC=2,2命令到模块端,打开模块端的硬流控功能

软流控,参考如下步骤操作:
(1) MCU端固件要支持并且打开软流控功能

(2) MCU端要发送AT+IFC=1,1命令到模块端,打开模块端的硬流控功能

5、为什么我只发了10字节消息,100次却消耗了很多流量?

因为还有HTTP自带的请求头。

6、为什么频繁请求会失败?

支持的http连接总数有限数量为tcp连接数量8个,建议一个http连接返回请求结果之后,再去请求下一个连接;不要使用循环定时器方式不断的发起新的http请求。

7、如何POST文件?

主要是使用AT+HTTPDATA命令录入文件数据后,发送AT+HTTPACTION=1利用post上传

8、数据发送接收缓存问题

AT版本:有缓存机制,内存中有一个的缓冲区(780EP模块AT固件HTTP缓存为4KB),发送和接受使用的是同一块缓冲区,发送和收到数据后,插入此缓冲区,然后通过AT口输出urc,提示收到的数据长度;缓冲区满之后,再收到新数据,会丢弃新收到的数据,并通过AT口输出urc提示出错;需要读取数据时,发送AT+HTTPREAD命令读取,可分段读取,也可全部读取

注意:缓冲区位于内存中,断电或者重启后,缓存表中的数据会被清空;虽然缓冲区可以缓存很多数据,但是建议收到数据时,通过AT+HTTPREAD及时读取出来,以防缓冲区满出错

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1940766.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

17_高级进程间通信 UNIX域套接字1

非命名的UNIX域套接字 第1个参数domain&#xff0c;表示协议族&#xff0c;只能为AF_LOCAL或者AF_UNIX&#xff1b; 第2个参数type&#xff0c;表示类型&#xff0c;只能为0。 第3个参数protocol&#xff0c;表示协议&#xff0c;可以是SOCK_STREAM或者SOCK_DGRAM。用SOCK_STR…

ontap simulator配置过程

一、下载模拟器 参考《Simulate_ONTAP_9-14-1_Installation_and_Setup_Guide.pdf》P4的指导&#xff0c;登录网站进行下载。 二、传入pve&#xff0c;并解压转换 # 解压 tar -xvf vsim-netapp-DOT9.14.1-cm_nodar.ova# 解压后的文件列表&#xff0c;其中ovf文件里定义了虚拟机…

Docker部署Elasticsearch8.6.0 Kibana8.6.0

为了匹配springboot3.0.x&#xff0c;安装Elasticsearch:8.5.3 拉取镜像&#xff0c;遇到问题&#xff01; [rootserver01 ~]# docker pull elasticsearch:8.5.3 8.5.3: Pulling from library/elasticsearch eaead16dc43b: Retrying in 1 second a405acf5b7d4: Retrying in 1…

结构体[C语言]

文章目录 结构体的概念结构体的用法定义结构体创建结构体变量访问结构体成员 结构体的应用 结构体的概念 结构体是一种用户自定义的数据类型&#xff0c;它允许我们将逻辑上相关的不同数据类型组合在一起。例如&#xff0c;如果我们想要表示一个学生的信息&#xff0c;我们可以…

texify - 识别数学/图像 PDF

文章目录 一、关于 texify例子训练 二、安装手动安装 三、使用1、使用技巧2、用于交互转换的应用程序3、转换图像4、Python 中导入并运行 四、限制五、基准测试运行自己的基准测试 六、其它商业用途感谢 一、关于 texify Texify是一种OCR模型&#xff0c;它将包含数学的图像或…

数据结构(Java):优先级队列(堆)堆的模拟实现PriorityQueue集合

目录 1、优先级队列 1.1 概念 1.2 PriorityQueue底层结构 2、 堆 2.1 堆的概念 2.2 堆的存储结构 3、优先级队列&#xff08;堆&#xff09;的模拟实现 3.1 堆的创建 3.1.1 向下调整算法建完整堆 3.2 堆的插入 3.2.1 向上调整算法 3.3 堆的删除 3.4 堆排序 4、Pri…

Java实现随机题库-全站最呆瓜思想,保证你能学会

目录 Blue留言 &#xff1a; 学本篇文章之前所需掌握技能 推荐视频&#xff1a; 代码逻辑思想 步骤&#xff1a; 1、引入依赖 2、做一个excel表格 3、java实现从excel表中取数据 第一步&#xff1a;根据excel上面的字段名&#xff08;如下图&#xff09;&#xff0…

Python应用开发——30天学习Streamlit Python包进行APP的构建(18):定制组件

Custom components定制组件 st.components.v1.declare_component 创建自定义组件,并在有 ScriptRunContext 的情况下进行注册。 如果没有 ScriptRunContext,则不会注册该组件。当自定义组件作为独立命令执行时(如用于测试),可能会出现这种情况。 要使用该函数,请从 s…

网络安全常用易混术语定义与解读(Top 20)

没有网络安全就没有国家安全&#xff0c;网络安全已成为每个人都重视的话题。随着技术的飞速发展&#xff0c;各种网络攻击手段层出不穷&#xff0c;保护个人和企业的信息安全显得尤为重要。然而&#xff0c;在这个复杂的领域中&#xff0c;许多专业术语往往让人感到困惑。为了…

分布式系列之ID生成器

背景 在分布式系统中&#xff0c;当数据库数据量达到一定量级后&#xff0c;需要进行数据拆分、分库分表操作&#xff0c;传统使用方式的数据库自有的自增特性产生的主键ID已不能满足拆分的需求&#xff0c;它只能保证在单个表中唯一&#xff0c;所以需要一个在分布式环境下都…

JavaScript进阶之作用域解构箭头函数

目录 一、作用域1.1 局部作用域1.2 全局作用域1.3 作用域链1.4 垃圾回收机制1.5 闭包1.6 变量提升 二、函数进阶2.1 函数提升2.2 函数参数2.3 箭头函数&#xff08;重要&#xff09; 三、解构赋值3.1 数组解构3.2 对象解构&#xff08;重要重要&#xff09; 一、作用域 1.1 局…

全自动蛋托清洗机介绍:

全自动蛋托清洗机&#xff0c;作为现代蛋品处理设备的杰出代表&#xff0c;凭借其高效、智能、环保的特性&#xff0c;正逐步成为蛋品加工行业的得力助手。 这款清洗机采用了先进的自动化设计理念&#xff0c;从进料、清洗到出料&#xff0c;全程无需人工干预&#xff0c;极大…

SpringCloud---服务注册(Eureka)

目录 前言 一.注册中心 二.CAP理论 三.常见的注册中心 四.Eureka 4.1搭建Eueka Server 4.2服务注册 4.3发现服务 4.4小结 学习专栏&#xff1a;http://t.csdnimg.cn/tntwg 前言 在SpringCloud里&#xff0c;我们可以发现一个巨大的问题&#xff0c;就是url是写死的&am…

如何在 Android 中删除和恢复照片

对于智能手机用户来说&#xff0c;相机几乎已经成为一种条件反射&#xff1a;你看到值得注意的东西&#xff0c;就拍下来&#xff0c;然后永远保留这段记忆。但如果那张照片不值得永远保留怎么办&#xff1f;众所周知&#xff0c;纸质快照拿在手里很难舍弃&#xff0c;而 Andro…

grafana大坑,es找不到时间戳 | No date field named timestamp found

grafana大坑&#xff0c;es找不到时间戳。最近我这边的es重新装了一遍&#xff0c;结果发现grafana连不上elasticsearch了&#xff08;以下简称es&#xff09;&#xff0c;排查问题查了好久一直以为是es没有装成功或者两边的版本不兼容&#xff0c;最后才发现是数值类型问题 一…

一天搞定React(3)——Hoots组件

Hello&#xff01;大家好&#xff0c;今天带来的是React前端JS库的学习&#xff0c;课程来自黑马的往期课程&#xff0c;具体连接地址我也没有找到&#xff0c;大家可以广搜巡查一下&#xff0c;但是总体来说&#xff0c;这套课程教学质量非常高&#xff0c;每个知识点都有一个…

【Node】npm i --legacy-peer-deps,解决依赖冲突问题

文章目录 &#x1f356; 前言&#x1f3b6; 一、问题描述✨二、代码展示&#x1f3c0;三、运行结果&#x1f3c6;四、知识点提示 &#x1f356; 前言 npm i --legacy-peer-deps&#xff0c;解决依赖冲突问题 &#x1f3b6; 一、问题描述 node执行安装指令时出现报错&#xff…

【QT】label适应图片(QImage)大小;图片适应label大小

目录 0.简介 1.详细代码 1&#xff09;label适应img大小 2&#xff09;img适应label大小 0.简介 一个小demo &#xff0c;想在QLabel中放一张QImage的图片&#xff0c;我有一张图片叫【bird.jpg】&#xff0c;是提前放在资源文件中的&#xff0c;直接显示在label上后&#…

【网络】网络聊天室udp

网络聊天室udp 一、低耦合度代码1、代码2、测试结果 二、高耦合度代码1、服务端小改&#xff08;1&#xff09;维护一个unordered_map用户列表&#xff08;2&#xff09;服务端代码&#xff08;3&#xff09;客户端不改的情况下结果展示 2、大改客户端&#xff08;udp全双工用多…

通过QT进行服务器和客户端之间的网络通信

客户端 client.pro #------------------------------------------------- # # Project created by QtCreator 2024-07-02T14:11:20 # #-------------------------------------------------QT core gui network #网络通信greaterThan(QT_MAJOR_VERSION, 4): QT widg…