.NET Core / C# 开发 IOT 嵌入式设备的个人见解

 

( .NET Core 七龙珠 )

一、IOT 平台的支持

先看国内优秀的云计算IOT平台(不含QQ互联、小米IOT等针对特定产品的开发者平台,仅列出部分云计算厂商的IOT平台)

阿里云 IOT

https://iot.aliyun.com/

华为物联网

https://developer.huawei.com/ict/cn/site-iot-next

腾讯云 物联网通讯

https://cloud.tencent.com/product/iothub

百度云 天工

https://cloud.baidu.com/solution/iot/index.html

中国移动 OneNET

https://open.iot.10086.cn

说到 IOT,要做开发,有多方面的,模式也不同:设备认证、设备接入、网关、设备管理、订阅、数据管理与分析、应用开发等。这里单纯说嵌入式设备的开发。

这几家平台中,仅有阿里云提供 C# 的设备端 SDK,并且不开源、不能跨平台 (只能在 .NET Framework 4.7下使用,别问我怎么知道),设备接入方式是 HTTP/2。对于 C#/.NET 友好度最高的应该就是阿里云了,腾讯云的 IOT 相对来说搞得不太像样。

提供的设备端接入和应用开发,以 C 语言和 Python 为主(C语言是嵌入式开发之王),通讯协议有 HTTPS、MQTT/MQTTS 等。

阿里云 IOT 设备端 SDK 文档

https://help.aliyun.com/document_detail/101488.html?spm=a2c4g.11186623.2.26.554a5b3eaMSYnh#concept-xlx-dzz-ggb

阿里云 IOT 云端 SDK 文档

https://help.aliyun.com/document_detail/63638.html?spm=a2c4g.11186623.6.678.1ede4c07i0qvHR

国外的话,就只列举 亚马逊云 和 Azure 云。

https://www.amazonaws.cn/iot/

https://www.azure.cn/zh-cn/

他们有中国区、国际区之分,其中微软的 Azure 中国区由世纪互联运营(很不舒服)。

 

 看图,说明亚马逊也不支持 C#,嵌入式仅 C 语言,其它方面也不支持 C#/.NET。

只有 Azure 大量、无保留地支持 .NET。

 二、嵌入式设备

物联网设备的设备端,不限于例如树莓派、手表、无人机、蓝牙之类的设备,包括手机、手表、电脑等都可以当作 IOT 设备端。

这里只讨论 ARM32/64 嵌入式开发板,举个栗子,树莓派、国产香橙派。

操作系统有 Win 10 IOT Core、Ubuntu、Debain 等。

要买就买树莓派,别买别的牌子,不然你得哭。

1 系统支持,

树莓派支持大量系统,并且系统内核较新,装 .NET Core SDK 和 Runtime,几乎一套直接安装完成。

国产香橙派呢,就是个坑货,系统内核较旧,GCC版本也低,驱动各种不兼容,系统也没几个能正常使用,而且发热量特大。

不久前我就买了 Orange PI 3,安装 .NET Core SDK 2.2,要先更换 apt 源,然后更新 apt 列表,装上新版本的 gcc (.NET Core 需要 gcc 大于 5.2以上,Debain 系统必须大于等于9 )。

(好想砸了这辣鸡板子,但是毕竟花了 300 大洋呢。。。)

2 是资源文档

树莓派流行度很高,很多软件都是支持树莓派的,与嵌入式有关的技术几乎都会提及树莓派,你不怕没有学习资料,不怕没有相应的传感器。

其它就不赘述了。

也只有内存较大、CPU较大的开发板可以使用 .NET 开发的程序,底层 C 语言才是王道,特么一个单片机得内存才那么几KB,光 ARM 版本的 .NET Core 就需要至少 300MB 的内存。

三、目前笔者了解到的 .NET 开发嵌入式应用方式

1,使用 C/C++生成的动态链接库

笔者文章 -- 跨平台开发 -- C# 使用 C/C++ 生成的动态链接库

https://www.cnblogs.com/whuanle/p/10582654.html

通过使用 C/C++ 封装的接口,控制 GPIO (就是板子的那些针脚) 等,这一方式只能在Linux下使用。开发C#程序不需要直接跟底层打交道,通过预留的 C/C++ 接口,间接操控。C/C++ 写好各类通讯协议、逻辑处理、电路控制等,与硬件打交道,封装好 .SO 库,给 C# 使用。这样开发项目时无需关心底层实现,专注于业务开发。

笔者有篇文章 .NET Core 跨平台 串口通讯 ,用到 SerialPortStream 库,这个库可以在 Windows/Linux 下使用,如果要在 Linux 下使用,必须先把官方用 C 写的项目编译、生成动态链接库放到项目里再运行,底层使用 C语言,实现与通讯方式无关的应用开发。

2,使用 Windows 10 IoT Core

