物联网风潮将原本称霸Web前台技术的JavaScript顺势带入物联网。学习JavaScript,也就能同时掌控前台、后台和感测端的软硬件。

  物联网(Internet of Things,IoT)一词,是由美国麻省理工学院Auto-ID中心主任Kevin Ashton,于1999年进行RFID研究时所提出的概念。物联网是指为每个东西,包括一般物品(例如:超商以及它所贩售的所有商品)、传感器,甚至人类和动物,都标上唯一识别码(Unique Identifier,如:条形码、IP地址、身份证号码等),彼此之间通过约定好的通信协议,利用互联网相连、分享数据。

  物联网不仅是两个设备之间的互相连接,它们通常也连接到负责收集数据,以及协调这些设备运作的(云)服务器。此外,控制器、传感器等物联网设备,通常也都要具备让用户操作和监控的界面,无论是网页还是App形式。下面是物联网的基本架构:

  可连接互联网设备的数量,在2011年时超越地球总人口数。这些设备包含消费性电子产品、工厂机器、家电、医疗器材、传感器等。以往,数据通过人力输入到计算机(例如,抄录水、电、燃气用量),现在多半则是由设备直接提供数据给另一个设备。

  举例而言,你的手机认得“你”和“家人”,当你的小孩抵达校园时,“学校”会自动发送短信通知;手机可以记录你的运动习惯并协调智能型温控器,在你到家之前调整好室温:若是下班快抵达家门时,手机可以自动过滤公司电话,并通知住家的房子自动打开车库门。宅配的货车可实时更新网购商品位置和预计送达时间,也能读取送货路线的交通状况,并适时提醒或规划避开车流量大的路线。

  所以,机器和机器相互连接、协同合作(Machine to Machine, M2M),就能完成代理人或者贴身秘书的工作。随着宽带网络基础建设的普及、各式云服务推陈出新,加上传感器、通信芯片和单片机技术的提升与价格下降,使得“物联网”从概念融入真实的日常生活中。

0.1 JavaScript与物联网

  许多嵌入式系统采用的是运算性能、存储器容量相对较低的8位单片机,它们也通常采用专属的库和开发工具,并且多采用C/C++语言开发。就像电视机、空调等家电,逐渐脱离“单独”运作的时代,为了抢食物联网市场大饼,原本软硬件较为封闭的嵌入式控制器,也开始拥抱开放的互联网和Web标准。

  这股风潮,也将原本称霸Web前台技术的JavaScript(注:在网页上提供交互功能的编程语言)顺势带入物联网。例如,Pebble智能表提供的开发工具PebbleKit和Pebble.js,让你用JavaScript来开发手表的App。又如,2014年被Google收购的Nest Labs公司推出的Nest温度控制器,也有供JavaScript代码使用的API(Application Interface,应用程序接口,也就是提供让外部程序控制的渠道),因此,程序员可用JavaScript读取或调控Nest温控器的状态。基本上,凡具备Web浏览器的设备,就能运行JavaScript。

  在浏览器内操作的应用(像YouTube, Google Docs和Office 365),叫作Web应用。Web应用分成前台和后台(服务器端)两大部分,以电子邮件服务网站(如:QQ和Gmail)为例,显示在浏览器里电子邮件操作的界面(网页)是前台,提供用户填写信件的界面,负责发送邮件的则是后台。网页界面的架构通过HTML定义,外观样式由CSS定义,动态改变字体样式、大小、插入表情图案等交互功能则是用JavaScript写成的。

  JavaScript语言具有下列几个特色:

  • 所有浏览器都支持,也是网页的标准语言。
  • 语法简单,学习门槛低,容易入门。
  • 不需要特殊的开发工具,在计算机、平板电脑或手机上,用文本编辑软件和浏览器就能开发和调试JavaScript代码。
  • 有为数众多的开发者,以及书籍、网络等参考资源和示例。

