.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 的小伙伴,感兴趣的的同学赶紧加我吧~可以内推噢~~~

微信 whuanlex

原文地址:https://www.cnblogs.com/whuanle/p/10589496.html

时间: 2024-08-02 19:03:31

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

iTOP-4412开发板-嵌入式平台开机测试

iTOP-4412平台硬件的连接1.核心板和底板的连接 迅为iTOP-4412开发板采用工业级进口板对板连接器,拔插方便稳定可靠,如下图所示. 另外迅为独家提供两种封装的核心板,接口定义完全兼容,如下图所示. iTOP-4412开发平台,核心板和底板可分离.拆分核心板的时候,使用塑料的薄片在核心和底板任意一边轻轻撬动,听到清脆的响声,表明撬动的一边的连接器已经分离,接着依次分离其它三边. 安装核心板的时候,核心板和底板的箭头要指向同一方向,将核心板和底板对齐,然后按压核心板,听到四次清脆的响声,

【嵌入式开发】 嵌入式开发工具简介 (裸板调试示例 | 交叉工具链 | Makefile | 链接器脚本 | eclipse JLink 调试环境)

作者 : 韩曙亮 博客地址 : http://blog.csdn.net/shulianghan/article/details/42239705  参考博客 : [嵌入式开发]嵌入式 开发环境 (远程登录 | 文件共享 | NFS TFTP 服务器 | 串口连接 | Win8.1 + RedHat Enterprise 6.3 + Vmware11) 开发环境 : -- 操作系统 : Vmware11 + RedHat6.3 企业版 + Win8.1; -- 硬件 : OK-6410-A 开发

驱动开发--【字符设备、块设备简介】【sky原创】

驱动开发   字符设备,块设备,网络设备 字符设备 以字节流的方式访问, 不能随机访问 有例外,显卡.EEPROM可以随机访问 EEPROM可以擦写1亿次,是一种字符设备,可以随机访问 读写是直接访问硬件的 flash 擦写次数有限,一百万次,容易有坏块 块设备 能随机访问 以”块“为单位进行访问 块大小一般为512字节 块的大小由硬件决定 是内核进行数据传输的基本单位 硬盘结构: 格式化分区是以柱面为单位的,即硬盘的柱面 如果有10个盘面,就有十个柱面 对于嵌入式设备 如果是flash的话,结

迅为震撼推出iTOP-4412精英版|Cortex-A9开发板|ARM开发板|嵌入式开发板

最强四核Cortex-A9开发板迅为iTOP-4412精英版震撼推出,仅售560元 业内公认最强四核 藐视一切挑战 ●四核CPU  ●四核GPU  ●双通道内存  ●HKMG技术  ●超级性能  ●至佳稳定  ●供货周期长 Exynos 4412处理器成功应用于三星GALAXY S3,联想K860,魅族MX2等热门产品当中,并取得巨大成功.出色的功耗控制以及超强的性能一直为业内称道, 超过5000万片的出货量,足以证明其稳定性与可用性.已成为三星官方重点推广的处理器之一,并承诺长期供货. 超强的

嵌入式设备的网络性能该如何分析

最近对公司的嵌入式设备做了一个网络性能测试,如何确定网络性能的瓶颈在哪里,以及网络性能影响因素有哪些,有些心得记录在此. 一般评判网络性能都是看数据下载上传的速度.现在主流的带宽有2种,100Mbps和1000Mbps,2者理论上可以达到的下载最大速度分别为12.5MB/s和125MB/s. 设备的网络性能如何,影响因素很多,受所在局域网网络状况,对端设备性能影响很大,而且不同的应用程序测试速度也会有所不同. 那么该如何来分析设备的性能瓶颈? 对于嵌入式设备,测试网络性能一般是看从局域网内的PC

【分享】4412开发板-嵌入式Linux开发需要掌握的基础知识和技能

本文转自迅为电子论坛:http://www.topeetboard.com 1.Linux 基础 安装Linux操作系统 Linux文件系统 Linux常用命令 Linux启动过程详解 熟悉Linux服务能够独立安装Linux操作系统 能够熟练使用Linux系统的基本命令 认识Linux系统的常用服务安装Linux操作系统 Linux基本命令实践 设置Linux环境变量 定制Linux的服务 Shell 编程基础使用vi编辑文件 使用Emacs编辑文件 使用其他编辑器 2.Shell 编程基础

嵌入式设备中支持国密算法的方法

如今国密系列算法的应用已不仅仅局限于金融和电信等领域,诸如车载设备,消费类电子设备等越来越多的产品开始要求有国密算法的支持.但是国密算法的开源资料和应用案例少之又少,如何快速高效的在自己的设备中加入国密算法已经成为众多开发者必须要面对的难题.现在为大家准备了一个系列文章,介绍嵌入式设备中移植国密算法的方法.简单来说,分为三种方法:1.移植Miracl库2.移植Openssl库3.使用加密芯片下面进行简介:1.移植Miracl库MIRACL(Multiprecision Integer and R

基于软件开发对嵌入式开发的思考

由于本人专业方向是计算机体系结构方向的,平时做嵌入式方面的实验以及项目较多,这个学期又学习了软件工程的课程,因此想借此机会,总结下在软件工程上面学习到的知识,并看看是否有什么能够借鉴到嵌入式方向的开发上面去. 首先我想总结下,软件开发与嵌入式开发的不同之处.作为软件开发,首先应当从用户或者用户的需求入手,明白用户想让你去实现什么功能,而到了具体的实现,有时却限制的不是那么的死.而至于嵌入式的开发,从需求入手是相同的,但是对于实现的方式,却明显不同于传统的软件开发.对于编程语言,不同的嵌入式开发平

嵌入式设备中使用短信服务

全球移动通信系统GSM是我国范围最广.通信能力最强的移动通信服务,其中的短消息功能以其方便.可靠和价廉得到了广泛应用.如果要在嵌入式设备中使用短信功能,要利用GSM模块实现短信的收发. 短信收发原理 短信服务业务SMS(Short Message Service)是GSM系统提供给用户的一种数字业务,它与语音传输及传真一样,同为GSM通讯网络提供的主要电信业务.系统结构图如下: 短消息模块的接入方式支持两种模式:基于AT指令的TEXT模式和基于AT指令的PDU模式.文本模式只支持7-bit编码,