1.介绍

SDK简介

Agent Tiny是部署在具备广域网能力、对功耗/存储/计算资源有苛刻限制的终端设备上的轻量级互联互通中间件,您只需调用API接口,便可实现设备快速接入到物联网平台以及数据上报和命令接收等功能。

Agent Tiny SDK是Huawei Agent Tiny软件开发工具包(Software Development Kit),通过Agent Tiny SDK端云互通组件,简单快速地实现与华为物联网平台安全可靠连接,可以大大减少开发周期,快速构建IoT产品。端云互通组件可以采用MQTT、CoAP和LWM2W协议接入物联网平台。Agent Tiny SDK全景图如图1所示。

2. 开发环境

2.1硬件需求

开发计算机、运行win7及以上操作系统

野火开发板STM32F429IG、数据线

Jlink下载器、网线、USB转串口

2.2软件需求

IDE(包括GCC编译器、JDK运行环境、make工具、Jlink驱动、Eclipse)

串口工具(QCOM-V1.6)

实名认证的华为云账号

SDK源码

3.接入物联网平台流程

根据设备中的接入地址,可以将接入物联网平台分为两种模式:

  • 直接接入物联网平台模式

  • 通过设备发放服务接入物联网平台模式

两种接入方式的对比:

  • 直接接入物联网平台示意图

  • 通过设备发放服务接入物联网凭条示意图

4.直接接入实例

下面以野火STM32F429IG开发板通过以太网直接接入物联网平台为例,详细讲述接入流程。总体操作流程参考下图。

说明:野火STM32F429IG开发板的详细资料可以从http://www.firebbs.cn/forum.php下载。

产品模型参考

设备信息参考

4.1平台侧开发

进入开发中心,根据上图,依次在开发中心中新建项目->新建产品->定义产品模型->注册设备。

新建项目

选择开发者中心并进入。

点击“我的项目”中“+”,创建自己的项目。

输入项目信息后点击“确定”。

点击“进入项目”。

新建产品

选择产品开发新建产品,即可跳转到产品模型定义界面。

选择自定义产品方式创建产品。

补全产品的各类信息,点击“创建”,提示创建成功后点击“确定”,前往产品开发。

定义产品模型

选择新建服务,开始添加产品的相关特性

给产品定义一个属性:batteryLevel,用于设备向平台上报,定义为int型,最大值设置为100,访问模式RWE全部勾选,完成后点击确定;

给产品增加一个命令:cmd,设置下发命令属性名称:ioswitch,用于平台向设备发送命令,定义为int型,最大值99。通过上报和下发,构成了我们演示的上行和下行通道。

添加完后保存:

创建设备

创建了产品模型之后,我们需要根据模型创建具体的设备。点击设备管理->添加真实设备,即可进入添加设备界面。

进入界面之后,选择我们刚才建立的产品模型“sdk_test_001”,进行设备创建。
设备标识(nodeid)是识别该设备的唯一标识符,要求唯一,此处为示范,用户使用时以实际命名为准。

此处注意,确认之后自动生成产品设备ID(deviceid)及密钥(password),请记录下设备标识(nodeid)、设备ID(deviceid)及密钥(password),这三个信息主要用于对接华为云时的设备鉴权。

创建完毕之后,即可在设备管理中看到刚刚创建的设备,此时设备状态为离线。

到此为止,平台侧开发完毕。

4.2设备侧开发

设备侧开发前准备

  • 下载SDK源码

  • 获取接入信息(进入开发中心的“sdk_test_098”项目中,在“应用 > 对接信息”页面查看“设备接入信息”中的“MQTT接入方式”)

说明:SDK采用的是GCC+MakeFile模式,用户可以根据自己的IDE开发环境灵活适配。

修改mk文件

集成开发环境搭建好后,修改targets\STM32F429IGTx_FIRE\config.mk

