如何使用 NB-Iot + Arduino 通过MQTT协议上传数据至阿里云平台

如何使用 NB-Iot + Arduino 通过MQTT协议上传数据至阿里云平台,第1张

有很多通信模块只有TCP功能,没有MQTT功能,比如WIFI,W5500等模块,还有一些NBIOT模块,但是又想连接阿里云物联网平台,官方提供了操作系统,需要自己移植,很麻烦,比较难看得懂。就在想有没有一些简单一定的方法。

心想MQTT是基于TCP的,能否使用TCP转MQTT?因此就想使用TCP协议然后转MQTT协议连接阿里云物联网平台,经过试验证明是可以的。

首先我们先分析一下如何登陆接入Onenet平台。

先从它数据格式开始分析。首先我们要从后台取出三个信息,我们以这个为例。

我们把产品ID,设备名称,设备秘钥,简称三要素 (具体是什么看你自己的设备)

其实阿里云物联网平台的MQTT协议用的就是标准的,不过它加入了自己的认证方式。

MQTT协议需要上传四个参数,报活时间,clientID,用户名,密码。

那么阿里云的就在clientID,用户名,密码做了手脚。

clientID比较长,按照一定的格式

用户名:设备名和秘钥组成

密码:使用了加密串进行了加密,有sha1或者MD5加密方式

下面我们来介绍一下

MQTT接入都是发十六进制的数据。

么我们发送的时候就是这样子的一串数据

0x74 0x00 0x04 0x4d 0x51 0x54 0x54 0x04 0xC0 0078 0033 0x61 0x62 0x63 0x7c 0x73 0x65 0x63 0x75 0x72 0x65 0x6d 0x6f 0x64 0x65 0x3d 0x33 0x2c 0x73 0x69 0x67

0x6e 0x6d 0x65 0x74 0x68 0x6f 0x64 0x3d 0x68 0x6d 0x61 0x63 0x73 0x68 0x61 0x31 0x2c 0x74 0x69 0x6d 0x65 0x73 0x74 0x61 0x6d 0x70 0x3d 0x31 0x32 0x30 0x7c 0009

0x35 0x36 0x37 0x38 0x26 0x31 0x32 0x33 0x34 0028 0x32 0x32 0x32 0x37 0x35 0x30 0x44 0x45 0x44 0x46 0x45 0x34 0x46 0x37 0x37 0x34 0x30 0x30 0x32 0x45 0x45 0x38 0x37 0x45 0x45 0x44 0x32 0x39 0x43 0x46 0x44 0x30 0x36 0x33 0x38 0x43 0x35 0x46 0x36 0x36

十六进制解释

数据长度:0x74

协议数据长度 0x00 0x04

协议类型: 0x4d 0x51 0x54 0x54

协议数据: 0x04 0xC0

keepAlive数据:0078

ClientID长度:0033

ClientID: 0x61 0x62 0x63 0x7c 0x73 0x65 0x63 0x75 0x72 0x65 0x6d 0x6f 0x64 0x65 0x3d 0x33 0x2c 0x73 0x69 0x67 0x6e 0x6d 0x65 0x74 0x68 0x6f 0x64 0x3d 0x68 0x6d 0x61 0x63 0x73 0x68 0x61 0x31 0x2c 0x74 0x69 0x6d 0x65 0x73 0x74 0x61 0x6d 0x70 0x3d 0x31 0x32 0x30 0x7c

用户名:0009

用户名: 0x35 0x36 0x37 0x38 0x26 0x31 0x32 0x33 0x34

密码长度:0028

密码: 0x32 0x32 0x32 0x37 0x35 0x30 0x44 0x45 0x44 0x46 0x45 0x34 0x46 0x37 0x37 0x34 0x30 0x30 0x32 0x45 0x45 0x38 0x37 0x45 0x45 0x44 0x32 0x39 0x43 0x46 0x44 0x30 0x36 0x33 0x38 0x43 0x35 0x46 0x36 0x36复制代码上面的就是连接服务器的连接包

下面呢,我们来做个发布包(上传数据到服务器)

0x30 0x1D 0009 2f7379732f706f7374 0x7b 0x70 0x61 0x72 0x61 0x6d 0x73 0x3a 0x7b 0x74 0x65 0x6d 0x70 0x3a 0x31 0x30 0x7d 0x7d

十六进制数据解释

数据头:0x30

数据长度:0x1D

TopicName数据长度:0009

TopicName数据内容:2f7379732f706f7374

