NodeBots-JavaScript在智能设备驱动(物联网)中的崛起


发布者 ourjs  发布时间 1410166473956
关键字 技术前沿  JavaScript 
注* 这是一篇老文,略有删减,不过文中所述目前似乎正在变成现实。有人用Javascript制造机器人和火箭,甚至有人用JavaScript在工业时代的单片机上制作一个天气预报屏。比XML数据更密集,性能更好的JSON数据交换格式也在成为物联网传输的首选。支持NodeJS的硬件平台也在不断增多,如RaspberryPI, Tessel, Arduino 。还很多不知名的JS库 devicejs.org Sylon.js等;很显然,采用Node.JS来驱动你的物理设备,将极大地降低“创客”们的技术门槛。

星期五,2012年7月13日

在2010年9月7日,我犯了个错误,在node-serialport 串口驱动开源项目中添加了一个“不建议使用”的声明。我已经有了一些使用各种无线频谱在较大项目库之间进行通信的经验(开放API,像X10 ),通过传感器监测。本来我使用的是非常强大的pyserial库驱动,刚开始很顺利,但在一些与感应器交互的关键地方我还是感到了不便。我承认,这种感觉是非常不爽,我不是怀疑这个库,它已经做得也非常好了。

就在这个时候,JSConf EU(欧盟)展示了一个Nikolai Onken 和 Jörn Zaefferer 关于JavaScript智能设备的提案。在提案中,他们表示使用JavaScript控制设备将会非常简单,比如:

$("livingroom").bind("motion", function() {
  $(this).find("lights").brightness("75%").dimAfter("120s");
});

这个东西(好)拨动了我的神经。

通过模拟现实世界中的的对象和行为。链式的,事件化的处理过程看上去非常自然。对于我的情况,我处理的是串口响应,这样做的最好例子就是“当大门打开后,切换所有的灯”。就像上文那段相似的jQuery代码那样。因为项目规模的增加,我们已经不需要一个非常了解串行端口和Python的大师程序员,它只需要对JavaScript和jQuery有一个粗略的理解就可以了。我觉得这里有一些非常有价值的东西,我开始坐下来实现这些代码。

在编写node-serialport的第一个版本时,我想我应该分享几个非常另人振奋的东西。我看到很多同样的问题,采用Node.JS进行串口编程时经常会碰到的那种,我想表达一下我的看法。我更喜欢使用的Node.js驱动arduinos,无线装备,打印机,烤面包机等(一切可以通过串口连接的东西)。首先最直接的原因就是简单。NodeJS的模块系统和耦合非常低的原生绑定允许我能迅速完成底层功能的开发,而不必引用太多的Node库,通过几段代码。这也让我减小了对库维护的工作,充分利用时间去解决实际问题,而不必整天测试串口的功能。Node.js与传统的C+ +代码连接是如此之简单,几乎是微不足道的实施(保证正确性的前提下),这就是为什么我马上爱上了它的原因。我认识的人也有类似的感觉(或者恨)对Python或Ruby的本地绑定,但个人而言,我认为C和JavaScript之间的语法相似性使得它们之间的编程过程更加的流畅,尽管跨越两种语言。如果你看一下Node.JS的底层代码,一个串口的C++,你也许可以完全理解,即使你只有JavaScript编程的经验。无可否认,这可能会造成一点混乱,但对我来说只是一点点,完全无法掩盖我对操作底层串行端口的喜悦。这是值得研究的。


尽管底层代码已经写完了,但是我继续为Node.js串口编码贡献代码的原因是,我希望我可以以一种比较优雅的方式来解决这类问题。如前所述,我在我的系统中使用了Node,串口(Arduino的,等等)。在大多数系统中,在他们会等待某些事件或数据,然后处理一些事件的反应。这可以说是JavaScript的优势,绝大部分人都可以处理,他们可以使用Node和JavaScript来思考。你也可以用其他语言,但JS无疑是最简单的,从低层的c++的代码,到事件处理都得心应手,毫不费力。在有关Node.JS无线扩展机器人一文中,有人询问为何不是Clojure或scala或Python或Ruby而选择JavaScript我最直接的答案是,大量代码成就了响应式的系统(包括eventmachine/ twisted/ Redis/ PubSub/等)此类系统的快速增长增加了对事件驱动机制的喜爱。现在诚实地讲,因为多种开源硬件平台的出现(Raspberry pi, arduino, x10等),软件工程师现在也可以玩硬件了。在这种背景后,我相信会有越来越多的Ruby开发人员使用Node.js创建智能硬件原型。它更轻量级,操作简单,并且很容易编写复杂的响应式系统。最重要的是它基于JavaScript,因此即使你的原型因为某些“更值得生产的”东西而失败了,你也不会损失太多时间。


下面这个例子是展示Node.JS的应用有多轻量级, 在Johnny-Five工作的Rick Waldron做出的惊艳的框架,看看从acceleromator处理事件的源代码。它非常易于阅读,易于理解而且仅需要10行代码。控制伺服机构的代码,也仅有10多行。

所有这些都让我相信,JS将是未来智能设备控制器的首选编程语言。

我这样说是因为我每天都听到越来越多的人作出更新,更亮,更智能的东西。对于我来讲,它打破了软件和硬件的边界,这让我很开心,相对于纯碎地写代码,智能硬件领域让我们更接受真实,我们有更大的潜力做些更多更好的事情。





回复 (12)
  • #
  • #1 姬史犬 1410247960382

    不知所云

  • #2 饶毕芒 1410248789542

    不明觉厉

  • #3 徒后扬 1410252598667

    Nodejs确实很热呀,好好学习,天天向上。

  • #4 饶以斥 1410259334437

    翻译的

  • #5 饶以斥 1410260045743

    之前在一个做智能穿戴的公司就用js做了一些蓝牙协议栈的开发

  • #6 邬叶众 1418376999870
    1. 列表## 标题 ##
    2. 列表

      1231231231123123123213213123123




    啊实打实大师的
    

    ----------啊实打实大师的阿萨德阿萨德啊实打实大师大师的


  • #7 林业寻 1481708406692

    标题 ==## 标题 ##

  • #8 林业寻 1481708440017

    啥的是对方的说法是水电费水电费 的是否是否水电费水电费的是否是否

    引用


  • #9 骆贝旧 1488279178680

    @徒后扬 #2 ybs @林业寻 #7

  • #10 江弓执 1491293457437

    为asdasd啊啊是的asd啊啊

  • #11 江弓执 1491293488741

    eval(console.log("asd"))

  • #12 卓阳合 1498716379634
    eval(console.log("asd"))
微信扫码 立即评论