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

简介: 阿里云IOT对接设备开发C开发设备对接阿里云IOT平台

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


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


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

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


创建产品

微信图片_20220501182952.png

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

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

 

微信图片_20220501182957.png

设定一个产品

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

微信图片_20220501183004.png

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

名称为test1、test2微信图片_20220501183008.png

 

微信图片_20220501183012.png

 

 

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

微信图片_20220501183017.png


二,下载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、触发任务,先不管他

微信图片_20220501183331.png

 

四,开始写代码


在 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();

运行你的项目


五,运行测试


微信图片_20220501184112.gif

相关文章
|
3月前
|
XML 网络协议 物联网
基于surging的木舟IOT平台如何添加网络组件
【8月更文挑战第30天】在基于 Surging 的木舟 IOT 平台中添加网络组件需经历八个步骤:首先理解 Surging 及平台架构;其次明确组件需求,选择合适技术库;接着创建项目并配置;然后设计实现网络功能;再将组件集成至平台;接着进行详尽测试;最后根据反馈持续优化与维护。具体实施时应参照最新文档调整。
69 10
|
26天前
|
传感器 存储 物联网
在物联网(IoT)快速发展的今天,C语言作为物联网开发中的关键工具,以其高效、灵活、可移植的特点
在物联网(IoT)快速发展的今天,C语言作为物联网开发中的关键工具,以其高效、灵活、可移植的特点,广泛应用于嵌入式系统开发、通信协议实现及后端服务构建等领域,成为推动物联网技术进步的重要力量。
32 1
|
2月前
|
Rust 资源调度 安全
为什么使用 Rust over C++ 进行 IoT 解决方案开发
为什么使用 Rust over C++ 进行 IoT 解决方案开发
92 7
|
2月前
|
人工智能 安全 物联网
|
4月前
|
存储 分布式计算 物联网
Apache IoTDB进行IoT相关开发实践
当今社会,物联网技术的发展带来了许多繁琐的挑战,尤其是在数据库管理系统领域,比如实时整合海量数据、处理流中的事件以及处理数据的安全性。例如,应用于智能城市的基于物联网的交通传感器可以实时生成大量的交通数据。据估计,未来5年,物联网设备的数量将达数万亿。物联网产生大量的数据,包括流数据、时间序列数据、RFID数据、传感数据等。要有效地管理这些数据,就需要使用数据库。数据库在充分处理物联网数据方面扮演着非常重要的角色。因此,适当的数据库与适当的平台同等重要。由于物联网在世界上不同的环境中运行,选择合适的数据库变得非常重要。 原创文字,IoTDB 社区可进行使用与传播 一、什么是IoTDB 我
189 9
Apache IoTDB进行IoT相关开发实践
|
4月前
|
存储 监控 安全
使用IoT设备优化家庭生活的技术探索
【8月更文挑战第4天】IoT设备以其智能化、便捷性和高效性,正逐步成为现代家庭不可或缺的一部分。从智能照明到智能安防,从智能恒温器到智能厨房,再到智能语音助手,这些设备不仅优化了我们的家庭生活,还提升了我们的生活质量和幸福感。随着技术的不断进步和应用场景的不断拓展,我们有理由相信,未来的智能家居将会更加智能、更加人性化,为我们的生活带来更多惊喜和便利。
|
3月前
|
机器学习/深度学习 人工智能 算法
物联网(IoT)就像是一个大型派对,无数的设备都在欢快地交流着信息
【9月更文挑战第4天】在这个万物互联的时代,物联网(IoT)犹如一场盛大的派对,各类设备欢聚一堂。然而,如何让这些设备互相理解并协同工作呢?这就需要机器学习与人工智能的助力。例如,智能空调通过学习你的使用习惯来调节温度,使你更加舒适;智能安防系统则能识别异常行为并及时报警,保障家庭安全。此外,智能农业、交通等领域也因机器学习和人工智能的应用变得更加高效。下面通过一个简单的温度预测代码示例,展示机器学习在物联网中的实际应用,让我们一起感受其强大潜力。
69 0
|
5月前
|
存储 分布式计算 物联网
Apache IoTDB进行IoT相关开发实践
IoTDB是专为物联网(IoT)设计的开源时间序列数据库,提供数据收集、存储、管理和分析。它支持高效的数据写入、查询,适用于处理大规模物联网数据,包括流数据、时间序列等。IoTDB采用轻量级架构,可与Hadoop和Spark集成,支持多种存储策略,确保数据安全和高可用性。此外,它还具有InfluxDB协议适配器,允许无缝迁移和兼容InfluxDB的API和查询语法,简化物联网项目的数据管理。随着物联网设备数量的快速增长,选择适合的数据库如IoTDB对于数据管理和分析至关重要。
262 12
|
5月前
|
存储 分布式计算 物联网
Apache IoTDB进行IoT相关开发实践
The article introduces IoTDB, an open-source time-series database designed for efficient management of IoT-generated data. It addresses challenges like real-time integration of massive datasets and security. IoTDB supports high-performance storage,
152 0
Apache IoTDB进行IoT相关开发实践
|
4月前
|
存储 SQL JSON
【Azure IoT Hub】从设备端如何向IOT发送海量数据,可以使用从设备到IoT连接的直接传输吗?如何把IoT Hub中的数据存储到Azure Storage中?
【Azure IoT Hub】从设备端如何向IOT发送海量数据,可以使用从设备到IoT连接的直接传输吗?如何把IoT Hub中的数据存储到Azure Storage中?