当前位置: 首页 > news >正文

【安信可NB-IoT模组EC系列应用笔记⑥】AT指令HTTP请求一篇就够

AT指令HTTP请求一篇就够

  • 前言
  • 一、测试准备
  • 二、配置入网
    • 1. 指令列表
  • 三、HTTP GET请求
    • 1. 发送简单的GET请求
      • (1)指令列表:
      • (2)请求结果
    • 2.自定义头部的GET请求
      • (1)URL的验证
      • (2)指令列表
  • 四、HTTP HEAD请求
  • 五、对MCU做OTA升级流程
    • 1.获取目标固件信息
    • 2.GET请求固件内容
      • (1)整包请求
      • (2)分包请求
  • 六、HTTP POST请求
    • 1.简单的POST请求
    • 2.其他参数的POST请求
  • 七. 联系我们


前言

       我还记得,EC系列模组教程的前一次更新还是去年,上一篇教程就实现了定位信息监控,可以在微信公众号实时查看EC模组的位置信息(从那以后都不怕自己的小电驴被偷了)。
       从本章开始,EC系列会有一系列的教程更新出来,给大家更方便的顺利的使用NB-IOT的功能。本章就教大家如何使用HTTP指令。

一、测试准备

       同样的,除了EC-01开发板之外,本次测试需要能够连接网络的NB物联网卡,已经接好配套的天线。开发板的micro USB接入电脑。
        apiPost 验证URL是否可以正常响应。(apiPost下载地址:https://www.apipost.cn/?utm_source=10120)
        EC系列AT指令集:https://docs.ai-thinker.com/_media/nb-iot/nb-iot系列模组AT指令集v1.0.pdf

二、配置入网

1. 指令列表

AT+CGATT=1\r\n
AT+CGDCONT=1,"IP","CMNBIOT1"\r\n
AT+CGACT=1\r\n
AT+CREG=1\r\n

指令解释:
AT+CGATT ——附着网络
AT+CGDCONT ——配置APN
AT+CGACT ——激活网络
AT+CREG ——注册网络

成功入会打印如下信息:
在这里插入图片描述

提示
1、如果在附着网络指令提示:+ CMS ERROR:308,证明物联网卡被锁,通常是换卡使用导致的,需要解锁或者直接换新的卡。
2、如果在配置APN指令时回复:+ CMS ERROR:3。证明附着不成功,或者没装卡导致
3、如果成功之后,后面设备重启可以不发入网的指令,会自动入网

三、HTTP GET请求

1. 发送简单的GET请求

       本节我们以 http://httpbin.org/get这个URL为例,控制EC-01-Kit 开发板发送GET请求。
首先使用apiPost验证一下这个URL:
在这里插入图片描述
可以看到,这个URL可以正常响应。

(1)指令列表:

AT+HTTPCREATE=0,"http://httpbin.org"\r\n
AT+HTTPCON=0\r\n
AT+HTTPSEND=0,0,4,"/get"\r\n

重点指令解释:
AT+HTTPSEND=<httpclientId>,<method>,<pathlen>,<path>[,<customheaderlen>,<customheader>,<contentTypelen>,<contentType>,<contentlen>,<content>]
根据指令描述:AT+HTTPSEND=0,0,4,“/get”
参数1:0 为httpclientId 即AT+HTTPCREATE=0,“http://httpbin.org” 中的“0”
参数2:0 为GET ,1为POST,2为PUT,3为DELETE 4为HEAD
参数3:4 为path 的字符数,即“/get” 的字符数量
参数4 :”/get“为请求的路径,就是path

(2)请求结果

在这里插入图片描述
可以看到,响应头和响应数据都分别打印出了,只是响应数据是HEX格式的,只要把这个数据转换成字符串就可以了,在线转换工具:https://www.sojson.com/hexadecimal.html
在这里插入图片描述

2.自定义头部的GET请求

(1)URL的验证

        自定义头部的请求通常出现在需要验证令牌的情况。因为网上找不到需要自定义头部的HTTP服务器,本次测试为了演示如何使用自定义头部来发送请求,相关URL会关掉,所以不要使用本节的URL进行测试。

HTTP服务器配置如下:
URL: http://weixin.xuhongv.com
PATH: /aliyun.DeviceHandler/postFAEData
custom handle: token:fae12345678

我们依旧是先使用apiPost验证一下:
没加token 的请求:
在这里插入图片描述
加入token的请求头:
在这里插入图片描述

(2)指令列表

根据指令描述,\<customheader> 参数要使用16进制表示:
在这里插入图片描述
所以,token:fae12345678字符串转换成16进制就是: 746f6b656e3a6661653132333435363738

AT+HTTPCREATE=0,"http://weixin.xuhongv.com"\r\n
AT+HTTPCON=0\r\n
AT+HTTPSEND=0,0,33,"/aliyun.DeviceHandler/postFAEData",34,"746f6b656e3a6661653132333435363738"\r\n

AT+HTTPSEND 头部参数解释(请同步查看AT指令集)
<customheaderlen>:自定义头部的字符长度----本节自定义头部是:746f6b656e3a6661653132333435363738 长度为:34
<customheader>:自定义头部的内容,以16进制表示。

EC-01-Kit 开发板请求结果:
在这里插入图片描述
把数据转换一下:
在这里插入图片描述
乱码部分是中文,数据和apiPost 请求的是一样的内容

四、HTTP HEAD请求

       HTTP 的HEAD请求其实就是获取目标的响应头。通常在获取目标信息的时候用得到,比如文件大小,MD5值等。HEAD请求和GET请求的指令唯一区别就是AT+HTTPSEND 指令中的第二个参数为4。例如:

//发送GET请求:
AT+HTTPSEND=0,0,4,"/get"\r\n
//发送HEAD请求:
AT+HTTPSEND=0,4,4,"/get"\r\n

五、对MCU做OTA升级流程

       EC-01使用AT指令固件,通常需要一个MCU来发送AT指令,随之对MCU进行OTA升级的需求也是必要的。既然讲完了HEAD请求和GET 请求,也可以满足对MCU做固件升级了。
       本节使用的固件是随便找了一个ESP8266的固件进行介绍,名字如有雷同,纯属巧合。再者,请不要使用本节的URL进行测试,因为本章写完之后,会修改URL。

提示
NB-IOT 不支持HTTPS,请把固件的URL改成HTTP。

本节的URL为:http://seahibucket1.oss-cn-shenzhen.aliyuncs.com//http_test/release-v1.5-huawei-ota-20220325.bin

1.获取目标固件信息

       在升级之前,获取目标固件的信息,固件大小,MD5校验值等,以确定固件的完整和正确。通常情况下,这些信息都在响应头中。这时候我们只需要发送HEAD 请求就可以获取到这些信息。
HEAD请求指令

AT+HTTPCREATE=0,"http://seahibucket1.oss-cn-shenzhen.aliyuncs.com"\r\n
AT+HTTPCON=0\r\n
AT+HTTPSEND=0,4,47,"/http_test/release-v1.5-huawei-ota-20220325.bin"\r\n
AT+HTTPDESTROY=0\r\n

请求结果
在这里插入图片描述
可以看到:

  • Content-Length: 766304
  • Content-MD5: h6AwnvNCs8AERGX4QLQeqQ==

这两个信息,就是目标固件的大小和MD5值。

2.GET请求固件内容

(1)整包请求

       EC-01的GET请求的数据内容最大可以到3000 Byte。无法整包请求。而且过程不可控制。
指令列表

AT+HTTPCREATE=0,"http://seahibucket1.oss-cn-shenzhen.aliyuncs.com"\r\n
AT+HTTPCON=0\r\n
AT+HTTPSEND=0,0,47,"/http_test/release-v1.5-huawei-ota-20220325.bin"\r\n

请求结果
在这里插入图片描述

注意
请求下载的数据是原数据的HEX值,MCU是不能直接运行的,需要把这些数据使用算法转换成字符串才是原始数据,才能使用。
例如:
在这里插入图片描述

(2)分包请求

       分包请求不是差分包升级,而是对整包进行连续的内容下载,直到下载完整个固件包的内容。实现方式就是在请求头中加入Ranges参数,比如:需要下载前0-1024个字节,Ranges:bytes=0-1024,而下一个包的首个字节的位置就是1025,下一次请求头中 Ranges:bytes=1025-1025+xxx。
指令列表,请求前两个包,每包1024Byte

AT+HTTPCREATE=0,"http://seahibucket1.oss-cn-shenzhen.aliyuncs.com"\r\n
AT+HTTPCON=0\r\n
AT+HTTPSEND=0,0,47,"/http_test/release-v1.5-huawei-ota-20220325.bin",36,"52616e67653a62797465733d302d31303234"\r\n
AT+HTTPSEND=0,0,47,"/http_test/release-v1.5-huawei-ota-20220325.bin",42,"52616e67653a62797465733d313032352d32303439"\r\n

请求结果
在这里插入图片描述同样的,这些数据都是要进行HEX到字符串的转换。并且把转换后的数据用MD5验证,确保数据正确。

六、HTTP POST请求

       POST请求和GET请求的参数大致一样,唯一不同的是POST要是使用Body信息

1.简单的POST请求

       我们需用以下信息作为HTTP服务器:

  • URL: http://httpbin.org/post
  • Body 类型: application/json
  • Body 类型长度: 16
  • Body:{“form”:{“purpose”:“test”}}
  • Body的16进制表示: 7b22666f726d223a7b22707572706f7365223a2274657374227d7d
  • Body长度: 54

指令列表为:

AT+HTTPCREATE=0,"http://httpbin.org"\r\n
AT+HTTPCON=0\r\n
AT+HTTPSEND=0,1,5,"/post",,,16,"application/json",88,"6170706c69636174696f6e2f6a736f6e3d7b22666f726d223a7b22707572706f7365223a2274657374227d7d"\r\n

请求结果
在这里插入图片描述

2.其他参数的POST请求

       其他参数的POST请求,可以完全参考GET请求的方式。

七. 联系我们

以上就是本期分享的内容,目的在于让大家快速适应新品方案的开发,更多资料可从我们官网上获取。

官方官网:https://www.ai-thinker.com
开发资料:https://docs.ai-thinker.com/
官方论坛:http://bbs.ai-thinker.com
技术支持:support@aithinker.com

相关文章:

  • 【CMake】第1篇 了解 CMake 构建源码输出 Hello world(初学者必备)
  • 机器人+人工智能课程需求和就业趋势-2022-
  • 操作表单(验证)
  • 品牌线上打假,应防微杜渐
  • 现代信号处理——参数估计理论(线性均方估计)
  • Haproxy搭建http负载均衡
  • 神经网络在控制中的应用,神经元网络控制的作用
  • 指针难点——数组指针、指针数组、函数指针、指针函数详解
  • 多媒体信息处理学习笔记-3. Feature Indexing and Retrieval
  • 约束(constraint)
  • 「运维有小邓」SIEM解决方案数据安全分析组件
  • 离散数学22_第8章图__握手定理
  • git解决冲突会带上另外一方不相关代码
  • Java——聊聊JUC中的CAS原理
  • 丁鹿学堂:前端代码优化之健壮性
  • 「前端」从UglifyJSPlugin强制开启css压缩探究webpack插件运行机制
  • Android Studio:GIT提交项目到远程仓库
  • CentOS从零开始部署Nodejs项目
  • const let
  • docker-consul
  • Dubbo 整合 Pinpoint 做分布式服务请求跟踪
  • extract-text-webpack-plugin用法
  • HTML-表单
  • Java精华积累:初学者都应该搞懂的问题
  • js 实现textarea输入字数提示
  • mysql innodb 索引使用指南
  • nginx(二):进阶配置介绍--rewrite用法,压缩,https虚拟主机等
  • Objective-C 中关联引用的概念
  • QQ浏览器x5内核的兼容性问题
  • React-Native - 收藏集 - 掘金
  • Spring框架之我见(三)——IOC、AOP
  • vue-cli3搭建项目
  • 阿里中间件开源组件:Sentinel 0.2.0正式发布
  • 初识MongoDB分片
  • 仿天猫超市收藏抛物线动画工具库
  • 给第三方使用接口的 URL 签名实现
  • 技术攻略】php设计模式(一):简介及创建型模式
  • 警报:线上事故之CountDownLatch的威力
  • 类orAPI - 收藏集 - 掘金
  • 排序算法学习笔记
  • 微信支付JSAPI,实测!终极方案
  • ​插件化DPI在商用WIFI中的价值
  • # Panda3d 碰撞检测系统介绍
  • #我与Java虚拟机的故事#连载03:面试过的百度,滴滴,快手都问了这些问题
  • #我与Java虚拟机的故事#连载09:面试大厂逃不过的JVM
  • #我与Java虚拟机的故事#连载11: JVM学习之路
  • #我与Java虚拟机的故事#连载12:一本书带我深入Java领域
  • $NOIp2018$劝退记
  • (4) PIVOT 和 UPIVOT 的使用
  • (javascript)再说document.body.scrollTop的使用问题
  • (MIT博士)林达华老师-概率模型与计算机视觉”
  • (二)fiber的基本认识
  • (附源码)ssm本科教学合格评估管理系统 毕业设计 180916
  • (附源码)ssm高校运动会管理系统 毕业设计 020419
  • (附源码)ssm基于jsp高校选课系统 毕业设计 291627