用于服务器和单片机的JavaScript

  当QQ用户单击“发送”按钮之后,信件内容会从浏览器传给QQ服务器,而在服务器上运行的代码,将负责寄送信件和保存邮件等功能。不像浏览器,在服务器端运行的编程语言并没有统一,常见的语言和运行环境有PHP、ASP.NET、Ruby等。

  其实,服务器端程序也能用JavaScript语言开发。可在浏览器之外独立运行Ja¬vaScript代码的Node.js于2009年问世,并相继被沃尔玛、PayPal(在线支付款项系统)和Netflix(网飞,在线电视)等大型企业所采纳,用来建置可应付购物旺季高流量的高性能网站后台程序。

  Node.js并不是第一个可在浏览器外运行的JavaScript环境,但它是最成功的一个。

  Node.js能够在Windows、Mac OS X以及Linux系统中运行;不只是个人计算机,风靡创客的Raspberry Pi(以下称“树莓派”)、BeagleBone Black(http://beagleboard.org/BLACK),以及9美元的开源微电脑C.H.I.P.(https://getchip.com/),还有基于x86处理器架构的Intel Galileo控制板也都能运行Node.js。

  某些采用32位处理器的控制板,更直接把JavaScript语言当作“母语”,例如Espruino(http://espruino.com/)和Tessel 2(http://tessel.io/),而三星电子公司在2015年5月发表了一个“瘦身”版的JavaScript语言,叫作JerryScript(https://samsung.github.io/jerryscript/),可运用在仅有64KB内存的单片机上。换句话说,在这些控制板上读取和设置I/O脚,都用JavaScript。因此,从前台网页、后台服务器,到单片机和传感器终端,都能用相同的JavaScript语言编写;学习JavaScript,也就能同时掌控前台、后台和感测端的软硬件!

0.2 MPU、MCU与SoC介绍

  处理器芯片依照功能来区分,大致分成如下三种类型。

  MPU:全名是Microprocessor Unit(微处理器单元),其实就是CPU(中央处理器),可运行指令,进行运算和逻辑处理。

  MCU:全名是Microcontroller Unit(单片机),把微处理器(MPU)和快闪存储器、主存储器(内存)包在同一个芯片里,相当于一台微型计算机,耗电量低,但是处理器的性能不高(时钟频率在200MHz以内),而且存储器容量不大(以KB为单位)。

  当今的MCU通常也会集成模拟-数字转换器(模数转换)、USB和其他外围界面控制器。Arduino UNO的ATmega328芯片属于MCU。

  SoC:全称为System on a Chip(系统芯片),集成微处理器和特定功能,例如,图像处理单元(显示卡)、WiFi网络、蓝牙、音效处理等。智能手机以及某些个人计算机的处理器,都属于SoC。采用这类处理器的设备,通常需要较高速的运算性能(时钟频率达数百MHz至数GHz)以及较大的存储器容量(单位是MB或GB),所以存储器不在同一个芯片上,耗电量也较大。

  树莓派的处理器芯片属于SoC。就功能而言,SoC大于MCU:

  以穿戴设备应用来说,MCU足以胜任普通数字手环所需,而且能长时间运作;具备多媒体功能的智能手表,就必须采用SoC。某些智能手表甚至同时搭载SoC和MCU,前者处理复杂的多媒体运算,后者用于连接传感器以及电源管理。

0.3 章节导读

  第1章JavaScript入门:介绍JavaScript的由来、基础语法、浏览器的DOM(文档对象模型)、事件处理程序、使用Chrome浏览器调试JavaScript代码、在网页中嵌入JavaScript代码等主题。

  第2章 认识jQuery库:jQuery是当今使用最广泛的JavaScript库,主要作用是让动态网页开发变得更简单。本章将通过集成Arduino以太网络与jQueryUI(交互界面)程序,带领读者认识jQuery语法、网页信息交换格式(CSV、XML和JSON)和“不刷新网页,动态更新内容”的AJAX技术。

  第3章Node.js入门:Node.js是一个独立的JavaScript运行环境,可以让我们使用JavaScript开发应用,在浏览器之外运行。本章将介绍Windows、Mac OS X和Linux(树莓派)系统的Node.js安装方式,并通过非阻塞I/O读取文件、自定义与引用程序模块、使用npm工具管理模块、使用Express框架开发网站应用、从Arduino传递温湿度值给Node网站等数个实例认识Node.js。

  第4章Node.js串口通信与树莓派GPIO控制:串口是连接Arduino与个人计算机和Linux微电脑控制板最常用的界面。GPIO则是树莓派控制板的标准外围界面,本章除了介绍如何使用Node.js连接与控制串口和GPIO界面,也将介绍GPIO界面集成自制Arduino控制板的方法,还有MOSFET电子元器件,以及通过MOSFET组成5V和3.3V的电压转换板。

  第5章 使用霹雳五号操控Arduino:Johnny-Five(霹雳五号)是一个Node.js库,让计算机(或Linux微电脑控制板)以JavaScript程序操控连接在USB接口的Arduino。本章将比较“霹雳五号”与Arduino的C语法异同,并且通过读取开关(数字)信号、模拟输入和PWM输出、LM35温度传感器、舵机控制,还有浏览器与矩阵LED作画等实例,让读者了解“霹雳五号”和网页实时通信程序(socket.io)。

  第6章 电子邮件、串流视频、计算机视觉与操控舵机:本章的示例以树莓派摄像头为主,第一个示例搭配PIR人体红外传感器,在侦测到入侵者时,自动拍照并发送E-mail。第二个示例介绍使用socket.io和M-JPEG压缩程序,在网页上显示串流视频。第三个示例介绍简易的摄像头+DIY舵机云台,并通过触控屏、键盘和电玩把手控制云台。最后一个例子是在计算机的浏览器上,通过JavaScript撷取摄像头的视频,并侦测其中是否有人类脸孔,若有的话,控制舵机跟着脸孔转动。

  第7章 使用MongoDB数据库以及ejs模板引擎创建动态网页:MongoDB是一款适合处理大数据与物联网数据的免费、开源数据库,本章将介绍MongoDB的安装方式、基本架构以及数据的添加、撷取(筛选)、修改和删除等基本操作,并通过Node.js的Mongoose包(package)连接数据库,存储Arduino上传的数据。

  第8章 数据可视化——使用C3.js与D3.js绘制图表:若只在网页上用文、数字列举数据,未免太乏味,本章将介绍如何采用知名的C3.js和D3.js库,以活泼生动的量表(gague)和图表(chart)形式呈现存储在MongoDB数据库里的数据,以及Arduino传入的实时数据,并且通过简易的数字滤波手法过滤噪声。

  本文选自《完美图解物联网IoT实操》,点此链接可在博文视点官网查看此书。
                 
                
  想及时获得更多精彩文章,可在微信中搜索“博文视点”或者扫描下方二维码并关注。
                    

无所不在的JavaScript与物联网设备相关推荐

  1. 无所不在的物联网设备 你我都需要正视所带来的安全问题

    在2017年信息安全大会中,Hitcon Girls共同创办人赖婕芳与沈祈恩认为,目前物联网设备的应用会越来越普遍,但与其有关的安全事件频传,因此无论是制作的厂商,还是企业乃至于个人,都应该提高警觉, ...

  2. OTA固件升级对于物联网设备的重要性

    物联网(IoT)代表着一个重要的发展趋势,逐渐将日常生活中的各个方面相互连接在一起.不同于早期的路由器等无线设备(每个房间或者办公室安装一个)在数量上的局限性,物联网将会非常深入的渗透到方方面面,并且 ...

  3. 【基于Web攻击】的方式发现并攻击物联网设备,又是一个入狱小技巧

    近二十年来,DNS重绑定(DNS rebinding)攻击一直是讨论的话题.尽管浏览器厂商做出了努力,但仍然无法找到一个能稳定抵御这些攻击的防御系统.据说这类问题八年前就已经被修复了.但是这类攻击通过 ...

  4. JavaScript在物联网中的应用

    凡是能用JavaScript写出来的,最终都会用JavaScript写出来. -- Atwood定律 在那篇<最流行的编程语言JavaScript能做什么?>里,我们列举了JavaScri ...

  5. 物联网设备和应用程序涉及协议的概述

    物联网设备和应用程序涉及协议的概述. 帮助澄清IoT层技术栈和头对头比较. 物联网涵盖了广泛的行业和用例,从单一受限制的设备扩展到大量跨平台部署嵌入式技术和实时连接的云系统. 将它们捆绑在一起是许多传 ...

  6. 物联网设备连接的下一个引爆点:4G Cat.1

    不看这几篇好文,就别说自己了解物联网 一.背景 物联网从概念兴起至今已经过了好几些年了.何为物联网,首先要定义何为"物"(Things),笔者理解所有具备连接能力的设备都可以是物, ...

  7. 2021年大数据Spark(五十一):Structured Streaming 物联网设备数据分析

    目录 ​​​​​​​物联网设备数据分析 ​​​​​​​设备监控数据准备 ​​​​​​​创建Topic ​​​​​​​模拟数据 ​​​​​​​SQL风格 ​​​​​​​DSL风格 物联网设备数据分析 在 ...

  8. 物联网设备僵尸网络趋势分析

    物联网(IoT)僵尸网络作者正在适应更安全的物联网设备的转变,这已经将***者的注意力转移到利用物联网设备的漏洞上.由于物联网设备安全性仍处于起步阶段,因此发现命令注入等基本漏洞并不少见. 2018年 ...

  9. 移动设备感染率及物联网设备安全漏洞数量创下历史新高

    诺基亚近日发布最新<威胁情报报告>.报告显示,移动设备恶意软件感染率创下历史新高,受攻击智能手机及主要物联网设备安全漏洞的数量出现大幅增长. <诺基亚威胁情报报告>每年发布两次 ...

最新文章

  1. js下拉 selenium_selenium 常见面试题以及答案(Java版)
  2. kappa一致性检验教程_SPSS在线_SPSSAU_Kappa一致性检验
  3. 2020-WEB开发路线图,和即将到来的 2021-WEB技术清单
  4. python创建字符串数组_如何创建任意长度字符串的numpy数组?
  5. 使用存储过程(22)
  6. [振动力学]期中复习
  7. 单元测试的四大具体效益
  8. 查看google chrome版本号及浏览器驱动下载
  9. C语言会场安排问题贪心算法,贪心算法解决会场安排问题多处最优服务次序问题(含源代码).doc...
  10. 记录:txt文本分割命令,用于notepad++无法打开情况下分割文件
  11. android listview 数据混乱,求解,listView里面嵌套listView数据显示混乱
  12. 【嵌入式系统开发08】STM32F103C8T6搭建电路实现流水灯详解
  13. matlab空间面板门槛,重磅!这可能是最全的面板门槛回归汇总了
  14. Linux内核ncsi驱动源码分析(二)
  15. 刚刚!蚂蚁全部互联网存款产品下架;阿里辟谣:被中央联合调查纯属谣言!...
  16. 删除单向链表的最后一个节点
  17. 华为双系统手机可以刷成单系统_华为手机双系统,1部手机能当2部用,打开3秒就能切换,真厉害...
  18. java毕业设计基于的高校教室申请管理系统mybatis+源码+调试部署+系统+数据库+lw
  19. Q-criterion- definition and post-processing
  20. 养眼的大自然色卡,设计师必备

热门文章

  1. 来自谷歌大脑的SpineNet:一种非常规的主干结构
  2. android studio 使用 jni 编译 opencv 完整实例 之 图像边缘检测!从此在andrid中自由使用 图像匹配、识别、检测...
  3. Tinh Lo Cach Xa 人离情逝
  4. html语言登黄鹤楼,七言律诗:登黄鹤楼
  5. python实现excel数据与mysql数据库互通有无
  6. 1 交换机的基本配置与管理
  7. 校园篮球网页作业成品 运动系列NBA篮球主题 学校篮球网页制作模板 学生简单体育运动网站设计成品
  8. 你想成为一名核心开发者吗?
  9. 网站抢单搭建什么服务器,12306抢票、嘀嘀抢单服务器如何搭建?
  10. 弄底层基础的东西往往慢,枯燥,要慢慢磨