就是说使用 Windows 10 IoT Core 系统,在此系统上进行开发。

好处:

  太子殿下

先来几个图

 

 

 

一套 C# 就可以搞好各方面的开发,官方直接提供类库操作设备的各种接口、针脚,你无需掌握大量的硬件知识即可快速上手项目,直接使用 C#/.NET 与各种传感器交互,Visual Studio 宇宙第一 IDE 的开发支持,对接优秀的云计算平台 Azure、优秀的生态支持、可以使用传统Wpf等软件界面、维护方便、可视化... ...
以往使用开发板需要掌握开发嵌入式设备,WIFI、蓝牙、GPIO、网卡、ARM32/64、电路等协议、硬件知识,使用C语言开发底层,现在使用 C# 就能一套搞定。

3,mono

笔者在学习使用开发板时,发现有些库可以在 mono 上使用,使用 Monodevelop 可以开发 C# 项目,管控 GPIO,笔者对 mono 不了解,没有去实际实现。

 

.NET Core 实现嵌入式开发,就笔者目前的菜水平来说,没发现 .NET Core 开发嵌入式软件的优势。

其一,.NET Core (目前 最新 ARM 2.2.105) 不能直接使用传感器。这个可能是笔者水平不够,暂时没有发现有在 Linux 下使用 .NET Core 控制传感器、使用 GPIO 等的实例。

当然,有在Windows 10 IOT Core 上开发 .NET Core 项目使用  GPIO 的实例,不过是使用 Windows.Devices.Gpio ,并且不是在 Linux下。

其二,没几个云计算厂商支持 .NET ,这里的支持,是指在设备中支持 .NET 开发接入 IOT 平台,像树莓派这样功能完整、硬件配置齐全的设备可以直接连接服务器,其它一些不具备网卡、CPU和内存非常小的设备,只能使用C语言开发、只能通过网关接入IOT平台。就算设备接入底层搞好了,要接入IOT平台,要有API、SDK、文档呀,.NET 的资料真的非常非常少。

个人感觉 .NET Core 在云计算、Docker、网站开发等方面发展的很好,嵌入式方面不太行。当然这个只是个人感觉。。。

如果使用 Windows IOT Core 的话,是 .NET Core 还是 .NET Framework 都不重要了。

期待 .NET Core  3 正式版的发布。

 

 

- - - - - - - -

以上内容仅为个人理解,笔者现在是大三学生,经验不足,以上内容有错误或者观点不对,恳请各位大神指点一二。

要是说错了,别笑我哇。。。

- - - - - - - -

目前正在 深圳市敢为软件技术有限公司 实习,公司从事

物联网技术的研发;云计算技术的研发;

大数据技术的技术开发;区块链技术的技术开发;

人工智能技术的技术开发;计算机软件的技术开发;

计算机软件系统集成;数据处理;信息技术咨询;

信息技术开发;计算机软硬件、网络技术的研发等。

现在公司需要大量 .NET Core 的小伙伴,感兴趣的的同学赶紧加我吧~可以内推噢~~~

微信 whuanlex

 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


