面向对象开发方式的开源硬件--.NET Gadgeteer
说起.NET Gadgeteer,不得不先说一下.NET Micro Framework,虽然.NET Micro Framework已经有十几年的发展历史了,但是在全球范围内,.NET Micro Framework的知名度,远远低于它的近亲.NET Framework和.NET Compact Framework,其原因值得探究。
.NET Micro Framework仅从名字上理解,就是一个框架,和.NET Framework还有.NET Compact Framework应该没有什么大的不同,但是.NET Micro Framework有自己的特色,就是自启动功能,也就是不需要操作系统也能运行。这个特色将.NET Micro Framework逐渐演化为一个操作系统的角色。恰是这一点,在.NET Micro Framework早期发展过程中,越来越显得没有优势和特色。
早期的.NET Micro Framework并没有直接对第三方开放,而是作为微软.NET全战略的一环,以.NET Micro Framework为基础,推出一系列产品。目前比较火热的可穿戴设备,比如智能手表。其实.NET Micro Framework为核心的第一代产品就是智能手表,早在2003年的拉斯维加斯的Comdex贸易展上,比尔盖茨就曾亲自戴着智能手表进行过推广。这项以.NET Micro Framework为核心发展起来的技术叫MSN Direct,除了手表产品外,还有可以预报天气的咖啡壶,GPS导航器等产品。
以.NET Micro Framework为核心的第二代产品是SideShow,曾以笔记本的第二屏、智能遥控器和智能键盘的面目出现,华硕、三星的笔记本就包含这样的SideShow显示屏。
但是无论是MSN Direct,还是SideShow,其产品并不成功,这和微软早期强制推广.NET战略相关的,因为基于.NET技术开发此类产品,虽然开发比较快,但是对硬件资源需求比较高,其.NET托管代码相比原生C++代码,速度要慢许多。所以此类产品一旦批量生产,性价比肯定比较低。最初微软也打算全部用.NET C#语言开发操作系统(比如Longhorn系统),后来事实证明这种做法是行不通的。
2009年起始微软开始调整.NET Micro Framework发展战略,首先以Apache 2.0 license的授权方式完全开源.NET Micro Framework,并基于.NET Micro Framework推出第三代产品Netduino,微软这个思路其实是仿照Arduino产品而做的,从产品命名还有实际硬件接口上,都是学习Arduino。我个人认为这个思路是对的,至少充分发挥了.NET Micro Framework优势,小巧,开发迅速,并且采用强大的Visual Studio进行程序开发和在线调试,让所有的.NET程序员很容易进入到嵌入式领域进行相关开发,这不得不说在软硬件开发结合越来越紧密的时代,对.NET程序员是一个福音。
而其后推出的基于.NET Micro Framework技术的.NET Gadgeteer产品更是充分发挥了.NET Micro Framework优势,在Netduino产品的基础上,更上一层楼,青出于蓝而胜于蓝,完全演化成具有微软自己特色的产品。特别是微软定义的20种.NET Gadgeteer接口类型,应该是微软为工控领域制订OPC技术标准以来,最重要的一个接口标准。
更具特色的是硬件拖拉可视化编程。在DOS时代我们开发一个界面程序,可以说是摸着石头过河,边写代码,边运行测试,以确认相关界面的位置是否合适。Windows平台下最初的Visual Basic等可视化编程工具,让我们的界面开发带入一个新时代,每个功能模块都被封装为一个控件,通过可视化拖拉的方式,设计界面,让我们的界面开发提升到一个新的水平。同理,我们以软件界面开发的眼光审视目前的硬件开发,其实发现,开发模式仍处在DOS时代,每外接一个功能模块,都需要我们的程序员匠心独运,小心翼翼分配相关的Pin脚,并用心开发相关驱动,最终通过应用程序调用底层接口,进行数据交互。
而.NET Gadgeteer的开发环境,让我们抛弃了这些琐碎和繁杂的步骤,视每个外接模块为一个控件,通过拖拉方式,让核心主板和这些模块相连,自动完成接口初始化、模块初始化等工作。留给我们所做的,就是一些业务逻辑的实施和完善,这是硬件开发领域的面向对象编程,是一个具有里程碑意义的硬件开发变革。
有了这些特色.NET Gadgeteer已经和Netduino、Arduino等相关DIY产品不同,跳出了仅仅是学习硬件,电子产品小制作的范畴。再结合目前的发展的如火如荼的3D打印技术,.NET Gadgeteer已经成为快速制作最终产品最好的选择(特别是小批量、个性化产品)。在物联网发展迅猛的今天,.NET Gadgeteer更是可以大显身手,可以方便接入各种传感器模块,并把相关数据上传到云端。
【说明】以上内容摘自译著《玩转.NET Gadgeteer电子积木》上的译者序,目前该书已经出版,详情可以单击下面的链接:
http://www.yfiot.net/forum.php?mod=viewthread&tid=1977&extra=page%3D1

