说起.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的更多相关文章

  1. [同步到 MaixPy3 文档] 使用 Python 编程入门开源硬件项目

    本文是给有一点 Python 基础但还想进一步深入的同学,有经验的开发者建议跳过. 前言 在写这篇案例系列的时候 junhuanchen 期望能够引导用户如何成为专业的开发者,不是只会调用代码就好,所 ...

  2. 其他主流开源硬件简介BeagleBone Black快速入门

    其他主流开源硬件简介BeagleBone Black快速入门 1.3 其他主流开源硬件简介 开源硬件种类繁多,但主要有两款开源硬件常与BeagleBone比较.它们就是Arduino和Raspberr ...

  3. 三大主流开源硬件对比:Arduino vs BeagleBone vs Raspberry Pi

    个人总结: Arduino就是个AVR单片机,个人觉得更适合玩电子的,社区也很活跃. BeagleBone是ARM Cortex-A8,属于嵌入式,价格高于Pi,但是许多方面拥有超越 Pi 的优 势, ...

  4. <<开源硬件创客 15个酷应用玩转树莓派>>

    本书共分18章,前3章是本书的基础章节,主要介绍了树莓派的一些基本情况和基本操作,来让读者了解树莓派的前世今生,掌握树莓派基本的使用方法.第4~18章主要介绍15个以树莓派为载体的酷炫应用,大家可以按 ...

  5. oschina开源硬件其它开源,开源硬件

    硬件驱动/工具 25Linux内核 101桌面环境 40开源字体 58嵌入式操作系统 33输入法 110开源硬件 57开源图书 5开源家居 17物联网 87开源货币/比特币 32NASA 开源项目 1 ...

  6. 香蕉派 BPI-M1+ 双核开源硬件单板计算机

    香蕉派 BPI-M1+ 开源硬件开发板 深圳市源创通信技术有限公司公司 http://www.sinovoip.com.cn/cp_view.asp?id=562 产品介绍 Banana PI BPI ...

  7. Hauntbox:用于控制你的自己主动化、电子创意家居的开源硬件盒子

    Hauntbox 是一个开源硬件控制器,能够满足用随意传感器和控制器建立复杂的.自己主动化的萦绕在心头的电子项目. 它不须要焊接或者预先学什么知识.是全然可控制.并与Arduino插板兼容. 无需编程 ...

  8. Drupal、IoT 和开源硬件之间的交集

    导读 来认识一下Amber Matz,她是来自 Lullabot Education 旗下的Drupalize.Me的产品经理以及培训师.当她没有倒腾 Arduino.Raspberry Pi 以及电 ...

  9. 【Orange Pi Lite2】 ——1《如何开始使用开源硬件》

    [Orange Pi Lite2] --1<如何开始使用开源硬件> 本文只在博客园发布 在开始前你需要准备的材料与软件 用户手册_Orange Pi Lite2 OrangePi_Lite ...

随机推荐

  1. Java IO流体系中常用的流分类

    Java输入/输出流体系中常用的流分类(表内容来自java疯狂讲义) 注:下表中带下划线的是抽象类,不能创建对象.粗体部分是节点流,其他就是常用的处理流. 流分类 使用分类 字节输入流 字节输出流 字 ...

  2. 属性传值,协议传值,block传值,单例传值四种界面传值方式

    一.属性传值 对于属性传值而言,相对于其它的三种 方法来说,是最基础,最简单的一种 方法,但,属性传值 有很大的局限性,因为是适用于第一个界面向第二个界面传 值,第二个向第三个界面传值等等.N界面向N ...

  3. C++Builder Berlin 编译

    编译工程,一个单元有错误,就停下了, 能不能把所有单元都编译,一次处理所有单元的错误?

  4. 自定义控件EditText

    public class defineEditText extends EditText { Context context; Drawable d; public defineEditText(Co ...

  5. JS中的for/in语句和arguments参数

    在js应用中,有时候我们会遇到希望定义一个函数可以被不同情况调用,比如参数个数不固定的情况. 可以使用for/in语句和arguments参数解决. 举个简单例子:定义一个计算总和的函数,需要计算的数 ...

  6. Web前端之CSS_day1-2

    1.div和span div的语义是division“分割”: span的语义就是span“范围.跨度” div标签是一个容器级标签,里面什么都能放,甚至可以放div自己 span是一个“文本级”的标 ...

  7. 获取 input 单选框和多选框的值

    引用  jQuery的js <script> $(function(){ var arr = new Array(); $('#checkbox').click(function(){ a ...

  8. mybatis(二)接口编程 、动态sql 、批量删除 、动态更新、连表查询

    原理等不在赘述,这里主要通过代码展现. 在mybatis(一)基础上,新建一个dao包,并在里面编写接口,然后再在xml文件中引入接口路径,其他不变,在运用阶段将比原始方法更节约时间,因为不用再去手动 ...

  9. Quartus 的管脚分配

    与管脚分配相关的一些功能在assignments菜单下, Remove assignments... Back-Annotate Assignment... Import Assignment... ...

  10. Python.resource-for-python-from-internet

    1. pyvideo Python related video indexed so you can find it. http://pyvideo.org/ 2. 6 Useful Python L ...