阿里云物联网 .NET Core 客户端 | CZGL.AliIoTClient:1. 连接阿里云物联网
1) 阿里云物联网
阿里云物联网支持多种通讯协议,CZGL.AliIoTClient
使用了 MQTT 通讯协议,通讯库为 M2MQTT
。
阿里云物联网数据传输有两种数据传输方式,分别是 透传
和 Alink json
,两种方式只在属性读/写、事件上报、服务调用这四种 Topic 上有差异, 其它连接通讯、普通 Topic、响应等,无差别。建议使用 Alink json 方式上传下发数据。
传输形式 | 本质 | 说明 |
---|---|---|
Alink json | json | 需按照阿里云物联网文档配置 json |
透传 | 二进制 | 在使用属性、事件和服务功能时,数据为二进制,有具体的传输位要求 |
CZGL.AliIoTClient 支持 Alink json 和 透传,SDK 中有两个客户端类,
类 | 说明 |
---|---|
AliIoTClientJson | 以Alink json为传输形式的客户端 |
AliIoTClientBinary: | 以二进制为传输形式的客户端 |
两者很大程度上是一致的,仅在属性事件服务方面的数据传输形式有差异。因此后面主要以 AliIoTClientJson 来说明。
2) 连接到阿里云IOT
2.1) 创建客户端
在创建客户端类时,需要传入 DeviceOptions
对象,需要预先在阿里云物联网控制台,复制设备的密钥等信息,填入到 DeviceOptions
中。
示例:
AliIoTClientJson client = new AliIoTClientJson(new DeviceOptions { ProductKey = "a1xrkGSkb5R", DeviceName = "mire", DeviceSecret = "CqGMkOBDiKJfrOWp1evLZC2O6fsMtEXw", RegionId = "cn-shanghai" });
2.2) 设置要订阅的 Topic
连接客户端前,应当设置需要订阅的普通 Topic 以及配置是否接收属性设置命令、服务调用和响应等 Topic 。
普通topic
设置要订阅的普通 Topic:
string[] topics = new string[] { ... , ... , ... };
要求填写 Topic 完整的长度的 URI ,可到控制台中查看。例如 "/a1xrkGSkb5R/dockertest/user/update/error"
如果你不想这么麻烦,可以使用
string[] topics = new string[] { client.CombineHeadTopic("get") };
只需输入 Topic 的 /user/
后面的内容即可,AliIoTClientJson.CombineHeadTopic() 会为你生成完整的 Topic 地址。
例如需要订阅 "/a1xrkGSkb5R/dockertest/user/update/error"
string[] topics = new string[] { client.CombineHeadTopic("update/error") };
除了普通的 Topic 外,还要设备上传各种数据、接收服务器的响应、服务器设置设备属性、服务器调用设备服务等,这些将在后面章节介绍。
3) 设置默认事件
你希望在收到消息时,程序需要做点什么?编写相应的方法,绑定到委托事件中,当条件符合时,这些方法将会被触发。
在本章,使用 CZGL.AliIoTClient 预设置的默认委托方法,后面章节将会详细说明如何自定义方法。
使用默认事件:
client.UseDefaultEventHandler();
4) 客户端连接
已经做好了连接前的配置工作,现在连接到阿里云物联网。
CZGL.AliIoTClient 中,有三个关于连接的方法:
方法 | 说明 |
---|---|
AliIoTClientJson.ConnectIoT(string[], byte[], ushort) | 连接到阿里云物联网服务器 |
AliIoTClientJson.ConnectIoTAsync(string[], byte[], ushort) | 使用异步方法连接到阿里云物联网服务器 |
AliIoTClientJson.ConnectIoTClose() | 关闭、释放客户端 |
5) 示例
在阿里云物联网控制台新建一个产品,再在此产品下新建一个设备,其它功能不需要添加。记录下新建设备的密钥等信息。
在 Visual Studio 中,新建一个 .NET Core 控制台应用,在 Nuget 中找到 CZGL.AliIoTClient 并添加。
控制台代码如下:
// 创建客户端 client = new AliIoTClientJson(new DeviceOptions { ProductKey = "a1xrkGSkb5R", DeviceName = "mire", DeviceSecret = "CqGMkOBDiKJfrOWp1evLZC2O6fsMtEXw", RegionId = "cn-shanghai" }); // 设置要订阅的Topic、运行接收内容的Topic string[] topics = new string[] { client.CombineHeadTopic("get") }; // 使用默认事件 client.UseDefaultEventHandler(); // 连接服务器 client.ConnectIoT(topics,null,60); Console.ReadKey();
打开阿里云物联网控制台,刷新设备列表,即可看到设备在线。
6) 下发数据
一个新建的产品,有几个默认的 Topic ,我们不必作其它修改,就目前来说,可以使用默认的 Topic 做示范。
运行上面已经编写好的控制台程序,不要关闭。
打开阿里云物联网控制台,打开相应的设备,在设备的 Topic列表 里面找到 .../user/get
这个 Topic,
例如: /a1xrkGSkb5R/dockertest/user/get
点击 发布消息
,然后输入要发送的内容,最后查看控制台是否收到下发的消息。
由于使用了 CZGL.AliIoTClient 中,默认的事件方法,因此除了消息内容,也会输出这条 Topic 消息的一些属性信息。
7) 上传数据
设备的 Topic 列表,有个 .../user/update
,例如 /a1xrkGSkb5R/dockertest/user/update
。
这个 Topic 允许客户端上传数据,下面将说明客户端如何上传数据到阿里云物联网服务器。
上传普通 Topic 的方法:
I. 上传 byte
public int CommonToServer(string topicName, byte[] content)
摘要:
此种方式以 byte[] 形式上传数据,注意 byte[] 的进制
参数:
topicName: Topic 的完整名称,可使用 CombineHeadTopic()
方法获取
content: 消息内容
返回结果: 消息 ID
II. 普通字符串
public int CommonToServer(string topicName, string content)
摘要:
普通方式推送 Topic 到服务器,直接上传字符串
返回结果: 消息 ID
III. 其它上传方法
还要其它几个方法,放到一起说明。
public int CommonToServer(string topicName, string content, [System.Text.Encoding encoding = null])
说明:上传数据到指定 Topic ,指定字符串的编码格式。阿里云物联网默认使用 UTF8。
CZGL.AliIoTClient 也默认使用 UTF8 作为数据的编码,可以自定义上传字符串的编码。 一般不需要改,不然中文字符串会乱码。
public int CommonToServerBase64(string topicName, string content)
说明:传入字符串后,会先进行 Base64 编码,然后再上传。
public int CommonToServerBase64(string topicName, string content, [System.Text.Encoding encoding = null])
说明:传入字符串后,指定字符串的编码,然后进行 Base64 编码后上传。
8) 创建Topic
你可以在阿里云物联网控制台打开某个产品,在产品里新建一个或多个 Topic ,设定这个 Topic 具有 订阅/发布 权限。
然后修改程序试试是否正常上传、下发数据。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
10件5G能实现但4G不能做的事情
雷锋网(公众号:雷锋网)按;2019年6月6日,工信部正式向中国电信、中国移动、中国联通、中国广电发放5G商用牌照,这表明中国正式进入了5G商用的阶段。一时间关于5G的讨论更加热烈,那么对于普通用户而言,5G相比4G到底有何不一样? 从三星Galaxy S10 5G手机到OnePlus 7 Pro 5G手机以及更高版本,首批5G手机现已上市。5G网络时代的开启是从小范围内,如果你居住在可以使用5G的地方,那么它可能值得尝试。 5G作为下一代移动技术,它不仅仅是速度更快,还将实现全新的应用,而这些应用是在4G时代不可能或者不实用的。 5G的一些最佳用途可能还没有被发现,但下面是我们已经知道的十个令人兴奋的用途。 华为将发布全球首款5G 8K电视. (图片来源:华为) 1. 8K流媒体视频 4K流媒体视频不是很多
- 下一篇
阿里云物联网 .NET Core 客户端 | CZGL.AliIoTClient:2. IoT 客户端
1) 客户端连接 CZGL.AliIoTClient 中,有两个连接到阿里云物联网服务器的方法: public CZGL.AliIoTClient.ConnectCode ConnectIoT(string[] SubTopic, [byte[] QOS = null], [ushort keepAlivePeriod = 60]) public System.Threading.Tasks.Task<CZGL.AliIoTClient.ConnectCode> ConnectIoTAsync(string[] topics, [byte[] QOS = null], [ushort keepAlivePeriod = 60]) 参数说明及返回值: 参数名称 类型 说明 SubTopic string[] 要订阅的 Topic 列表,只有先订阅这个 Topic ,才会接收到服务器推送这个 Topic QOS byte[] 每个Topic都配置一个QOS,如果为空,将会为每个Topic设置 QOS=0x00,注意QOS只有0,1,2三种,因此使用byte最合适 keepAli...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- CentOS6,CentOS7官方镜像安装Oracle11G
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- CentOS8安装Docker,最新的服务器搭配容器使用
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- 设置Eclipse缩进为4个空格,增强代码规范
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS8编译安装MySQL8.0.19