文档章节

JavaScript在物联网中的应用

Phodal
 Phodal
发布于 2016/08/11 11:17
字数 1502
阅读 4540
收藏 121

凡是能用JavaScript写出来的,最终都会用JavaScript写出来。

—— Atwood定律

在那篇《最流行的编程语言JavaScript能做什么?》里,我们列举了JavaScript在不同领域的使用情况,今天让我们来详解一下JavaScript在物联网中的应用。

基础:物联网的三个层级

开始之前, 先让我们简单地介绍点物联网的基础知识。如果你有点Web开发经验的话,都知道下图是CS架构:

Client-Server架构

相比于一个物联网系统,无非就是多了一层硬件层以及可选的协调层。

源自《自己动手设计物联网》

这个硬件层决定了物联网应用比Web应用更加复杂。对于大部分的Web应用来说 ,客户端都是手机、电脑、平板这些设备,都有着强大的处理能力,不需要考虑一些额外的因素。

对于物联网应用来说,我们需要考虑设备上的MCU的处理能力,根据其处理能力和使用环境使用不同的通信协议,如我们在一些设备上需要使用CoAP协议。在一些设备上不具备网络功能,需要考虑借助于可以联网的协助层,并且还需要使用一些短距离的无线传输协议,如低功耗蓝牙、红外、Zigbee等等。

一个物联网系统:六种语言

两年半以前,大四,电子信息工程,我选定的毕业论文是一篇关于物联网的论文——《基于REST服务的最小物联网系统设计》。这是一篇入门级的物联网论文,如果大部分学习CS的人有一点硬件基础,都能写出这样的论文。

这篇论文是之前参加比赛的作品论文的“最小化”,里面使用到的主要就是创建RESTful服务,而它甚至称不上是一种技术。在这个作品里:

  • 我们使用Python语言里的Django框架作为Web服务框架,使用Django REST Framework来创建RESTful服务。
  • 为了使用手机当控制器,我们还要用Java写一个Android应用。
  • 我们使用Raspberry Pi作为硬件端的协调层,用于连接网络,并传输控制信号给硬件。
  • 我们在硬件端使用Arduino作为控制器,写起代码特别简单,可以让我们关注于业务。
  • 最后,我们还需要在网页上做一个图表来显示实时数据。

所有的这些,我们需要使用Python、Java、JavaScript、C、Arduino五种语言。而如果我们要写相应的iOS应用,我们还需要Objective-C。

