阿里云 IOT 对接设备开发 C# 开发设备对接阿里云 IOT平台
一,创建阿里云 IOT 产品、设备
目前阿里云每月赠送 100 万条流量,可以免费使用基础版、高级版,开通后即可免费使用。
阿里云 IOT 平台地址 https://iot.console.aliyun.com/product
登陆开通后,新建测试产品、设备。
创建产品
产品的定义是,一类硬件、功能、外形完全相同的设备。所以,添加一个产品后,我们就可以在此类别下添加成千上万个设备。
下面的信息要选、设备、非网关,原因后面说。
设定一个产品
创建一个产品后,就需要设定这个产品的特征,它有那些功能?它可以进行什么样的通讯?
定义两个topic,一个发布、一个订阅
名称为test1、test2
添加一个设备,记下你设备的那些设备名等信息
二,下载SDK、创建项目
新建一个 .NET Frameork4 控制台项目,名称 AlyIotIest
添加引用,把下载的 dll 添加进去
新建一个类 BackMessage.cs
把以下代码复制进 BackMessage(清空以前的代码),先不用管为什么
using iotxashttp2netsdk.iot.auth.common;
using iotxashttp2netsdk.iot.callback;
using System;
using System.Collections.Generic;
using System.Text; namespace AlyIotIest
{
public class 默认回调 : IHttp2MessageCallback
{
public ConsumeAction Consume(Http2ConsumeMessage http2ConsumeMessage)
{ Console.WriteLine("默认回调");
Console.WriteLine(http2ConsumeMessage.MessageId);
if (http2ConsumeMessage.Payload.Length != )
{
Console.WriteLine("收到平台消息:"); string a = Encoding.ASCII.GetString(http2ConsumeMessage.Payload); Console.WriteLine(a);
} return ConsumeAction.CommitSuccess;
}
}
public class 自定义回调 : IHttp2MessageCallback
{
public ConsumeAction Consume(Http2ConsumeMessage http2ConsumeMessage)
{ Console.WriteLine("自定义回调 ");
Console.WriteLine(http2ConsumeMessage.MessageId);
if (http2ConsumeMessage.Payload.Length != )
{
Console.WriteLine("收到平台消息:"); string a = Encoding.ASCII.GetString(http2ConsumeMessage.Payload); Console.WriteLine(a);
}
return ConsumeAction.CommitSuccess;
}
}
}
三,开始操作、准备工作
1,Program.cs 需要用到以下命名空间
using System;
using iotxashttp2netsdk.iot.auth.common;
using iotxashttp2netsdk.iot.message;
using System.Net;
using System.Linq;
using System.Text;
2,设定一个设备客户端对象
复制 static MessageClient client; 到Program类钟
class Program
{
// 步骤 1 定义设备客户端 #
static MessageClient client;
...
...
}
MessageClient 是核心,用于连接服务器、通讯、订阅和发布Topic、触发任务,先不管他
四,开始写代码
在 Main 方法中写代码
步骤 2,添加密钥信息,在相应位置填上你的密钥
// 步骤 2 从控制台获取 productKey、deviceName、deviceSecret 信息 #
// 到阿里云IOT物联网后台设置产品、添加设备后,可以找到
string productKey = " ";
string deviceName = " i";
string deviceSecret = " ";
步骤 3
// 步骤 3 标记 设定设备唯一识别符 clientid
// 阿里云官方给的例子是 子网IP
IPHostEntry host = Dns.GetHostEntry(Dns.GetHostName());
// 客户端设备唯一标记
string clientId = host.AddressList.FirstOrDefault(
ip => ip.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork).ToString();
// 地域可用区 ,根据实际修改
string regionId = "cn-shanghai";
string domain = ".aliyuncs.com";
string endpoint = "https://" + productKey + ".iot-as-http2." + regionId + domain;
步骤 4
//设置配置服务和构建客户端
//连接服务配置项
Profile profile = new Profile();
profile.ProductKey = productKey;
profile.DeviceName = deviceName;
profile.DeviceSecret = deviceSecret;
profile.Url = endpoint;
profile.ClientId = clientId;
//删除堆积消息
profile.CleanSession = true;
//qos>0消息,SDK发生异常时可以设置重,重试次数最大为3次
profile.RetryPubCount = ;
//重试间隔时间单位为s(秒)
profile.RetryIntervalTime = ;
profile.GetDeviceAuthParams(); //构造客户端
client = new MessageClient(profile);
步骤 5
// 设置订阅和发布的 topic
string topic = "/" + productKey + "/" + deviceName + "/user/test1";
string topic2 = "/" + productKey + "/" + deviceName + "/user/test2";
// 接收数据,刚连接时
// 只生效一次
// 默认回调
client.DoConnection(new 默认回调()); //回调
// 自定义一个 IHttp2MessageCallback,每次收到消息都用此回调
client.SetMessageListener(topic2,new 自定义回调()); client.DoSubscribe((string)topic ,msg=> { Console.WriteLine ("订阅服务端消息");
Console.WriteLine("msg.Code" + msg.Code);
Console.WriteLine("topic:" + msg.Message.Topic);
Console.WriteLine("msg.Message");
Console.WriteLine("body: " + Encoding.ASCII.GetString(msg.Body));
Console.WriteLine(msg.Message.MessageId);
});
client.DoSubscribe((string)topic2, msg=>
{
Console.WriteLine("订阅服务端消息");
Console.WriteLine("msg.Code" + msg.Code);
Console.WriteLine("topic:" + msg.Message.Topic);
Console.WriteLine("msg.Message");
Console.WriteLine("body: " + Encoding.ASCII.GetString(msg.Body));
Console.WriteLine(msg.Message.MessageId);
});
步骤 6
添加一个方法
public static void 发数据(string topic,string str)
{
//发消息
Message message = new Message();
message.Payload = Encoding.ASCII.GetBytes(str);
message.Qos = ;
client.DoPublish(topic, message, msg =>
{
Console.WriteLine("publish topic message, messageId: " + msg.Message.MessageId
+ "|| topic:" + msg.Message.Topic
+ "|| code: " + msg.Code
+ "|| body: " + Encoding.ASCII.GetString(msg.Body));
});
}
在 Main 方法内,后面加上
while (true)
{
Console.WriteLine("输入数据");
string str = Console.ReadLine();
if (str.ToUpper() == "EXIT")
{
break;
}
发数据("/" + productKey + "/" + deviceName +"/user/test1", str);
} Console.ReadKey();
运行你的项目
五,运行测试
阿里云 IOT 对接设备开发 C# 开发设备对接阿里云 IOT平台的更多相关文章
- 【山外笔记-云原生】《Docker+Kubernetes应用开发与快速上云》读书笔记-2020.04.25(六)
书名:Docker+Kubernetes应用开发与快速上云 作者:李文强 出版社:机械工业出版社 出版时间:2020-01 ISBN:9787111643012 [山外笔记-云原生]<Docke ...
- 腾讯云OCR服务二次开发
本文记录了对腾讯云OCR服务二次开发的代码和开发过程中遇到的问题.
- .NET Core 跨平台物联网开发:连接阿里云IOT(一)
系列教程目录 (一) 连接阿里云IOT (二) 设置委托事件 (三) 上报属性 (四) SDK文档 属性.方法.委托.类 http://pan.whuanle.cn/index.php?dir=up ...
- 阿里云ACE下的PHP开发环境搭建
阿里云ACE下的PHP开发环境搭建 本系列文章由ex_net(张建波)编写.转载请注明出处. http://blog.csdn.net/ex_net/article/details/23999053 ...
- Android开发SDK接入机智云,智能家居实现APP远程控制多设备
代码地址如下:http://www.demodashi.com/demo/12847.html 一.前言. 此框架只用了一周星期做了出来,因为对机智云的框架比较熟悉了 !期间SDK初始化出了问题,去咨 ...
- 国内物联网平台(7):Ablecloud物联网自助开发和大数据云平台
国内物联网平台(7)——Ablecloud物联网自助开发和大数据云平台 马智 平台定位 面向IoT硬件厂商,提供设备联网与管理.远程查看控制.定制化云端功能开发.海量硬件数据存储与分析等基础设施,加速 ...
- 国内物联网平台初探(七) ——Ablecloud物联网自助开发和大数据云平台
平台定位 面向IoT硬件厂商,提供设备联网与管理.远程查看控制.定制化云端功能开发.海量硬件数据存储与分析等基础设施,加速硬件实现联网智能化. 架构 服务 云端服务一体化开发引擎 业内独创一体化开发引 ...
- 拥抱云原生 2.0 时代,Tapdata 入选阿里云首期云原生加速器!
3月9日,阿里云首期云原生加速器官宣,Tapdata 突出重围,成功入选31 强,将与多家行业知名企业,携手阿里云共建云原生行业新生态,加速拥抱云原生新时代的无限潜能. 2021年,阿里云正式 ...
- 基于 Angularjs&Node.js 云编辑器架构设计及开发实践
基于 Angularjs&Node.js 云编辑器架构设计及开发实践 一.产品背景 二.总体架构 1. 前端架构 a.前端层次 b.核心基础模块设计 c.业务模块设计 2. Node.js端设 ...
随机推荐
- Log4j的邮件发送类SMTPAppender改造
在开发过程中,我们有时需要将重要的错误日志通过邮件发送给相关的责任人,这样能即时发现错误,即时解决.如使用Log4J,一般会做如下配置: log4j.rootLogger = debug,mail # ...
- 开源方案搭建可离线的精美矢量切片地图服务-7.Arcgis Pro企业级应用
1.前言 上篇讲.pbf字体库的时候说到我们使用的字体通过Arcgis Pro 生成,Arcgis Pro样式基于Mapbox做的矢量切片地图渲染.这篇主要讲一下Arcgis Pro矢量切片生成的的具 ...
- postman学习笔记(二)
昨天刚操作了一遍最简单的接口测试,今天就收到了俩json文件,一个是postman里导出的接口列表一个是环境变量.拿到的时候一脸懵逼,昨天还以为学会用postman测试接口了,今天才发现哪儿到哪儿呀. ...
- 邂逅jQuery
jQuery是一个流行的JavaScript库,提供了HTML操作,CSS操作,事件,动画,Ajax和常用插件,极大地简化了JavaScript的开发. 可以从jquery.com下载jQuery库, ...
- [游记] HEOI2018酱油记
Day -1 在机房颓颓颓颓颓,晚上得知这次考试题本来是要给 ZJOI2018 用的,结果没用上..可想而知考试的难度.. 但愿不爆零 Day 0 坐了一上午火车,顺便找茁神犇拷了个 COD,然后接着 ...
- 并发编程之 SynchronousQueue 核心源码分析
前言 SynchronousQueue 是一个普通用户不怎么常用的队列,通常在创建无界线程池(Executors.newCachedThreadPool())的时候使用,也就是那个非常危险的线程池 ^ ...
- C#基础知识回顾--串行化与反串行化
串行化是指存储和获取磁盘文件.内存或其他地方中的对象.在串行化时,所有的实例数据都保存到存储介质上, 在取消串行化时,对象会被还原,且不能与其原实例区别开来.只需给类添加Serializable属性, ...
- [javaSE] 看知乎学习反射
简单的来说,反射机制指的是程序在运行时能够获取自身的信息.在java中,只要给定类的名字,那么就可以通过反射机制来获得类的所有信息. 知乎:学习java应该如何理解反射? 余晖: 反射提供了一种运 ...
- [转载]常用 SQL Server 规范集锦
转载者注:据说是某公司(携程)内部规范. 常见的字段类型选择 1.字符类型建议采用varchar/nvarchar数据类型 2.金额货币建议采用money数据类型 3.科学计数建议采用numeric数 ...
- Collection集合的带All功能的测试
public class Demo4_CollectionAll { public static void main(String[] args) { // Demo1(); // Demo2(); ...