Air780EP-AT开发-HTTP应用指南

简介

  • 关联文档和使用工具:

    • 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卡是否正常OKAT+CGATT?+CGATT: 1        //查询是否附着上数据网络,如果返回+CGATT: 0表示未附着上OKAT+SAPBR=3,1,"CONTYPE","GPRS"OKAT+SAPBR=3,1,"APN",""    //设置APN,此处""表示使用从网络端自动获取到的APNOKAT+SAPBR=1,1             //发起激活PDP的请求OKAT+SAPBR=2,1             //注意:此命令仅仅查询PDP地址,可以不执行+SAPBR: 1,1,"10.159.1.145"    //请求到的PDP地址OKAT+HTTPINITOKAT+HTTPPARA="CID",1OKAT+HTTPPARA="URL","airtest.openluat.com"OKAT+HTTPACTION=0		// GET请求OK+HTTPACTION: 0,200,285AT+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+HTTPINITOKAT+HTTPPARA="CID",1OKAT+HTTPPARA="URL","www.baidu.com"OKAT+HTTPACTION=0			// 传入0为GET请求OK +SAPBR 1: DEACT       	// 此处PDP被动去激活+HTTPACTION: 0,601,0AT+HTTPTERMOK                     	// 此处无论返回OK、ERROR还是CME ERROR,都直接跳过,不用做正确性判断AT+SAPBR=0,1+CME ERROR: 3         	// 此处无论返回OK、ERROR还是CME ERROR,都直接跳过,不用做正确性判断--------------------下方进行异常处理
AT+CIPSHUT				// 关闭移动场景OKAT+CGDCONT=5,"IP",""	// 请填写实际APN OKAT+CGACT=1,5			// 激活PDPOKAT+HTTPINITOKAT+HTTPPARA="CID",1OKAT+HTTPPARA="URL","airtest.openluat.com"OKAT+HTTPACTION=0OK+HTTPACTION: 0,200,285

HTTP POST请求示例

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

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

AT+CPIN?+CPIN: READY    //查询sim卡是否正常OKAT+CGATT?+CGATT: 1        //查询是否附着上数据网络,如果返回+CGATT: 0表示未附着上OKAT+SAPBR=3,1,"CONTYPE","GPRS"OKAT+SAPBR=3,1,"APN",""    //设置APN,此处""表示使用从网络端自动获取到的APNOKAT+SAPBR=1,1             //发起激活PDP的请求OKAT+SAPBR=2,1             //注意:此命令仅仅查询PDP地址,可以不执行+SAPBR: 1,1,"10.159.1.145"    //请求到的PDP地址OKAT+HTTPINITOKAT+HTTPPARA="CID",1OKAT+HTTPPARA="URL","airtest.openluat.com"OKAT+HTTPACTION=1		// POST请求OK+HTTPACTION: 0,200,285AT+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: 1OKAT+SAPBR=3,1,"CONTYPE","GPRS"OKAT+SAPBR=3,1,"APN",""OKAT+SAPBR=1,1OKAT+SAPBR=2,1+SAPBR: 1,1,"10.55.195.210"OKAT+HTTPINIT OKAT+HTTPPARA="URL","http://rcems.hzccs.com/upfile/ROBAM-M2-V13704A7-20240308-APP.bin"OKAT+HTTPACTION=2		// 使用head方式请求OK+HTTPACTION: 2,200,0AT+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-aliveOK//如下指令,表示下载文件的第一个3KB数据AT+HTTPPARA="BREAK",0OKAT+HTTPPARA="BREAKEND",3071OKAT+HTTPACTION=0OK+HTTPACTION: 0,206,3072AT+HTTPREAD+HTTPREAD: 3072......                          //此处输出3072字节数据OK			//表示下载文件的第一个3KB数据完成//如下指令,表示下载文件的第二个3KB数据AT+HTTPPARA="BREAK",3072OKAT+HTTPPARA="BREAKEND",6143OKAT+HTTPACTION=0OK+HTTPACTION: 0,206,3072AT+HTTPREAD+HTTPREAD: 3072......                          //此处输出3072字节数据OK		 //表示下载文件的第二个3KB数据完成//此处参考上文指令,一直循环读取文件的下一个300KB数据,直到读取结束......AT+HTTPTERM			// 断开HTTPOK

