0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Air780EP模块AT开发-HTTP应用指南

合宙LuatOS 2024-07-22 14:38 次阅读

# 概述

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

1、激活PDP

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版本固件](https://cdn.openluat-erp.openluat.com/erp_site_file/product_file/sw_file_20240422190620_AirM2M_780EP_V1007_LTE_AT.zip)(除780EP模块不能烧录,但可以在上面AT固件获取连接获取到其他模块型号的AT固件。)

wKgaomad_iCAGM1mACObj6OhrXM912.png

# HTTP GET请求示例

具体指令和参数使用说明,可参考[AT指令手册](https://doc.openluat.com/article/4985)

~~~
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






<2;title>Document<2;/title>


Hello


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指令手册](https://doc.openluat.com/article/4985)

~~~
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






<2;title>Document<2;/title>


Hello


OK
~~~


# HTTPS SSL请求示例

具体指令和参数使用说明,可参考[AT指令手册](https://doc.openluat.com/article/4985)

带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指令手册](https://doc.openluat.com/article/4985)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及时读取出来,以防缓冲区满出错

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 模块
    +关注

    关注

    7

    文章

    2600

    浏览量

    46940
  • AT
    AT
    +关注

    关注

    2

    文章

    184

    浏览量

    65016
  • HTTP
    +关注

    关注

    0

    文章

    477

    浏览量

    30712
  • 合宙通信
    +关注

    关注

    0

    文章

    145

    浏览量

    1649
收藏 人收藏

    评论

    相关推荐

    合宙Air780EP模块Lua开发阿里云应用指南

    合宙Air780EP模块Lua开发阿里云超详细教学!看完包学会!
    的头像 发表于 08-08 09:00 633次阅读
    合宙<b class='flag-5'>Air780EP</b><b class='flag-5'>模块</b>Lua<b class='flag-5'>开发</b>阿里云应用<b class='flag-5'>指南</b>

    MQTT应用看这篇!合宙Air780EP_LuatOS_MQTT应用指南

    Air780EP 是合宙的低功耗4G模组之一,支持LuatOS的脚本二次开发,即使是不太懂技术的老板,也能轻松使用 Air780EP开发产品。 本文应各位大佬邀请,详细讲解了
    的头像 发表于 08-08 17:13 996次阅读
    MQTT应用看这篇!合宙<b class='flag-5'>Air780EP</b>_LuatOS_MQTT应用<b class='flag-5'>指南</b>

    合宙Air780EP模块开发常见问题——异常断链篇

    在用合宙Air780EP模块开发的时候,有时候会遇到收不到网络数据的问题。 这里把遇到的问题和排查方法记录下来,希望能够帮助到大家!
    的头像 发表于 08-09 17:47 2378次阅读
    合宙<b class='flag-5'>Air780EP</b><b class='flag-5'>模块</b><b class='flag-5'>开发</b>常见问题——异常断链篇

    合宙Air780EP模块——AT指令MQTT接入OneNET开发指南

    物联网设备要互动,Air780EP模块是桥梁。用AT指令告诉MQTT:“帮我把话带给OneNET吧!”MQTT就忙着打包数据,像寄信一样传给OneNET。OneNET收到后,处理、存着或再转发。这
    的头像 发表于 08-19 16:40 1346次阅读
    合宙<b class='flag-5'>Air780EP</b><b class='flag-5'>模块</b>——AT指令MQTT接入OneNET<b class='flag-5'>开发指南</b>

    AT指令速通FTP:合宙Air780EP模块超详细教程

    合宙Air780EP低功耗4G模组AT开发接入FTP超详细示例!
    的头像 发表于 08-20 17:40 1418次阅读
    AT指令速通FTP:合宙<b class='flag-5'>Air780EP</b><b class='flag-5'>模块</b>超详细教程

    合宙低功耗4G模组Air780EP——硬件设计01

    Air780EP是一款合宙低功耗LTECat1无线通信模组。 支持FDD-LTE/TDD-LTE的4G远距离无线 传输技术。 另外,模组提供了USB/UART/I2C等通用接口满足IoT行业的各种应用诉求。 本文将主要介绍Air780EP的应用接口设计部分。
    的头像 发表于 09-02 16:47 801次阅读
    合宙低功耗4G模组<b class='flag-5'>Air780EP</b>——硬件设计01

    合宙 | Air780EP首版LuatOS固件发布,新品模组内测抢先体验

    11月27日,合宙推出 《9.9盲订!合宙Air780EP新品4G开发板福利今日开启》 铁粉活动。当前已近1900位工程师朋友参与盲订(仅余最后100多个名额),在此感谢大家的信任与支持! 12月
    的头像 发表于 12-11 12:20 2393次阅读
    合宙 | <b class='flag-5'>Air780EP</b>首版LuatOS固件发布,新品模组内测抢先体验

    Air780EP模块AT开发FOTA远程升级指南

    Air780EP模块AT开发FOTA远程升级指南简介AT版本的远程升级主要是对AT固件进行升级,实际方式为通过合宙官方IOT平台升级或者使用自己搭建的服务器进行升级服务。关联文档和使用
    的头像 发表于 07-19 15:16 365次阅读
    <b class='flag-5'>Air780EP</b><b class='flag-5'>模块</b>AT<b class='flag-5'>开发</b>FOTA远程升级<b class='flag-5'>指南</b>

    Air780E/Air780EP/Air780EQ/Air201模块遇到死机问题如何分析

    Air780E/Air780EP/Air780EQ/Air201模块遇到死机问题如何分析简介本文档适用于合宙
    的头像 发表于 07-19 15:37 349次阅读
    <b class='flag-5'>Air780</b>E/<b class='flag-5'>Air780EP</b>/<b class='flag-5'>Air780</b>EQ/<b class='flag-5'>Air</b>201<b class='flag-5'>模块</b>遇到死机问题如何分析

    Air780E/Air780EP/Air780EQ/Air201模块遇到内存死机如何分析

    Air780E/Air780EP/Air780EQ/Air201模块遇到内存死机如何分析简介本文档适用于合宙
    的头像 发表于 07-19 16:07 249次阅读
    <b class='flag-5'>Air780</b>E/<b class='flag-5'>Air780EP</b>/<b class='flag-5'>Air780</b>EQ/<b class='flag-5'>Air</b>201<b class='flag-5'>模块</b>遇到内存死机如何分析

    合宙Air780EP模块AT开发-HTTP应用指南

    简介关联文档和使用工具:AT固件获取AT指令手册概述4G模块支持HTTP和HTTPS协议,HTTP应用的基本流程如下:1、激活PDP(参考:http://oldask.openluat
    的头像 发表于 08-01 17:15 306次阅读
    合宙<b class='flag-5'>Air780EP</b><b class='flag-5'>模块</b>AT<b class='flag-5'>开发</b>-<b class='flag-5'>HTTP</b>应用<b class='flag-5'>指南</b>

    合宙 Air780E/Air780EP/Air780EQ/Air201模块遇到死机问题如何分析

    Air780E/Air780EP/Air780EQ/Air201模块遇到死机问题如何分析简介本文档适用于合宙
    的头像 发表于 08-01 17:27 399次阅读
    合宙 <b class='flag-5'>Air780</b>E/<b class='flag-5'>Air780EP</b>/<b class='flag-5'>Air780</b>EQ/<b class='flag-5'>Air</b>201<b class='flag-5'>模块</b>遇到死机问题如何分析

    Air780EP模块FTP应用AT开发详解

    基于合宙Air780EP使用AT指令接入FTP的超详细教程!
    的头像 发表于 08-21 11:16 204次阅读
    <b class='flag-5'>Air780EP</b><b class='flag-5'>模块</b>FTP应用AT<b class='flag-5'>开发</b>详解

    合宙低功耗4G模组Air780EP——硬件设计02

    合宙低功耗4G模组Air780EP——硬件设计
    的头像 发表于 09-03 15:07 122次阅读
    合宙低功耗4G模组<b class='flag-5'>Air780EP</b>——硬件设计02

    合宙LuatOS开发板Core_Air780EP使用说明

    Core-Air780EP 开发板是合宙通信推出的基于 Air780EP 模组所开发的,包含电源,SIM卡,USB,天线,音频等必要功能的最小硬件系统。以方便用户在设计前期对
    的头像 发表于 09-03 17:38 224次阅读
    合宙LuatOS<b class='flag-5'>开发</b>板Core_<b class='flag-5'>Air780EP</b>使用说明