以前的一篇博客文章《Microsoft .NET Gadgeteer 简介及其它》
NetDIY智能主控(简介:http://blog.csdn.net/yfiot/article/details/18970109)硬件简单扩展以后也可以变身成为.NET Gadgeteer主板。


面向对象开发方式的开源硬件--.NET Gadgeteer的更多相关文章
- [同步到 MaixPy3 文档] 使用 Python 编程入门开源硬件项目
本文是给有一点 Python 基础但还想进一步深入的同学,有经验的开发者建议跳过. 前言 在写这篇案例系列的时候 junhuanchen 期望能够引导用户如何成为专业的开发者,不是只会调用代码就好,所 ...
- 其他主流开源硬件简介BeagleBone Black快速入门
其他主流开源硬件简介BeagleBone Black快速入门 1.3 其他主流开源硬件简介 开源硬件种类繁多,但主要有两款开源硬件常与BeagleBone比较.它们就是Arduino和Raspberr ...
- 三大主流开源硬件对比:Arduino vs BeagleBone vs Raspberry Pi
个人总结: Arduino就是个AVR单片机,个人觉得更适合玩电子的,社区也很活跃. BeagleBone是ARM Cortex-A8,属于嵌入式,价格高于Pi,但是许多方面拥有超越 Pi 的优 势, ...
- <<开源硬件创客 15个酷应用玩转树莓派>>
本书共分18章,前3章是本书的基础章节,主要介绍了树莓派的一些基本情况和基本操作,来让读者了解树莓派的前世今生,掌握树莓派基本的使用方法.第4~18章主要介绍15个以树莓派为载体的酷炫应用,大家可以按 ...
- oschina开源硬件其它开源,开源硬件
硬件驱动/工具 25Linux内核 101桌面环境 40开源字体 58嵌入式操作系统 33输入法 110开源硬件 57开源图书 5开源家居 17物联网 87开源货币/比特币 32NASA 开源项目 1 ...
- 香蕉派 BPI-M1+ 双核开源硬件单板计算机
香蕉派 BPI-M1+ 开源硬件开发板 深圳市源创通信技术有限公司公司 http://www.sinovoip.com.cn/cp_view.asp?id=562 产品介绍 Banana PI BPI ...
- Hauntbox:用于控制你的自己主动化、电子创意家居的开源硬件盒子
Hauntbox 是一个开源硬件控制器,能够满足用随意传感器和控制器建立复杂的.自己主动化的萦绕在心头的电子项目. 它不须要焊接或者预先学什么知识.是全然可控制.并与Arduino插板兼容. 无需编程 ...
- Drupal、IoT 和开源硬件之间的交集
导读 来认识一下Amber Matz,她是来自 Lullabot Education 旗下的Drupalize.Me的产品经理以及培训师.当她没有倒腾 Arduino.Raspberry Pi 以及电 ...
- 【Orange Pi Lite2】 ——1《如何开始使用开源硬件》
[Orange Pi Lite2] --1<如何开始使用开源硬件> 本文只在博客园发布 在开始前你需要准备的材料与软件 用户手册_Orange Pi Lite2 OrangePi_Lite ...
随机推荐
- JAVA编程规则【转自java编程思想】
本附录包含了大量有用的建议,帮助大家进行低级程序设计,并提供了代码编写的一般性指导: (1) 类名首字母应该大写.字段.方法以及对象(句柄)的首字母应小写.对于所有标识符,其中包含的所有单词都应紧靠在 ...
- Nginx 反向代理、负载均衡、页面缓存、URL重写以及读写分离
1.环境准备 前端Nginx:10.160.65.44 后端WEB服务器两台:10.160.65.49/10.160.65.50 2.安装Nginx: 下载nginx-1.9.15.tar.gz,放置 ...
- php文章内容分页并生成相应的htm静态页面代码
代码如下: <?php $url='test.php?1=1'; $contents="fjka;fjsa;#page#批量生成分成文件并且加上分页代码"; $ptext = ...
- linux 错误处理
linux程序设计中,有许多系统调用和函数会因为各种原因而失败.在失败时设置外部变量errno的值来指明失败原因.程序必须在函数报告出错之后立即检查errno变量,因为它可能被下一个函数调用所覆盖(外 ...
- debian 8 和centos 配置java 环境变量的正确姿态
export JAVA_HOME=/usr/java/jre1.8.0_111export JAVA_BIN=/usr/java/jre1.8.0_111/binexport PATH=$PATH:$ ...
- html() 和 text() 方法的区别
html()方法仅支持XHTML的文档,不能用于XML文档,而text()既支持HTML文档,也 支持XML文档. html():没有参数,用于获取html的值: html(val):有参数,用于设置 ...
- E. Santa Claus and Tangerines 二分答案 + 记忆化搜索
http://codeforces.com/contest/752/problem/E 首先有一个东西就是,如果我要检测5,那么14我们认为它能产生2个5. 14 = 7 + 7.但是按照平均分的话, ...
- IP验证
function isIP(str) { var IP = '(25[0-5]|2[0-4]\\d|1\\d\\d|\\d\\d|\\d)'; var IPdot = IP + '\\.'; var ...
- 集合框架之 List
集合框架就是Java中解决数组长度固定的问题,相当于动态数组,随时用,随时建立,内存释放 这个问题还不知道? 整个集合框架 概括为 List Set Map 这三个接口以及他们的实现类之间的应 ...
- workerman 的回调函数
接下来,记录一下workerman 的回调函数 <?php /** * Created by PhpStorm. * User: zeopean * Date: 2016-08-26 * Tim ...