在上文中,我介绍了事件驱动型架构的一种简单的实现,并演示了一个完整的事件派发、订阅和处理的流程。这种实现太简单了,百十行代码就展示了一个基本工作原理。然而,要将这样的解决方案运用到实际生产环境,还有很长的路要走。今天,我们就研究一下在事件处理器中,对象生命周期的管理问题。事实上,不仅仅是在事件处理器
上文已经介绍了Identity Service的实现过程。今天我们继续,实现一个简单的Weather API和一个基于Ocelot的API网关。 回顾 《Angular SPA基于Ocelot API网关与IdentityServer4的身份认证与授权(一)》 Weather API Weather
最近我为我自己的应用开发框架Apworks设计了一套案例应用程序,并以Apache 2.0开源,开源地址是:https://github.com/daxnet/apworks-examples,目的是为了让大家更为方便地学习和使用.NET Core、最新的前端开发框架Angular,以及Apwork
HAL(Hypertext Application Language,超文本应用语言)是一种RESTful API的数据格式风格,为RESTful API的设计提供了接口规范,同时也降低了客户端与服务端接口的耦合度。很多当今流行的RESTful API开发框架,包括Spring REST,也都默认支
在前面两篇文章中,我详细介绍了基本事件系统的实现,包括事件派发和订阅、通过事件处理器执行上下文来解决对象生命周期问题,以及一个基于RabbitMQ的事件总线的实现。接下来对于事件驱动型架构的讨论,就需要结合一个实际的架构案例来进行分析。在领域驱动设计的讨论范畴,CQRS架构本身就是事件驱动的,因此,
HAL,全称为Hypertext Application Language,它是一种简单的数据格式,它能以一种简单、统一的形式,在API中引入超链接特性,使得API的可发现性(discoverable)更强,并具有自描述的特点。使用了HAL的API会更容易地被第三方开源库所调用,并且使用起来也很方便
何时使用领域驱动设计?其实当你的应用程序架构设计是面向业务的时候,你已经开始使用领域驱动设计了。领域驱动设计既不是架构风格(Architecture Style),也不是架构模式(Architecture Pattern),它也不是一种软件开发方法论,所以,是否应该使用领域驱动设计,以及什么时候使用
《在ASP.NET Core中使用Apworks快速开发数据服务》一文中,我介绍了如何使用Apworks框架的数据服务来快速构建用于查询和管理数据模型的RESTful API,通过该文的介绍,你会看到,使用Apworks框架开发数据服务是何等简单快捷,提供的功能也非常多,比如对Hypermedia的
在上一讲中,我们已经完成了一个完整的案例,在这个案例中,我们可以通过Angular单页面应用(SPA)进行登录,然后通过后端的Ocelot API网关整合IdentityServer4完成身份认证。在本讲中,我们会讨论在当前这种架构的应用程序中,如何完成用户授权。 回顾 《Angular SPA基于
Keycloak是一个功能强大的开源身份和访问管理系统,提供了一整套解决方案,包括用户认证、单点登录(SSO)、身份联合、用户注册、用户管理、角色映射、多因素认证和访问控制等。它广泛应用于企业和云服务,可以简化和统一不同应用程序和服务的安全管理,支持自托管或云部署,适用于需要安全、灵活且易于扩展的用
3月7日,微软发布了Visual Studio 2017 RTM,与之一起发布的还有.NET Core Runtime 1.1.0以及.NET Core SDK 1.0.0,尽管这些并不是最新版,但也已经从preview版本升级到了正式版。所以,在安装Visual Studio 2017时如果启用了
在上文中,我介绍了如何在Ocelot中使用自定义的中间件来修改下游服务的response body。今天,我们再扩展一下设计,让我们自己设计的中间件变得更为通用,使其能够应用在不同的Route上。比如,我们可以设计一个通用的替换response body的中间件,然后将其应用在多个Route上。 O
不少关注我博客的朋友都知道我在2009年左右开发过一个名为Apworks的企业级应用程序开发框架,旨在为分布式企业系统软件开发提供面向领域驱动(DDD)的框架级别的解决方案,并对多种系统架构风格提供支持。这个框架的开发和维护我坚持了很久,一直到2015年,我都一直在不停地重构这个项目。目前这个项目在
好吧,这个题目我也想了很久,不知道如何用最简单的几个字来概括这篇文章,原本打算取名《Angular单页面应用基于Ocelot API网关与IdentityServer4ʺSP.NET Identity实现身份认证与授权》,然而如你所见,这样的名字实在是太长了。所以,我不得不缩写“单页面应用”几个字
在前面两篇文章中,我介绍了基于IdentityServer4的一个Identity Service的实现,并且实现了一个Weather API和基于Ocelot的API网关,然后实现了通过Ocelot API网关整合Identity Service做身份认证的API请求。今天,我们进入前端开发,设计
Ocelot是ASP.NET Core下的API网关的一种实现,在微服务架构领域发挥了非常重要的作用。本文不会从整个微服务架构的角度来介绍Ocelot,而是介绍一下最近在学习过程中遇到的一个问题,以及如何使用中间件(Middleware)来解决这样的问题。 问题描述 在上文中,我介绍了一种在Angu
在大数据处理和人工智能时代,数据工厂(Data Factory)无疑是一个非常重要的大数据处理平台。市面上也有成熟的相关产品,比如Azure Data Factory,不仅功能强大,而且依托微软的云计算平台Azure,为大数据处理提供了强大的计算能力,让大数据处理变得更为稳定高效。由于工作中我的项目
在上文中,我们讨论了事件处理器中对象生命周期的问题,在进入新的讨论之前,首先让我们总结一下,我们已经实现了哪些内容。下面的类图描述了我们已经实现的组件及其之间的关系,貌似系统已经变得越来越复杂了。其中绿色的部分就是上文中新实现的部分,包括一个简单的Event Store,一个事件处理器执行上下文的接
在之前《在ASP.NET Core中使用Apworks快速开发数据服务》一文的评论部分,.NET大神张善友为我提了个建议,可以使用Compile As a Service的Roslyn为语法解析提供支持。在此非常感激友哥给我的建议,也让我了解了一些Roslyn的知识。使用Roslyn的一个很大的好处
很长一段时间以来,我都在思考如何在ASP.NET Core的框架下,实现一套完整的事件驱动型架构。这个问题看上去有点大,其实主要目标是为了实现一个基于ASP.NET Core的微服务,它能够非常简单地订阅来自于某个渠道的事件消息,并对接收到的消息进行处理,于此同时,它还能够向该渠道发送事件消息,以便