![你是在逗我吗?](http://articles.phodal.com/js-iot/6359758744428735171956612167_are-you-serious-wtf-meme-baby-face.jpg )

JavaScript在物联网领域的发展

同样的,两年多以前,刚实习,在我们的项目里,我们的新项目里我们使用Backbone作为单页面应用框架的核心来打造Web应用。这时,我开始关注Node.js实现物联网应用的可能性。

Node.js Express Mongodb

当时,已经有了物联网协议MQTT和CoAP协议的库,于是我照猫画虎地写了一个支持HTTP、CoAP、WebSocket和MQTT的物联网。由于,当时缺乏一些大型应用的开发经典,所以做得并不是很好,但是已经可以看到JavaScript在这方面的远景。

Ionic Cordova

一年多以前,Ionic还没推出正式版的时候,我发现到了这个框架真的很棒——它自带了一系列的UI,还用NgCordova集成了Cordova的一系列插件。我便开始使用Ionic写了一些移动应用,发现还挺顺手的。接着,我就开始拿这个框架尝试写物联网应用,这需要一些原生的插件,如BLE、MQTT。后来,我也写了一个简单的CoAP插件。

Iot

后来我们不再需要编译Node.js,就可以在ARM处理器上运行Node.js。并且我们已经有Tessel、Espruino、Kinoma Create、Ruff这些可以直接运行JavaScript的开发板。三星还推出iot.js,可以让更多的嵌入式设备可以使用JavaScript语言作为开发语言。

Node.js Future

人们开始在硬件上使用JavaScript的原因有很多,如Web的开发人员是最多的、JavaScript很容易上手。

现在,这次我们在这三个层级上都可以使用JavaScript,只需要一种语言。

使用一种语言开发物联网应用:JavaScript

在我写的那本《自己动手设计物联网》中,我就试图去展示JavaScript在这方面的威力。使用Node.js + Node-CoAP + MQTT.js + MongoDB + Express搭建了一个支持多协议的物联网:

Lan IoT

不过,上图是完善版的物联网,代码自然是在GitHub上啦:Lan。作为服务端来说,Node.js的能力已经是经过验证的。而在混合应用上,仍然也可以经受住考验,混合应用在手机上做个图表是轻轻松松的事(只需要获取数据,然后显示):

混合应用图表

作一个控制端也是轻轻松松的事(我们只需要发个POST请求,更具逻辑一点的就是先获取状态):

Led控制

而在硬件端,我并没有在书中以JavaScript作为例子来展示JavaScript的用法,因为这会局限了用户的硬件设备。

不过,我们仍然可以使用类似于Johnny-Five这样的库来做硬件方面的编程,只是它没有那么好玩~~。

既然我们可以JavaScript来实现,为什么我们还要喝杯咖啡等它用C编译完呢?

你想知道的答案都在这本书里,已在亚马逊、京东、当当上架:

自己动手设计物联网

亚马逊:https://www.amazon.cn/dp/B01IBZWTWW

京东:http://item.jd.com/11946585.html

毕竟:

凡是能用JavaScript写出来的,最终都会用JavaScript写出来。

© 著作权归作者所有

Phodal

Phodal

粉丝 112
博文 25
码字总数 37757
作品 7
深圳
前端工程师
私信 提问
加载中

评论(8)

quanwei9958
quanwei9958
楼主给的是物联网较统一的架构,但是如果仅仅是采集并且上传数据这么简单那根本不用那么复杂, 我觉得难点在适用领域出现的各种问题,如: 在实时性高的系统中选取的通讯协议,在弱网甚至是GPRS的的环境中如何充分利用带宽,物理网络拓扑的建设 . 这些问题需要实际经验的积累以及预见性的问题能够帮助很多人. 对于上层架构上相信原本的web程序员有更自由的搭配反而不需要过多强调.
梅开源
梅开源

引用来自“G_Young”的评论

引用来自“梅开源”的评论

凡是能用JavaScript写出来的,最终都会用JavaScript写出来。有道理啊,我在用JavaScript做图像处理,感觉比C++省事多了,毕竟不用编译和做UI和做联网。

请问你用JS做图像处理用的什么库?大概是什么思路呢?

就用画布和按钮事件,不用什么库目前,以后可能createjs。十年前做个这样基本的图像操作实验,拿C++各种折腾。
TGVvbmFyZA
TGVvbmFyZA
竟然是广告文
PO主 你是坏人
猫之良品
猫之良品
我认为没有必要非要用一种语言解决所有问题,主流计机语言都各有优势。程序员应该更工匠一点,想想怎么做好软件产品,而不是去在乎用多简洁的的手段去造出来。
G_Young
G_Young

引用来自“梅开源”的评论

凡是能用JavaScript写出来的,最终都会用JavaScript写出来。有道理啊,我在用JavaScript做图像处理,感觉比C++省事多了,毕竟不用编译和做UI和做联网。

请问你用JS做图像处理用的什么库?大概是什么思路呢?
梅开源
梅开源
凡是能用JavaScript写出来的,最终都会用JavaScript写出来。有道理啊,我在用JavaScript做图像处理,感觉比C++省事多了,毕竟不用编译和做UI和做联网。
Phodal
Phodal 博主

引用来自“Netfisher”的评论

nodejs 有直接编译好的在 arm 运行的方案吗
https://nodejs.org/zh-cn/download/
Netfisher
Netfisher
nodejs 有直接编译好的在 arm 运行的方案吗
超越Web,Javascript在物联网的应用

引子 Patrick Catanzariti 是一名Web开发工程师,最近他在 sitepoint 发表了《JavaScript Beyond the Web in 2014》,介绍了JavaScript在物联网中的应用,非常有意思。做为JavaScript的爱好者...

葡萄城控件技术团队
2014/10/15
263
1
主导物联网的编程语言: Java、C、JavaScript、Python

物联网是否使用驱动技术界其他领域的同样一些编程语言? 随着物联网不断发展,可能很难跟踪哪些工具对不同的用途而言最受欢迎。与之相仿,试图密切关注编程语言的相对流行度可能是件复杂的事...

云头条
02/20
0
0
Vaadin 7使用外部js库时组织js文件路径的一个方法

Vaddin 7中要整合外部的js库(或者js组件)必须使用@JavaScript标签来指定要加载的js文件,并且继承AbstractJavaScriptComponent这样的抽象类;这时候的js文件必须放在类路径下,或者使用全限...

chuangyu
2013/07/12
785
0
GIS地图定位轨迹展示效果代码

如何使用地图来显示地址参数信息,设置地图中心点,缩放中心等。这类应用在企业内网中比较的凸显,围绕这些功能的LBS应用也比较多,下面我们就用sitemapIMS地图开发平台来给大家演示一下。 ...

你的唯一
2014/12/31
1K
0
bootstrap3 兼容IE9的问题

依据bootstrap3的中文网中以及百度查询出来的各种解决思路,在jsp页面头部增加 js,css文件引用(本地都存在了的,路径引用方式没问题,因为其他的文件也是如此引用,比如bootstrap.css文件等...

开源石头
2015/09/24
4.4K
3

没有更多内容

加载失败,请刷新页面

加载更多

java通过ServerSocket与Socket实现通信

首先说一下ServerSocket与Socket. 1.ServerSocket ServerSocket是用来监听客户端Socket连接的类,如果没有连接会一直处于等待状态. ServetSocket有三个构造方法: (1) ServerSocket(int port);...

Blueeeeeee
今天
6
0
用 Sphinx 搭建博客时,如何自定义插件?

之前有不少同学看过我的个人博客(http://python-online.cn),也根据我写的教程完成了自己个人站点的搭建。 点此:使用 Python 30分钟 教你快速搭建一个博客 为防有的同学不清楚 Sphinx ,这...

王炳明
昨天
5
0
黑客之道-40本书籍助你快速入门黑客技术免费下载

场景 黑客是一个中文词语,皆源自英文hacker,随着灰鸽子的出现,灰鸽子成为了很多假借黑客名义控制他人电脑的黑客技术,于是出现了“骇客”与"黑客"分家。2012年电影频道节目中心出品的电影...

badaoliumang
昨天
16
0
很遗憾,没有一篇文章能讲清楚线程的生命周期!

(手机横屏看源码更方便) 注:java源码分析部分如无特殊说明均基于 java8 版本。 简介 大家都知道线程是有生命周期,但是彤哥可以认真负责地告诉你网上几乎没有一篇文章讲得是完全正确的。 ...

彤哥读源码
昨天
18
0
jquery--DOM操作基础

本文转载于:专业的前端网站➭jquery--DOM操作基础 元素的访问 元素属性操作 获取:attr(name);$("#my").attr("src"); 设置:attr(name,value);$("#myImg").attr("src","images/1.jpg"); ......

前端老手
昨天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部