【小宅按】 .Net平台通过原生MQTT接口,作为南向设备对接OceanConnect平台
因为种种历史原因吧,目前华为平台上对.net的支持案例SDK确实比较少,当看到各种语言的SDK和Demo,唯独缺.net平台的,广大.net开发者也会怀疑.net是不是真的不适合IoT,甚至是互联网。
我的分析是
1、微软从.Net Framework开始所谓的跨平台,仅仅局限在Windows个版本的平台,对其他系统并不支持
2、微软多年以来给人的感觉是闭源,和Linux是死对头,在华为2019HC大会上和一位鲲鹏的工程师聊天也佐证了这一点,他们2019年了还依然对微软是这种认识
一提到开源,一提到互联网、分布式,.net就被轻视,这种态度很常见。
但是,我说的是但是,广大的.neter为什么选择.net平台的,为何mono这么多年都对.net跨平台不懈努力?为什么visual studio被称为宇宙第一的IDE?
那就是生产力。
以前的种种都成为历史了,自从.net core被提出,微软已经是一个亲Linux的代表了,跨平台、高性能已经是核心基础 。且不提Windows IoT, .net core在Linux,Arm上已经非常成熟了,树莓派们的小设备都能轻松玩转。
作为平台也好,工具也好就是为了提高生产力的。再来看看.net对接华为IoT平台,我现在从之前羡慕C/C++,Java,PHP等,在华为的帮助文档中都提供了南向设备的SDK,北向接口的SDK。我也一度怀疑华为为何不提供.net的SDK?没有SDK的帮助,对接将是比其他语言更要复杂,困难要一点点的肯。我也尝试在.net里用[DllImport]特性用c的sdk。
到现在,其实我可以负责任的告诉大家,.net根本不需要华为提供SDK,SDK本身对接口封装后就有不少限制,.net就利用公开的原始接口开发,非常简单和便捷,而且应用起来也灵活。这就是.net的强大生产力,而且.net framework(也可对接桌面程序)和.net core都可以实现。
1、北向接口对接
因为工作关系,对北向接口比较熟悉,华为提供的是restful的接口,和语言无关,实现起来轻车熟路。当时遇到一个困难就是用错了证书密码,现在回头看帮助文档中也说明了用哪个证书和密码,我也专门写过一个帖子来说明北向接口对接。
2、南向设备对接
南向设备比较复杂,对我来说确实是陌生的领域,小熊派这种MCU的板子恐怕只能有C来搞了,借助LiteOS+IoT Studio 也可以胜任。在我的计划中类似小熊派这样的设备甚至是定制更轻巧的,是物联网的常用终端类型。但还有些场景需要配合更丰富的应用,C恐怕做不到(起码需要带个界面啥的我做不到),或者说做到成本太高,在类似树莓派的独立设备,甚至是在Windows电脑上外接其他设备的场景,.net正是用武之地。
.Net core + Mqttnet 作为南向设备对接华为IoT平台
开发工具:Visual Studio 2019,.Net core 2.2和.net framework 4.7.2
Nuget包:MQTTnet 版本v3.0.8
核心内容三个事件
连接Mqtt服务器:
mqttClient.ConnectAsync(options);
订阅服务器Topic
var result = await mqttClient.Subscribe