主体json数据: 0x7b 0x70 0x61 0x72 0x61 0x6d 0x73 0x3a 0x7b 0x74 0x65 0x6d 0x70 0x3a 0x31 0x30 0x7d 0x7d复制代码以上就是连接阿里云的数据包格式及发布数据的格式,由于时间问题没有做订阅的数据包分析,下一次更新订阅的内容。

首先要在云服务器把环境搭好,如JAVA运行环境,MySQL,FTP或者SVN等,然后把代码部署上去。sql文件是脚本,要在服务器上的数据库中执行后才有用,如用phpMyAdmin导入sql文件或者直接执行语句。

微信小程序域名可以随便填吗?

当然不可以,微信小程序在后台要配置合法的域名的,请求只能在这些域名里,必须是自己申请的域名。

微信公共平台是不是要自己搭建服务器,用阿里云服务器可以吗?

可以的,我现在自己就是用阿里云ECS服务器,搭建微信公众平台的购买阿里云ECS服务器,如果是针对大陆客户的,建议您选大陆的版块,如果是国外的客户,可以选择香港或者其他的国外站点服务器(购买的时候,记得多配置一个SSD云盘)另外,还要购买一个域名,域名要备案的,域名也可以在阿里云购买的,直接备案就可以的了,然后通过上传代码到服务器,域名和服务器相互绑定,就可以的了

怎么可以在微信里面打开APP下载链接地址?

苹果ios系统微信直接下载APP方法

步骤1:调起appstore

步骤2:右上角打开Safari下载

安卓手机则可直接在微信中直接下载安卓app

步骤1:微信跳转手机默认浏览器直接打开app下载链接

步骤2:右上角浏览器打开

对域名所属的JS代码进行处理,让其绕过微信检测机制,从而实现微信域名防封。用以上两种方式皆可以避免分享链接在微信内被拦截,功能实现后用户在微信内打开分享链接就可以正常访问了。

如此一来我们就解决了域名被微信拦截而无法打开的问题了,那么接下来就可以在微信内大量的分享链接或二维码来进行宣传引流。不仅提高了用户体验,也能够极大地提高自己的APP在微信中的推广转化率,充分利用微信的用户群体来达到我们的期望。

微信域名检测的方法?

我们点击页面右上角的三点然后选择在浏览器中打开然后选择手机上安装的一个浏览器打开即可,随便一个然后就可以看到已经成功解除屏蔽了最后如果有需要注册域名的,推荐注册top域名

微信公众号怎么开通微店?

1、微信服务号申请。微店微商城建立在微信公众号的基础上,因此,必须要与微信公众号进行绑定,且必须是微信服务号。微信服务号可开通支付功能,这是微店微商城交易的必备。

2、域名注册并备案用户注册后,需要绑定独立的域名。

3、服务号绑定微店微商城绑定微店微商城需要公众号为认证状态,并在微信公众号后台,点击设置—公众号设置—功能设置,填写网页授权域名。填写好“网页授权域名”时,需要下载一个文件,将该文件下载后上传至后台,设置—微信设置—微信公众号设置—上传文件,并在公众号后台进行确认。

4、设置店铺基本信息设置相应店铺的店铺名称、原始ID、微信号。复制“回调URL”和“Token”,粘贴到公众号后台—开发—基本配置—服务器配置的相应栏目,提交后可获得相应的APPID和Secret,再将其复制到相应栏目即可完成微店微商城与公众号的绑定。

前段时间正好做个项目,就是用的oss,普通上传和断点续传,代码贴出来,看是不是你需要的

public class OssManage {

public static  String ACCESS_KEY_ID  = null;

public static  String  ACCESS_KEY_SECRET = null;

public static  String  ENDPOINT = null;

public static  String  BUCKETNAME = null;

public static  String  BUCKETNAME_VIDEO = null;

public static String OUT_OF_DATE = null;

private  OSSClient client  = null;

private  ObjectMetadata meta = null;

static{

try {

ACCESS_KEY_ID  = SysConstgetProperty("OSS_ACCESS_KEY_ID");

ACCESS_KEY_SECRET = SysConstgetProperty("OSS_ACCESS_KEY_SECRET");

ENDPOINT = SysConstgetProperty("OSS_ENDPOINT");

 BUCKETNAME = SysConstgetProperty("OSS_BUCKETNAME");

 BUCKETNAME_VIDEO = SysConstgetProperty("OSS_BUCKETNAME_VIDEO");

 OUT_OF_DATE = SysConstgetProperty("OSS_OUT_OF_DATE");

} catch (javalangException e) {

eprintStackTrace();

}

}

public void init(){

 // 初始化一个OSSClient

        client = new OSSClient(ENDPOINT,ACCESS_KEY_ID, ACCESS_KEY_SECRET);

        meta = new ObjectMetadata();

}

/

