服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C# - C#对接阿里云IOT平台进行设备开发

C#对接阿里云IOT平台进行设备开发

2022-12-20 14:54痴者工良 C#

这篇文章介绍了C#对接阿里云IOT平台进行设备开发,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

一,创建阿里云 IOT 产品、设备

目前阿里云每月赠送 100 万条流量,可以免费使用基础版、高级版,开通后即可免费使用。

阿里云 IOT 平台地址https://iot.console.aliyun.com/product

登陆开通后,新建测试产品、设备。

创建产品

C#对接阿里云IOT平台进行设备开发

产品的定义是,一类硬件、功能、外形完全相同的设备。所以,添加一个产品后,我们就可以在此类别下添加成千上万个设备。

下面的信息要选、设备、非网关,原因后面说。

C#对接阿里云IOT平台进行设备开发

设定一个产品

创建一个产品后,就需要设定这个产品的特征,它有那些功能?它可以进行什么样的通讯?

C#对接阿里云IOT平台进行设备开发

定义两个topic,一个发布、一个订阅

名称为test1、test2C#对接阿里云IOT平台进行设备开发

C#对接阿里云IOT平台进行设备开发

添加一个设备,记下你设备的那些设备名等信息

C#对接阿里云IOT平台进行设备开发

 

二,下载SDK、创建项目

SDK 下载 地址https://iot-demos.oss-cn-shanghai.aliyuncs.com/h2/iotx-as-http2-net-sdk.dll?spm=a2c4g.11186623.2.10.57e64c07SGupEH&file=iotx-as-http2-net-sdk.dll

新建一个 .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 != 0)
          {
              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 != 0)
          {
              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、触发任务,先不管他

C#对接阿里云IOT平台进行设备开发

 

四,开始写代码

在 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 = 3;
          //重试间隔时间单位为s(秒)
          profile.RetryIntervalTime = 2;
          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 = 1;
          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();

运行你的项目

 

五,运行测试

C#对接阿里云IOT平台进行设备开发

到此这篇关于C#对接阿里云IOT平台进行设备开发的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持服务器之家。

原文链接:https://www.cnblogs.com/whuanle/p/10573789.html

延伸 · 阅读

精彩推荐
  • C#利用C#编写扫雷游戏(附源码)

    利用C#编写扫雷游戏(附源码)

    扫雷游戏相信不用给大家过多介绍,大家基本都玩过,下面这篇文章主要给大家介绍了关于如何利用C#编写扫雷游戏的相关资料,文中通过示例代码介绍的...

    江湖逍遥6522022-03-07
  • C#C#设计模式之Singleton模式

    C#设计模式之Singleton模式

    这篇文章主要介绍了C#设计模式中的Singleton模式相关知识,文中代码非常详细,供大家理解学习,感兴趣的朋友可以了解下...

    老胡写代码3972022-09-14
  • C#C# AutoMapper 使用方法总结

    C# AutoMapper 使用方法总结

    这篇文章主要介绍了C# AutoMapper 使用方法,文中讲解非常细致,代码帮助大家更好的理解学习,感兴趣的朋友可以了解下...

    丹枫无迹7772022-09-14
  • C#浅谈C#中HttpWebRequest与HttpWebResponse的使用方法

    浅谈C#中HttpWebRequest与HttpWebResponse的使用方法

    本篇文章主要介绍了浅谈C#中HttpWebRequest与HttpWebResponse的使用方法,具有一定的参考价值,有兴趣的可以了解一下。...

    方倍工作室7712021-12-16
  • C#C#遍历文件夹及其子目录的完整实现方法

    C#遍历文件夹及其子目录的完整实现方法

    这篇文章主要介绍了C#遍历文件夹及其子目录的方法,涉及C#文件与目录的基本操作技巧,简单实用,具有一定参考借鉴价值,需要的朋友可以参考下...

    Eversnow6142021-11-29
  • C#WPF字体或内容模糊的解决方法

    WPF字体或内容模糊的解决方法

    WPF下开发的程序字体模糊,这个问题或许大家都有遇到过,为了解决WPF字体模糊,查阅了各种资料,结果偶然发现是自己疏忽了一些细节造成的,具体是什...

    王旭9772021-12-13
  • C#C# TcpClient网络编程传输文件的示例

    C# TcpClient网络编程传输文件的示例

    这篇文章主要介绍了C# TcpClient网络编程传输文件的示例,帮助大家更好的理解和学习使用c#,感兴趣的朋友可以了解下...

    空白凌乱感6462022-11-14
  • C#C#使用Process类调用外部exe程序

    C#使用Process类调用外部exe程序

    本文通过两个示例讲解了一下Process类调用外部应用程序的基本用法,并简单讲解了StartInfo属性,有需要的朋友可以参考一下。...

    一恋乘魔5402021-11-17