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

640?wx_fmt=png

( .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 等。

640?wx_fmt=png

阿里云 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 中国区由世纪互联运营(很不舒服)。

640?wx_fmt=png

640?wx_fmt=png

 看图,说明亚马逊也不支持 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 )。

640?wx_fmt=png

(好想砸了这辣鸡板子,但是毕竟花了 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 系统,在此系统上进行开发。

好处:

  太子殿下

先来几个图

640?wx_fmt=png

640?wx_fmt=png

 640?wx_fmt=png

640?wx_fmt=png

一套 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 正式版的发布。

640?wx_fmt=png

640?wx_fmt=png

640?wx_fmt=png

- - - - - - - -

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

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

- - - - - - - -

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

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

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

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

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

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

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

微信 whuanlex

640?wx_fmt=png

原文链接:https://www.cnblogs.com/whuanle/p/10589496.html

.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com

640?wx_fmt=jpeg


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/316560.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

合成小丹(dp+二进制按位或+结论)

problem 给定 nnn 个在 [0,2ω−1][0,2^\omega-1][0,2ω−1] 内的整数。执行下面操作两种操作共 n−1n-1n−1 次: 选择两个整数 x,yx,yx,y 从数列中删去,并加入 ⌊x∣y2⌋\lfloor\frac{x|y}{2}\rfloor⌊2x∣y​⌋,这里的 | 表示按位或。选择…

P2633 Count on a tree

P2633 Count on a tree 题意: 给定一棵 n 个节点的树,每个点有一个权值。有 m 个询问,每次给你 u,v,k,你需要回答 u xor last 和 v 这两个节点间第 k 小的点权。 其中last 是上一个询问的答案,定义其初始为 0&#…

[NewLife.XCode]增量累加

NewLife.XCode是一个有10多年历史的开源数据中间件,支持nfx/netstandard,由新生命团队(2002~2019)开发完成并维护至今,以下简称XCode。整个系列教程会大量结合示例代码和运行日志来进行深入分析,蕴含多年开发经验于其中&#xff0…

King of Range

King of Range 题意: 给你n个数,有m个询问,每次询问一个x,问有多少个区间的最大值减最小值大于x 题解: 我一开始的想法 st表实现区间最大减最小,利用二分来找这个区间范围,复杂度O(nmlogn)&…

膜拜大丹(结论+二元环)

problem 有两个国家,国家 AAA 有 nnn 座城市,国家 BBB 有 mmm 座城市,两个国家间有若干条单向航线。 具体地,有长度为 nnn 的数组 aaa 和长度为 mmm 的数组 bbb。国家 AAA 的第 iii 座城市有单向航线可以到达国家 BBB 的 1∼ai1…

Jewels

Jewels 题意: 你的坐标是(0,0,0),有m个宝物,分别坐标是是(xi,yi,zi),它的z坐标以每秒下沉vi深度,你每次获取一个宝物的费用是两者的距离的平方,每秒只能获取一个宝物,从第0秒开始,问获取所有宝…

[NewLife.XCode]脏数据

NewLife.XCode是一个有10多年历史的开源数据中间件,支持nfx/netstandard,由新生命团队(2002~2019)开发完成并维护至今,以下简称XCode。整个系列教程会大量结合示例代码和运行日志来进行深入分析,蕴含多年开发经验于其中&#xff0…

[学习笔记] 二分图基础定理的相关证明

最小点集覆盖最大匹配 最小点集覆盖:选出最少的点使得每条边都至少有一个端点被选。 先证最小点集覆盖 ≥\ge≥ 最大匹配 假设最大匹配为 xxx,即有 xxx 条边两两之间没有公用点。 光覆盖这些边就要用到 xxx 个点。 “不少于”已证。 再证最小点集覆盖 …

Boxes

Boxes 题意: 有n个盒子,每个盒子里要么是黑球,要么是白球,你可以花C的代码得知剩下所有盒子中黑球数量和白球数量,(只是知道总数量,并不知道具体哪个盒子里是什么),你可以可以花费wi的代价开第…

Double Strings

Double Strings 题意: 给你s和t两个字符串,在其中选出两个等长的子序列(可以不连续)a,b,满足a的字典序严格小于b的字典序,问方案数,答案mod(1e97) 题解: 好的方案的构成是一段相同的前缀一个不同的字符…

你真的了解用户吗?-浅谈《用户画像》的意义和方法

作者:陈炯关于作者系统集成项目管理高级工程师某大型国有银行高级质量管理师从事IT项目管理工作十余年具有丰富的开发与管理经验公司内部敏捷转型的发起者之一深度参与敏捷实践与总结大学校园里流传最广的一句话是什么?“防火防狼防师兄”。为什么师兄这…

[学习笔记] 二次剩余

二次剩余 对于素数 ppp 和数 aaa,满足 (a,p)1(a,p)1(a,p)1。(注意 aaa 不一定小于 ppp) 若 ∃xx2≡a(modp)\exist_{x}\ x^2\equiv a\pmod p∃x​ x2≡a(modp),则称 aaa 是模 ppp 意义下的二次剩余,xxx 称为该二次剩余…

Script Lab 续:为 Officejs 开发配置 VSCode 环境

垫场AA:深度:从 Office 365 新图标来看微软背后的设计新理念--------------------------------------------------前期01:尝试:Script Lab,快速 Office 365 开发工具前期02:尝试:Script Lab&…

P3567 [POI2014]KUR-Couriers

P3567 [POI2014]KUR-Couriers 题意: 给一个长度为 n 的正整数序列 a。共有 m 组询问,每次询问一个区间 [l,r] ,是否存在一个数在 [l,r]中出现的次数严格大于一半。如果存在,输出这个数,否则输出 0。 题解&#xff1…

[WC 2022 Day3 zmy] Od deski do deski(dp)

设 fi:1∼if_{i}:1\sim ifi​:1∼i 能否分成若干个首尾相同的区间 则有 fiORj<i(fj−1∧ajai)f_{i}\text{OR}_{j<i}(f_{j-1}\wedge a_ja_i)fi​ORj<i​(fj−1​∧aj​ai​)。 这是最原始的暴力 dpdpdp&#xff0c;时间 O(n2m)O(n^2m)O(n2m)。 事实上&#xff0c;这…

编程方式重启 ASP.NET Core 网站

点击上方蓝字关注“汪宇杰博客”常言道&#xff0c;多喝热水&#xff0c;重启试试。有时候当应用工作不正常&#xff0c;重启也许能解决问题。但是程序员通常接触不到服务器系统权限。而运维人员和公司流程经常人为制造麻烦阻止我们去重启应用。老实的程序员不善言辞交际&#…

可持久化3--可持久化01Trie

01Trie 可持久化 01Trie 的方式和可持久化值域线段树的方式是相似的&#xff0c;只是以 01字典树 的方式来维护值域。一般用来解决异或相关的能够按位贪心的题目。 其实就是将可持久化线段树中的操作嫁接到01Trie中&#xff0c;这样就是解决任意一个区间内的问题。 例题&…

AGC044E Pandom Pawn(期望+凸包)

最开始我们先旋转一下这张桌子&#xff0c;使得 A1An1max⁡{Ai}A_1A_{n1}\max\{A_i\}A1​An1​max{Ai​}。 这是非常有效的&#xff0c;因为我们把环就变成链&#xff0c;只要到达了链的任意一端 1/n11/n11/n1 就肯定会结束游戏。 定义 Ei:E_i:Ei​: 从 iii 开始游戏&#xf…

.NET Core 容器化调查

前几天在微信朋友圈做了一个简单的调查&#xff0c;参与人数有500人&#xff0c;调查结果如下&#xff1a;使用K8S的比例非常类似于2017年初我在公众号里针对.NET Core的使用情况的比例。.NET Core是针对云原生应用开发而重新设计的一个平台&#xff0c;.NET Core借鉴了.NET Fr…

P4735 最大异或和

P4735 最大异或和 题意&#xff1a; 一个非负序列a&#xff0c;初始长度为n&#xff0c;有两种操作&#xff1a; A x&#xff0c;在序列中添加x&#xff0c;n加一Q l r x,询问操作&#xff0c;询问一个位置p&#xff0c;p满足l<p<r,使得p到位置n的的异或和与x的异或值…