CONFIG_OS_TYPE := "liteos"
CONFIG_ARCH_CPU_TYPE := "armv7-m"
CONFIG_SHELL_ENABLE := y
CONFIG_STIMER_ENABLE := y
CONFIG_DRIVER_ENABLE := y
CONFIG_AT_ENABLE     := y
CONFIG_CJSON_ENABLE := y
CONFIG_TCPIP_ENABLE := y
CONFIG_TCPIP_TYPE := "lwip_socket"
CONFIG_DTLS_ENABLE   := y
CONFIG_DTLS_TYPE     := "mbedtls_cert"
CONFIG_MQTT_ENABLE   := y
CONFIG_MQTT_TYPE     := "paho_mqtt"
CONFIG_OC_MQTT_ENABLE := y
CONFIG_OC_MQTT_TYPE   := "soft"
CONFIG_DEMO_ENABLE := y
CONFIG_DEMO_TYPE   := "oc_tls_mqtt_demo"      ### 产品逻辑 ###

修改接入信息

参考如下内容,修改demos/oc_tls_mqtt_demo.c

#define DEFAULT_LIFETIME            10
#define DEFAULT_SERVER_IPV4         "49.4.93.24"               //物联网平台MQTT接入地址
#define DEFAULT_SERVER_PORT         "8883"                     //物联网平台MQTT接入端口
#define CN_MQTT_EP_NOTEID           "device_001"               //平台侧新建的设备标识码
#define CN_MQTT_EP_DEVICEID         "c4ef0d27-8ea5-41aa-837f-361cff947601"  //平台侧设备创建成功后提供的设备ID
#define CN_MQTT_EP_PASSWD           "314483483108d92db143"     //平台侧设备创建成功后提供的密钥

编译运行

修改完成,编译然后debug。

4.3调测

通过串口工具,可以看到设备已经和物联网平台建立连接。

登录开发平台->“sdk_test_098”项目 ->设备管理,可以看到我们的设备已经上线,点击调试产品,可以进入我们平台的设备调试界面。

可以看到所创建的设备已经上报的数据

输入ioswitch值88,点击“发送”。

在串口工具可以看到接收到的命令

到此调测完成。

添加华为IoT小助手(微信号:huawei-iot,回复“博客园”)获取更多LiteOS课程。