常见问题

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.xdnf.cn/news/1485935.html

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

相关文章

Http 和 Https 的区别(图文详解)

在现代网络通信中&#xff0c;保护数据的安全性和用户的隐私是至关重要的。HTTP&#xff08;Hypertext Transfer Protocol&#xff09;和 HTTPS&#xff08;Hypertext Transfer Protocol Secure&#xff09;是两种常见的网络通信协议&#xff0c;但它们在数据保护方面的能力存在…

剧本杀小程序搭建,互联网下的游戏新体验,实现新增收!

近几年&#xff0c;桌游备受大众青睐&#xff0c;剧本杀行业更是瞬间曝火&#xff01;拥有强大社交体验与沉浸式游戏体验的剧本杀成为了众多年轻人的新宠&#xff0c;无论是外出游玩还是好友聚会&#xff0c;剧本杀游戏都成为了首选方式。 随着互联网的发展&#xff0c;线上小…

基于DPUSmartNic的云原生SDN解决方案

1. 方案背景与挑战 随着云计算&#xff0c;大数据和人工智能等技术的蓬勃发展&#xff0c;数据中心面临着前所未有的数据洪流和计算压力&#xff0c;这对SDN提出了更高的性能和效率要求。自云原生概念被提出以来&#xff0c;Kubernetes为云原生应用的落地提供了一个轻量级&am…

视频汇聚平台EasyCVR启动出现报错“cannot open shared object file”的原因排查与解决

安防视频监控EasyCVR安防监控视频系统采用先进的网络传输技术&#xff0c;支持高清视频的接入和传输&#xff0c;能够满足大规模、高并发的远程监控需求。EasyCVR平台支持多种视频流的外部分发&#xff0c;如RTMP、RTSP、HTTP-FLV、WebSocket-FLV、HLS、WebRTC、fmp4等&#xf…

物联网mqtt网关搭建背后的技术原理

前言 物联网是现在比较热门的软件领域&#xff0c;众多物联网厂商都有自己的物联网平台&#xff0c;而物联网平台其中一个核心的模块就是Mqtt网关。这篇文章的目的是手把手教大家写书写一个mqtt网关&#xff0c;后端存储支持Kafka/Pulsar&#xff0c;支持mqtt 连接、断链、发送…

【Java】中的List集合

目录 一、什么是List集合二、List的常用方法List的初始化元素操作1.添加元素2.删除元素3.修改元素4.查询元素 三、List集合的遍历1.for循环遍历2.增强for循环3.迭代器遍历 一、什么是List集合 List集合是最常用的一种数据结构之一。它具有动态扩容、元素添加、删除和查询等基础…

MongoDB教程(十八):MongoDB MapReduce

&#x1f49d;&#x1f49d;&#x1f49d;首先&#xff0c;欢迎各位来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里不仅可以有所收获&#xff0c;同时也能感受到一份轻松欢乐的氛围&#xff0c;祝你生活愉快&#xff01; 文章目录 引言一、MapRed…

免费【2024】springboot 趵突泉景区的智慧导游小程序

博主介绍&#xff1a;✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌ 技术范围&#xff1a;SpringBoot、Vue、SSM、HTML、Jsp、PHP、Nodejs、Python、爬虫、数据可视化…

[数据集][目标检测]躺坐站识别检测数据集VOC+YOLO格式9488张3类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;9488 标注数量(xml文件个数)&#xff1a;9488 标注数量(txt文件个数)&#xff1a;9488 标注…

bug诞生记——动态库加载错乱导致程序执行异常

大纲 背景问题发生问题猜测和分析过程是不是编译了本工程中的其他代码是不是有缓存是不是编译了非本工程的文件是不是调用了其他可执行文件查看CMakefiles分析源码检查正在运行程序的动态库 解决方案 这个案例发生在我研究ROS 2的测试Demo时发生的。 整体现象是&#xff1a;修改…

