凡是能用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/B01IBZWTWW

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

毕竟:

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

致JavaScript也将征服的物联网世界相关推荐

  1. 又一个被JavaScript攻占的领域:物联网

    在国外有一条JavaScript的著名定律: 凡是能用JavaScript写出来的,最终都会用JavaScript写出来. -- Atwood定律 近几年间,在人们眼中JavaScript已迅速成长为 ...

  2. NEC:借助AI撬动未来物联网世界

    看过<碟中谍>系列大片的朋友,可能对特工们在火车站庞大的人流中借用人脸识别隐形眼镜迅速锁定目标的场景惊叹不已,而这一幕已被NEC从梦想带到了现实.近日,NEC在东京高大上的场所--东京国际 ...

  3. 物联网之父凯文-阿什顿:物联网世界充斥着人工智能

    MIT执行董事凯文·阿什顿 11月14日上午消息, BOE(京东方)全球创新伙伴大会·2017今日开幕.会上,MIT执行董事凯文·阿什顿表示, 物联网是一种方式,自动化的去获取全世界的信息和数据,通过 ...

  4. 鸿蒙的物联网世界之我的一天

    鸿蒙的物联网世界之我的一天 想象使用鸿蒙操作系统将万物互联后,我的一天. 清晨,闹铃响起,窗帘自动拉开,阳光照到我脸上,我慢慢醒了过来.睡眼惺忪的我戴上手表,把手机装进兜里,走到厕所,准备刷牙.&qu ...

  5. 以AI为支点NEC欲撬动未来物联网世界

    看过<谍中谍>系列大片的朋友,可能对特工们在火车站庞大的人流中借用人脸识别隐形眼镜迅速锁定目标的场景惊叹不已,而这一幕已被NEC从梦想带到了现实.近日,NEC在东京举办了全球用户论坛暨展览 ...

  6. 新的JAX Mag问题:探索物联网世界

    这个月,我们很高兴为您提供一期< JAX杂志>! 在第一部分中,当我们记录下物联网在过去几年中的显着扩展时,我们将探索物联网世界的奇观. 据估计,到2025年,将有超过650亿个IoT设备 ...

  7. 青莲云董方:物联网世界到底是一种什么样的黑

    导语:IOT万物互联,万物安否?当世上所有可以被连接的事物组成一张网的时候,物联网的世界才真正成型,而网的边缘难免会像衣服一样翘边,不起眼的边角和弱相关的物联组件很难引起人们的注意,物联网企业犹如物联 ...

  8. 大数据AI智能—物联网世界对职业发展的影响

    基于电脑的服务叫做互联网 基于智能手机的服务叫做移动互联网 基于所有智能终端的服务叫做物联网 物联网在实际应用上的开展需要各行各业的参与,在参与的同时,改变着行业对人才的需求与个体的职业发展 原来的物 ...

  9. Ruff Chain 重磅首发 利用区块链技术构建标准统一的物联网世界

    当区块链的讨论持续升温,物联网技术渗透生活,不难发现区块链的去中心化和分布式特点与物联网的分布式特性有着相似的共性,根据 IBM 曾发布的报告称物联网可能是区块链技术的最佳应用场景. 没有区块链的辅助 ...

最新文章

  1. 匿名函数应用-多线程测试代码
  2. 【Go】Go基础(六):数组、切片slice、映射map
  3. 由“递归遍历二叉树”引发的思考
  4. C#实现简体繁体转换代码示例
  5. [每日编程]求 largest Number - 给出一组非负整数,求这些非负整数可以拼接出的最大数字...
  6. .sql文件如何执行_干货|一条SQL查询语句是如何执行的
  7. 华为杨超斌:5G千元机有望明年底上市
  8. 大型企业用什么orm_在大型仓储物流企业中使用什么类型的货架更为合适呢?
  9. 在docker container中为gsutil认证gcloud
  10. POJ1426-Find The Multiple-深度优先搜索BFS
  11. 神技能!在上司靠近座位时,用人脸识别技术及时屏幕切换
  12. Android Multimedia框架总结(十四)Camera框架初识及自定义相机案例
  13. C中error的使用
  14. php 音频上传之ogg格式,如何快速将MP3格式转化成ogg格式
  15. java持久化 seri_Java 的序列化 (Serialization) 教程
  16. 信号与系统——抽样信号的傅里叶变换
  17. fastreport 横向分栏_fastreport分栏分组显示问题(急贴盼解决)
  18. JAVA 实现《飞机大战-II》游戏
  19. 图片怎么自定义裁剪?图片如何裁出想要的大小?
  20. Html和css的class和id的命名,[HTML] CSS Id 和 Class选择器

热门文章

  1. 直播 | 7.30 ApacheCon Asia 2022 IOT/IIOT专题,IoTDB PMC 乔嘉林担任出品人
  2. sql解析json格式字段、sql关联json格式字段,mysql解析json、sql解析json字符串
  3. OceanBase创始人阳振坤:什么是面向未来的数据库?
  4. 承担刑事责任,是否影响子女前程
  5. 身边的疾病思考,通过类比把握模糊的正确
  6. win10系统Fn+PrintScreen屏幕截图保存位置
  7. 浅析微信系列之漂流瓶
  8. Wi-Fi 6强势来袭-更大容量 更低延迟 更快网速 更安全
  9. spark (1)初学者对于spark的几个疑问
  10. 职场上的不正确是怎么捶打年轻人的