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

—— Atwood定律

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

基础:物联网的三个层级

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

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

这个硬件层决定了物联网应用比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。

JavaScript在物联网领域的发展

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

毕竟:

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

JavaScript在物联网中的应用相关推荐

  1. 无所不在的JavaScript与物联网设备

    物联网风潮将原本称霸Web前台技术的JavaScript顺势带入物联网.学习JavaScript,也就能同时掌控前台.后台和感测端的软硬件. 物联网(Internet of Things,IoT)一词 ...

  2. 16种JavaScript设计模式(中)

    简介 上文中介绍了学习设计模式前需要了解的一些基础概念和js的基础模式-原型模式,没看过的同学可以点这里,本章将介绍以下几种模式 单例模式 策略模式 代理模式 迭代器模式 发布订阅模式 命令模式 组合 ...

  3. 结课作业:云计算在物联网中的应用发展

    云计算在物联网中的应用发展 摘要    随着物联网的兴起,通过家庭信息管理平台将家居各种子系统有机的组合成一个系统,在一定程度上满足了人们的更多生活娱乐的需求.云计算为采用物联网技术带来的更多海量数据 ...

  4. 通过ID在JavaScript对象数组中查找对象

    本文翻译自:Find object by id in an array of JavaScript objects I've got an array: 我有一个数组: myArray = [{'id ...

  5. 使用JavaScript在下拉列表中获取选定的值

    如何使用JavaScript从下拉列表中获取选定的值? 我尝试了下面的方法,但是它们都返回选择的索引而不是值: var as = document.form1.ddlViewBy.value; var ...

  6. xslt中的Javascript取得xml中的参数

    xslt中的Javascript取得xml中的参数 使用xslt解析xml的时候,需要把xml中的参数传到javascript中, 可以用xslt作为中转, xsl: <input type=& ...

  7. javascript 数组对象中的迭代方法

    /* javascript 数组对象中的迭代方法 * ECMAScript5为数组定义了5个迭代方法.每个方法都接受两个参数,第一个是进行迭代的函数,第二个是该函数的作用域对象[可选]. * 进行迭代 ...

  8. java js 正则表达式_如何在JavaScript与Java中使用正则表达式

    如何在JavaScript与Java中使用正则表达式 发布时间:2021-02-11 13:16:01 来源:亿速云 阅读:69 作者:Leah 如何在JavaScript与Java中使用正则表达式? ...

  9. javascript原型链中 this 的指向

    为了弄清楚Javascript原型链中的this指向问题,我写了个代码来测试: var d = {d: 40};var a = {x: 10,calculate: function (z) {retu ...

最新文章

  1. USBASP的ISP上位机软件AVR_fighter
  2. 出现“adb不是内部或外部命令,也不是可运行的程序或批量文件。”
  3. boost::gil::channel_type用法的测试程序
  4. 【EASYDOM系列教程】之创建页面元素
  5. windows下安装vundle
  6. react常用知识点总结
  7. 微信支付之企业付款(提现,理赔,退款)(java)
  8. c语言中尖括号的作用,C语言中,#include
  9. Javascript定时器的使用
  10. ubuntu 12.04 安装Docker 实战
  11. c语言模拟试卷答案,C语言模拟试卷2(带答案)
  12. 软件开发工作量/费用估算
  13. maxscale连接mysql_MaxScale实现mysql读写分离,负载均衡
  14. 米家的扫地机器人是灰色_重新定义扫地机器人概念——米家扫地机器人 - IT168试客...
  15. Java实现图片与Base64编码互转
  16. 【Unity】Inspector属性
  17. LeetCodeNo.55 跳跃游戏
  18. 苹果电脑无法自动修复此计算机,Mac电脑因出现问题而重新启动请按一下怎么解决?附解决方法...
  19. 难处理的js单引号与双引号问题解决
  20. 74---Python绘制不同表现形式的狄拉克delta函数(视觉上的delta函数)

热门文章

  1. Boost:简单移动平均线的测试程序
  2. Boost:bind绑定数据成员的测试程序
  3. Boost:基于Boost的异步UDP回显服务器
  4. VTK:简单操作之ProjectPointPlane
  5. 在Qt Designer中使用样式表
  6. QT的QSqlDatabase类的使用
  7. 通过yarn上的applicationId杀死hadoop中的任务,或通过hadoop job命令停止任务、yarn container 的日志路径
  8. maven之build resources resource 详细介绍
  9. 8.非关系型数据库(Nosql)之mongodb的应用场景(关系型数据库 和 Mongodb进行CRUD时数据用时的比较)
  10. com.css.common.jdbcTemplate中的类