1. 准备工作
1.1 注册阿里云账号
使用淘宝账号或手机号,开通阿里云账号,并通过实名认证(可以用支付宝认证)
1.2 免费开通IoT物联网套件
产品官网/product/iot
1.3 软件开发环境
语言 C#工具 Visual Studio IDE
2. IoT平台云端开发
2.1 创建基础版产品
产品信息
消息通信Topic
2.2 注册设备
获取设备身份三元组,ProductKey,DeviceName,DeviceSecret
3. 设备端开发
3.1 IoT平台接入password签名算法文件
签名规则参考/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 = puteHash(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库/packages/M2Mqtt/
3.3 设备端应用程序
using System;using ;using System.Collections.Generic;using working.M2Mqtt;using working.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 == .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 + ".";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 receivedstring topic = e.Topic;string message = Encoding.ASCII.GetString(e.Message);}}}
4. 运行结果
云端看到设备上线记录,数据上报记录
至此,完成了.NET平台设备C#语言接入阿里云IoT物联网云平台的开发实践
物联网平台产品介绍详情:/product/iot/iot_instc_public_cn
阿里云物联网平台客户交流群