  @Description: 上传文件到OSS文件服务器

  @param content  文件流

  @param key    上传为OSS文件服务器的唯一标识

  @param mimeType  文档类型

  @throws Exception 

  @ReturnType:String   OSSObject的ETag值。

/

public String  uploadFile(InputStream content,String key,String mimeType) throws Exception{

//进行初始化

init();

        // 必须设置ContentLength

        metasetContentType(mimeType);

        // 上传Object

        LogUtilprintConsoleLog("上传到oss服务器开始" + key);

        PutObjectResult result = clientputObject(BUCKETNAME, key, content, meta);

        LogUtilprintConsoleLog("上传到oss服务器结束" + key);

        return resultgetETag();

}

/

  @Description: 根据key获取oss服务器上的地址

  @param key

  @return 

  @ReturnType:String

/

public String getImgURl(String key){

init();

Date expires = new Date (new Date()getTime() + IntegerparseInt(OUT_OF_DATE)); // 30 minute to expire

GeneratePresignedUrlRequest generatePresignedUrlRequest ;

if(keystartsWith("msplatform")){

generatePresignedUrlRequest =new GeneratePresignedUrlRequest(BUCKETNAME, key);

}else {

generatePresignedUrlRequest =new GeneratePresignedUrlRequest(BUCKETNAME_VIDEO, key);

}

generatePresignedUrlRequestsetExpiration(expires);

URL url = clientgeneratePresignedUrl(generatePresignedUrlRequest);

return urltoString();

}

/

  @Description:根据key获取oss服务器上的ipa文件地址

  @param key

  @return 

  @ReturnType:String

 /

public String getIpaURl(String key){

init();

Date expires = new Date(new Date()getTime()+ 103652436001000);

GeneratePresignedUrlRequest generatePresignedUrlRequest ;

if(keystartsWith("msplatform")){

generatePresignedUrlRequest =new GeneratePresignedUrlRequest(BUCKETNAME, key);

}else {

generatePresignedUrlRequest =new GeneratePresignedUrlRequest(BUCKETNAME_VIDEO, key);

}

generatePresignedUrlRequestsetExpiration(expires);

URL url = clientgeneratePresignedUrl(generatePresignedUrlRequest);

return urltoString();

}

/

  @Description: 根据key获取oss服务器上的地址

  @param key

  @return 

  @ReturnType:String

/

public InputStream  getObject(String key){

init();

OSSObject object = null;

if(keystartsWith("msplatform")){

object= clientgetObject(BUCKETNAME, key);

}else{

object= clientgetObject(BUCKETNAME_VIDEO, key);

}

objectgetObjectMetadata()getContentType();

// 获取Object的输入流

InputStream objectContent = objectgetObjectContent();

return objectContent;

}

/

  @Description:删除文件

  @param key  OSS文件服务器上文件的唯一标识

  @ReturnType:void

/

public void deleteFile(String key){

init();

clientdeleteObject(BUCKETNAME, key);

}

/

  @Description: 断点上传文件到OSS文件服务器

  @param content  文件流

  @param key    上传为OSS文件服务器的唯一标识

  @param position 位置

/

public String  appendObjectFile(InputStream content,String key,int position,String mimeType) throws Exception{

   //进行初始化

    init();

        // 必须设置ContentLength

        metasetContentLength(position);

        metasetContentType(mimeType);

        metasetCacheControl("no-cache");

        metasetContentEncoding("utf-8");

        // 上传

        LogUtilprintConsoleLog("断点上传到oss服务器开始" + key);

        AppendObjectRequest appendObjectRequest = new AppendObjectRequest(BUCKETNAME, key, content, meta);

        appendObjectRequestsetPosition(LongvalueOf(position));

        AppendObjectResult appendObjectResult =clientappendObject(appendObjectRequest);

        LogUtilprintConsoleLog("断点上传到oss服务器结束" + key);

        return appendObjectResultgetNextPosition()toString();

}

public static void main(String[] args) {

OssManage ossManage = new OssManage();

}

}

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » 如何使用 NB-Iot + Arduino 通过MQTT协议上传数据至阿里云平台

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情