站在资本投资领域如何看待分布式光纤传感行业?

近年来&#xff0c;资本投资领域对于分布式光纤传感行业并不十分敏感。这主要是由于分布式光纤传感技术是一个专业且小众的领域&#xff0c;其生命周期相对较长&#xff0c;缺乏爆发性&#xff0c;与消费品或商业模式创新产业有所不同。此外&#xff0c;国内的投资环境也是影响…

Jmeter之count函数

counter函数 1、功能解释 count函数--计数器&#xff0c;每调用这个函数一次&#xff0c;它就会自动加1。它有两个参数&#xff0c;第一个参数是布尔型的&#xff0c;只能设置成 “TRUE”或者“FALSE”&#xff0c;如果是TRUE&#xff0c;那么每个用户有自己的计数器&#xf…

数据结构(5.3_1)——二叉树的先中后序遍历

先序遍历——根左右——前缀表达式 中序遍历——左根右——中缀表达式 后序遍历——左右根——后缀表达式 二叉树的遍历(手算) 先序遍历代码 struct ElemType {int value; }; //二叉树的结点(链式存储) typedef struct BiTNode {ElemType data;//数据域struct BiTNode *lchil…

高频面试题基本总结回顾5(含笔试高频算法整理)

干货分享&#xff0c;感谢您的阅读&#xff01; &#xff08;暂存篇---后续会删除&#xff0c;完整版和持续更新见高频面试题基本总结回顾&#xff08;含笔试高频算法整理&#xff09;&#xff09; 备注&#xff1a;引用请标注出处&#xff0c;同时存在的问题请在相关博客留言…

ArcGIS Pro不能编辑ArcGIS10.X的注记的解决办法

​ 点击下方全系列课程学习 点击学习—>ArcGIS全系列实战视频教程——9个单一课程组合系列直播回放 点击学习——>遥感影像综合处理4大遥感软件ArcGISENVIErdaseCognition 一、问题 我们利用ArcGIS Pro编辑ArcGIS10.X系列软件生成的注记要素类的时候&#xff0c;会提示不…

大数据学习之sparkstreaming

SparkStreaming idea中初步实现 Spark core: SparkContext 核心数据结构&#xff1a;RDD Spark sql: SparkSession 核心数据结构&#xff1a;DataFrame Spark streaming: StreamingContext 核心数据结构&#xff1a;DStream(底层封装了RDD)&#xff0c;遍历出其中的RDD即可进行…

Inconsistent Query Results Based on Output Fields Selection in Milvus Dashboard

题意&#xff1a;在Milvus仪表盘中基于输出字段选择的不一致查询结果 问题背景&#xff1a; Im experiencing an issue with the Milvus dashboard where the search results change based on the selected output fields. Im working on a RAG project using text data conv…

智慧隧道可视化:安全与效率的智能保障

运用图扑可视化技术&#xff0c;实时监测隧道内的环境和交通状况&#xff0c;提升维保效率和应急响应能力&#xff0c;确保隧道运营的安全和畅通。

系统架构设计师教程 第4章 信息安全技术基础知识-4.1 信息安全基础知识-解读

系统架构设计师教程 第4章 信息安全技术基础知识-4.1 信息安全基础知识 4.1.1 信息安全的概念4.1.1.1 信息安全的范围4.1.1.1.1 设备安全4.1.1.1.2 数据安全4.1.1.1.3 内容安全4.1.1.1.4 行为安全 4.1.2 信息存储安全4.1.2.1 信息使用的安全4.1.2.1.1 用户的标识与验证4.1.2.1.…

Redis+Lua脚本+AOP+反射+自定义注解,打造我司内部基础架构限流组件

定义注解 Retention(RetentionPolicy.RUNTIME) Target({ElementType.METHOD}) Documented public interface RedisLimitAnnotation {/*** 资源的key,唯一* 作用&#xff1a;不同的接口&#xff0c;不同的流量控制*/String key() default "";/*** 最多的访问限制次数…