1. 筹备工作
1.1 注册阿里云账号
应用淘宝账号或手机号,开明阿里云账号,并通过实名认证(能够用支付宝认证)
1.2 收费开明IoT物联网套件
产品官网 https://www.aliyun.com/product/iot
1.3 软件开发环境语言
- C#
- 工具 Visual Studio IDE
2. IoT平台云端开发
2.1 创立根底版产品
产品信息
音讯通信Topic
2.2 注册设施
获取设施身份三元组,ProductKey,DeviceName,DeviceSecret
3. 设施端开发
3.1 IoT平台接入password签名算法文件
签名规定参考 https://www.yuque.com/cloud-dev/iot-tech/mebm5g
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Security.Cryptography;namespace iotxsdkmqttnet { public class IotSignUtils { public static string sign(Dictionary<string, string> param, string deviceSecret, string signMethod) { string[] sortedKey = param.Keys.ToArray(); Array.Sort(sortedKey); StringBuilder builder = new StringBuilder(); foreach(var i in sortedKey){ builder.Append(i).Append(param[i]); } byte[] key = Encoding.UTF8.GetBytes(deviceSecret); byte[] signContent = Encoding.UTF8.GetBytes(builder.ToString()); //这里依据signMethod动静调整,本例子硬编码了: 'hmacmd5' var hmac = new HMACMD5(key); byte[] hashBytes = hmac.ComputeHash(signContent); StringBuilder signBuilder = new StringBuilder(); foreach (byte b in hashBytes) signBuilder.AppendFormat("{0:x2}", b); return signBuilder.ToString(); } }}
3.2 接入IoT平台C#版本的MQTT库
C#的mqtt库 https://www.nuget.org/packages/M2Mqtt/
3.3 设施端应用程序
using System;using System.Net;using System.Collections.Generic;using uPLibrary.Networking.M2Mqtt;using uPLibrary.Networking.M2Mqtt.Messages;using System.Text;using System.Linq;namespace iotMqttDemo { class MainClass { static string ProductKey = "******"; static string DeviceName = "******"; static string DeviceSecret = "******"; static string RegionId = "cn-shanghai"; static string PubTopic = "/" + ProductKey + "/" + DeviceName + "/update"; static string SubTopic = "/" + ProductKey + "/" + DeviceName + "/get"; public static void Main(string[] args) { IPHostEntry host = Dns.GetHostEntry(Dns.GetHostName()); string clientId = host.AddressList.FirstOrDefault( ip => ip.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork).ToString(); string t = Convert.ToString(DateTimeOffset.Now.ToUnixTimeMilliseconds()); string signmethod = "hmacmd5"; Dictionary<string, string> dict = new Dictionary<string, string>(); dict.Add("productKey", ProductKey); dict.Add("deviceName", DeviceName); dict.Add("clientId", clientId); dict.Add("timestamp", t); string mqttUserName = DeviceName + "&" + ProductKey; string mqttPassword = IotSignUtils.sign(dict, DeviceSecret, signmethod); string mqttClientId = clientId + "|securemode=3,signmethod="+signmethod+",timestamp=" + t + "|"; string targetServer = ProductKey + ".iot-as-mqtt." + RegionId + ".aliyuncs.com"; ConnectMqtt(targetServer, mqttClientId, mqttUserName, mqttPassword); } static void ConnectMqtt(string targetServer, string mqttClientId, string mqttUserName, string mqttPassword){ MqttClient client = new MqttClient(targetServer); client.ProtocolVersion = MqttProtocolVersion.Version_3_1_1; client.Connect(mqttClientId, mqttUserName, mqttPassword, false, 60); client.MqttMsgPublishReceived += Client_MqttMsgPublishReceived; //公布音讯 String content = "{'content':'msg from :" + mqttClientId + ", 这里是.NET设施'}"; var id = client.Publish(PubTopic, Encoding.ASCII.GetBytes(content)); //订阅音讯 client.Subscribe(new string[] { SubTopic }, new byte[] { 0 }); } static void Client_MqttMsgPublishReceived(object sender, MqttMsgPublishEventArgs e) { // handle message received string topic = e.Topic; string message = Encoding.ASCII.GetString(e.Message); } }}
4. 运行后果
云端看到设施上线记录,数据上报记录
至此,实现了.NET平台设施C#语言接入阿里云IoT物联网云平台的开发实际
物联网平台产品介绍详情:https://www.aliyun.com/product/iot/iot_instc_public_cn
阿里云物联网平台客户交换群