漫谈LiteOS-端云互通组件-MQTT开发指南(上)的更多相关文章

  1. 漫谈LiteOS-端云互通组件-MQTT开发指南(下)

    1.介绍 SDK简介 Agent Tiny是部署在具备广域网能力.对功耗/存储/计算资源有苛刻限制的终端设备上的轻量级互联互通中间件,您只需调用API接口,便可实现设备快速接入到物联网平台以及数据上报 ...

  2. Blazor 组件库开发指南

    翻译自 Waqas Anwar 2021年5月21日的文章 <A Developer's Guide To Blazor Component Libraries> [1] Blazor 的 ...

  3. 腾讯云TDSQL MySQL版 - 开发指南 分布式事务

    由于事务操作的数据通常跨多个物理节点,在分布式数据库中,类似方案即称为分布式事务. TDSQL MySQL版 支持普通分布式事务协议和 XA 分布式事务协议.TDSQL MySQL版(内核5.7或以上 ...

  4. 腾讯云TDSQL MySQL版 - 开发指南 二级分区

    TDSQL MySQL版 目前支持 Range 和 List 两种格式的二级分区,具体建表语法和 MySQL 分区语法类似. 二级分区语法 一级 Hash,二级 List 分区示例如下: MySQL ...

  5. Amzon MWS API开发之 上传数据

    亚马逊上传数据,现有能操作的功能有很多:库存数量.跟踪号.价格.商品....... 我们可以设置FeedType值,根据需要,再上传对应的xml文件即可. 下面可以看看FeedType类型 这次我们拿 ...

  6. libcurl 上传文件,不管文件什么格式 libcurl开发指南

    libcurl 上传文件,不管文件什么格式 libcurl开发指南 上传文件 https://curl.haxx.se/download.html curl命令参数很多,这里只列出我曾经用过.特别是在 ...

  7. 漫谈LiteOS之开发板-串口(基于GD32450i-EVAL)

    [摘要] ​主要讲解物联网的技术积累,本期我们先带领大家学习漫谈LiteOS之漫谈开发板第一集-串口,本文基于GD32450i-EVAL对串口以及其通信做了一个简要的分析,以及开发过程中遇到的一些技术 ...

  8. 学习 | jQuery移动端页面组件化开发(一)

    最近在学习移动端组件化开发web页面,其中有好多小细节,值的去思考. 主要介绍JS的思路,具体的代码就不贴了,主要是想表达出一种思路 总体来说 1.入口文件,在入口文件中导入插件,插件样式,jquer ...

  9. 漫谈LiteOS之开发板-GPIO(基于GD32450i-EVAL)

    [摘要] 本文主要从GPIO的定义.工作模式.特色.工作场合.以及GD32450i-EVAL开发板的引脚.对应的寄存器以及GPIO的流水灯示例对GPIO加以介绍,希望对你有所帮助. 1定义 GPIO( ...

随机推荐

  1. ICCV 2019|70 篇论文抢先读,含目标检测/自动驾驶/GCN/等(提供PDF下载)

    虽然ICCV2019已经公布了接收ID名单,但是具体的论文都还没放出来,为了让大家更快得看论文,我们汇总了目前已经公布的大部分ICCV2019 论文,并组织了ICCV2019论文汇总开源项目(http ...

  2. MFC之登录框的问题处理

    1.在做登录框的时候,把登录框做成模态对话框,并且放在 主界面程序所在窗口打开之前.也就是放在主界面类的InitInstance()里.这样做就会在弹出主界面之前被登录框弹出模态框出来阻塞住. 1.但 ...

  3. Markdown 高阶语法

    记录一些 Markdown 的高阶语法,想起来什么,再更新 分割线 两条分割线 *** *** 插入表格 Column Column Column Row Content Content | Colu ...

  4. zookeeper 负载均衡

    1,原理 将启动的服务注册到zookeeper 注册中心上面,采用临时节点,zookeeper 客户端从注册中心上读取服务的信息,之后再本地采用负载均衡算法(取模算法),将请求轮询到每个服务. 同时z ...

  5. .Net Web Api返回Json数据中原对象变量名大小写问题

    这两天在工作中使用SignalR的WebSocket做数据实时传递的功能开发,在后端主动向前端广播数据以Json传递时,前端获取的Json中对应类的变量名首字母默认传递的是大写.而前端一直获取到的后台 ...

  6. 关于 JavaScript 的 精度丢失 与 近似舍入

    一.背景 最近做 dashborad 图表时,涉及计算小数且四舍五入精确到 N 位.后发现 js 算出来的结果跟我预想的不一样,看来这里面并不简单-- 二.JS 与 精度 1.精度处理 首先明确两点: ...

  7. Markdown语法快速学习

    Markdown 简洁语法说明 0.前言 一直以来都是以word文档做笔记,存在很多问题,比如代码格式.高亮等.这次公司要求使用markdown,感觉眼前一亮,以前word的问题都得到了解决,而且可以 ...

  8. SpringMVC里 form提交到controller404 解决方法

    把 <form action="/logon"> 改为 <form action="${pageContext.request.contextPath} ...

  9. Android 数据库框架 DBFlow 的使用

    原文首发于微信公众号:jzman-blog,欢迎关注交流! DBFlow 是一个基于注解处理器开发的使用方便的 ORM Android 数据库,该库简化了很多多余的代码,并且提供了好用的 API 来处 ...

  10. 关于dll劫持我的奇思妙想(一)

    0x00  前言 前段时间在研究着windows底层的一些东西,发现这个dll劫持一直没有做过,根据倾旋师傅的视频和文章做了一系列的研究,然后就突发来了兴致研究一些dll劫持提权. 0x01   了解 ...