华云数据-2019前端战略规划之物联网IOT
1、基础:物联网的三个层级开始之前, 先让我们简单地介绍点物联网的基础知识。如果你有点Web开发经验的话,都知道下图是CS架构:

3、JavaScript在物联网领域的发展两年前,NodeJS已经有了实现物联网应用的可能性。当时,已经有了物联网协议MQTT和CoAP协议的库,由于当时缺乏一些大型应用的开发经典,所以做得并不是很好,但是已经可以看到JavaScript在这方面的远景。一年多以前,Ionic还没推出正式版的时候,但是这个框架真的很棒——它自带了一系列的UI,还用NgCordova集成了Cordova的一系列插件。使用这个框架进行物联网应用开发,还需要一些原生的插件,如BLE、MQTT。后来我们不再需要编译Node.js,就可以在ARM处理器上运行Node.js。并且我们已经有Tessel、Espruino、Kinoma Create、Ruff这些可以直接运行JavaScript的开发板。三星还推出iot.js,可以让更多的嵌入式设备可以使用JavaScript语言作为开发语言。

5、不过,上图是完善版的物联网,代码自然是在GitHub上啦:Lan。作为服务端来说,Node.js的能力已经是经过验证的。而在混合应用上,仍然也可以经受住考验,混合应用在分囗拮蟀手机上做个图表是轻轻松松的事(只需要获取数据,然后显示)。Demo树莓派上是通过串口接收pm2.5传感器数据,通过IO来控制蜂鸣器和电机,通过MQTT与云服务器交互依赖。依赖wiring-pi、serialpor和MQTT这几个库。const COM = require(‘serialport’);const port = new COM(‘/dev/ttyAMAO’, { baudRate: 9600 });port.on(‘data’, function(data) {dataHandler(data);}这个代码非常简单,只要把串口的库拿进来和串口绑定,波特率两边匹配一致就行。然后port会有一个事件,有数据进来的时候进行数据处理。并且要考虑数据丢失的问题,现实中这个问题时有发生,可能做硬件的人深有体会。

6、const wpi = require(‘wiring-pi’)const BUZZER = 7;wpi.setup(‘wpi’)wpi.pinMode(BUZZER, wpi.OUTPUT);wpi.digitalWrite(BUZZER, wpi.HIGH);wpi.digitalWrite(BUZZER, wpi.LOW);wpi.digitalRead(BUZZER);上面的代码通常是硬件开发者写代码的方式。先设置工作模式,然后进行数字的写入和读取。用js来写设备端的代码还是需要懂一些硬件,否则效率不会高。const mqtt = require(‘mqtt’)const client = mqtt.connect(‘mqtt://’);client.subscibe(‘/car’);client.on(‘message’, function(topic, message){if(topic === ’/car’) {MessageHandler(message.toString());}});MQTT的部分只要把包引进来,把MQTT的代理地址和ip port之后,要知道小车的控制指令,只需注册一下所有和小车相关的事件,如果有人发了指令给代理,代理就会自动转发给你。云服务器用的是ECS,多了一个公网IP更加方便。数据传输有MQTT。数据存储可以根据数据的类型选择不同的数据库,比如mysql、mongoDB和redis。前端展现是express。主要依赖mosca、mysql、mongo、redis和express,根据不同类型选择不同的数据库进行存储。