日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

使用JavaScript和MQTT開發物聯網應用示例解析

瀏覽:149日期:2023-10-18 14:14:49

如果說Java和C#哪個是最好的開發語言,無疑會挑起程序員之間的相互怒懟,那如果說JavaScript是動態性最好的語言,相信大家都不會有太大的爭議。隨著越來越多的硬件平臺和開發板開始支持JavaScript,JavaScript在硬件端以及物聯網領域有了新的機會。

IoT應用開發的數據鏈路

圖1是一個智能家居物聯平臺的數據鏈路。

使用JavaScript和MQTT開發物聯網應用示例解析

圖1 智能家居物聯平臺的數據鏈路

一般來說,可以把IoT應用分為如圖所示的四層。

client層:指的是IoT設備,可以是冰箱、空調,也可以是一些溫濕度傳感器。 gateway層:大多數場景中gateway是家里的WiFi路由器,也有小部分是基于Zigbee或藍牙的網關設備。智能生活場景中的gateway數量相對于工業領域要少很多,在工業領域存在大量的邊緣計算放在gateway層進行處理(霧計算)。 cloud云層:這里是集中處理業務的地方。 應用層:這一層是直接與用戶打交道的地方,可以是通過電腦的Web瀏覽器、手機App,也可以是有屏幕的智能設備的顯示器。隨著語音技術的發展,無屏設備也可以通過語音交互,作為一個應用存在于物聯網的交互層。

物聯設備(下文統稱為client),可以是單個設備或多個設備組成的應用場景。比如冰箱把運行的功耗數據、庫存數據、溫度數據采集,通過gateway發送到cloud層,cloud層收集數據后進行異常判斷,做智能模式推薦等業務處理后到application層進行展現和交互。用戶可以通過冰箱的設備數據進行模式選擇,還可以做一些與設備無關的增值服務,比如聽音樂、買菜等,這就是一個智能冰箱的數據鏈路。還有些client是成組智能場景的,比如溫濕度傳感器將數據上傳到cloud,經過處理和加工,動態控制家中空調的溫度,調節空氣凈化器的運行模式等。這么描述好像沒有體現出cloud層的作用,那如果運行模式是用戶預先配置好的呢?如“當溫度超過25度,請幫我打開空調”,這些業務都可以通過cloud層進行處理。

client層的連接方式有WiFi、Bluetooth、Zigbee,而MQTT是為了讓物聯網設備更加互聯互通而出現的應用層數據協議。

MQTT+JavaScript

MQTT是一個長連接的通訊應用層協議,最大的特點是數據精簡、消息可靠、Publish-Subscribe模式靈活易用。MQTT已經成為IoT傳輸的標準協議,應用非常廣泛。

圖2中Client指的是物聯網設備。Client通過對Topic的訂閱和發布數據管理應用中的數據流動,而Broker是MQTT應用中用于管理Topic的角色。Server是物聯網應用中的服務端,用于處理業務邏輯。

使用JavaScript和MQTT開發物聯網應用示例解析

圖2 MQTT的數據鏈路圖

MQTT被廣泛使用的一個重要的原因是MQTT的生態非常完善,同時也支持JavaScript。因此圖2所示的所有鏈路和模塊,都可以通過JavaScript實現。

使用JavaScript和MQTT開發物聯網應用示例解析

圖3 JavaScript在MQTT架構中常用的架構

JavaScript在MQTT架構中常用的框架

mosca(https://github.com/mcollina/mosca) mosca是一個用JavaScript實現的MQTT Broker。不僅如此,mosca還增加了對數據庫,如Redis、MongoDB的支持,用來實現消息數據的存儲。

MQTT.js(https://github.com/mqttjs/MQTT.js) MQTT.js是官網推薦的JavaScript實現的Client端。

KOA和Express 這兩者都是非常主流的Node版本的Server,簡單易用。

實戰物聯網應用

這節我們運用之前介紹的框架,自己動手完成一個簡單的物聯網應用。應用場景如圖4所示,溫度傳感器用于接收溫度,并把文檔通過MQTT發送到Server端,在Server端進行業務處理,根據溫度計算出穿衣提示,通過MQTT把數據發送到特定的Topic,App訂閱Topic獲取數據后進行展現。

使用JavaScript和MQTT開發物聯網應用示例解析

圖4 “穿衣提示”業務場景框架

Broker端的實現

Broker端使用mosca,參考網頁https://github.com/mcollina/mosca。

安裝mosca。

nmp install mosca --save

啟動mosca。這里需要注意,如果本地沒有配置MongoDB,則需要把ascoltatore中的內容全部注釋掉。

var mosca = require(’mosca’);var ascoltatore = { //using ascoltatore // type: ’mongo’, // url: ’mongodb://localhost:27017/mqtt’, // pubsubCollection: ’ascoltatori’, // mongo: {}};var settings = { port: 1883, backend: ascoltatore};var server = new mosca.Server(settings);server.on(’clientConnected’, function(client) { console.log(’client connected’, client.id);});// fired when a message is receivedserver.on(’published’, function(packet, client) { console.log(’Published’, packet.payload); //{'clientId':'mqttjs_02fea7b4','topic':'/tips'} // console.log(’>>>packet’, packet); //{'clientId':'mqttjs_02fea7b4','topic':'/tips'}});server.on(’ready’, setup);// fired when the mqtt server is readyfunction setup() { console.log(’Mosca server is up and running’);}

代碼完成后,啟動文件,本地的一個Broker就跑在localhost的1883端口上了。

Client端的溫度傳感器實現

Client使用MQTT.js實現,參考網頁https://github.com/mqttjs/MQTT.js

安裝

npm install mqtt --save

啟動

var mqtt = require(’mqtt’);var client = mqtt.connect(’mqtt://localhost:1883’);client.on(’connect’, function () { console.log(’>>> connected’) // client.subscribe(’/tips’) setInterval( ()=>{client.publish(’/temperature’, ’30’);}, 3000 );})client.on(’message’, function (topic, message) { // message is Buffer console.log(message.toString())})// client.end();

執行Node index后Client就啟動了,可以看到在MQTT.connect方法中連接了上一節中啟動的Broker地址,連接成功后,Client會輸出日志,“>>> connected”,Broker的控制臺也會輸出Client的連接信息。

這里模擬了溫度傳感器,定時3秒向/temperature的Topic中發送溫度數據。

本節的溫度器可以在電腦中使用Node方式運行,也可以運行在支持JavaScript的開發板中,如RUFF、NodeMCU、Raspberry Pi,并且可以使用真實的傳感器。

Server的實現

Server使用MQTT.js訂閱Client發送到/temperature Topic的數據進行處理,把處理后的數據轉譯成JSON發送到另一業務主題/tips中。

實現代碼如下:

’use strict’const mqtt = require(’mqtt’);var client = mqtt.connect(’mqtt://localhost:1883’);client.on(’connect’, function () { console.log(’>>> connected’); client.subscribe(’/temperature’);})client.on(’message’, function (topic, message) { var temperature = parseInt(message.toString()); var data = {temperature}; if (temperature >= 60) { data.tips = '熱... 500服務器故障'; } else if (temperature >= 50) { data.tips = '今天天氣非常熱,建議不要穿衣服了'; } else if (temperature >= 40) { data.tips = '今天天氣十分的熱,建議穿短袖T恤+短褲'; } else if (temperature >= 30) { data.tips = '今天天氣有點的熱,建議穿短袖T恤'; } else if (temperature >= 0) { data.tips = '今天天氣正好,可以穿上一件薄衣服'; } else if (temperature >= -10) { data.tips = '今天天氣十分寒冷,棉襖可以穿上一件'; } else { data.tips = '今天天氣十分十分寒冷,棉襖可以穿上二件'; } client.publish(’/tips’, JSON.stringify(data)); // if (temperature+1) {} // message is Buffer console.log(JSON.stringify(data));})

App的實現

Demo的App使用KOA啟動一個Web,在Web中展現當前溫度對應的穿衣提示,通過訂閱tips獲取數據。

安裝koa

$ npm install koa

實現代碼

’use strict’const Koa = require(’koa’);const mqtt = require(’mqtt’);const app = new Koa();var msg = {temperature:'-',tips:''};// responseapp.use(ctx => { ctx.body = '當前溫度:' + msg.temperature + '度' + 'n' + ’穿衣提示:’+msg.tips + 'n' ;});app.listen(3000);//mqttvar client = mqtt.connect(’mqtt://localhost:1883’);client.on(’connect’, function () { console.log(’>>> connected’); client.subscribe(’/tips’);})client.on(’message’, function (topic, message) { var data = JSON.parse(message.toString()); console.log(message.toString()); console.log(data.tips); msg = data; // if (temperature+1) {} // message is Buffer // let str = message.toString(); // let data = JSON.parse(message); // console.log(data.tips); // msg = message.toString();})

Demo小節

本章給出了一個簡單的物聯網業務的業務場景和實現邏輯,其中Client也可以運行在電腦上進行Demo查看,或是跑在真實物聯設備或開發版上。如圖5,筆者使用RUFF開發板實現了一次。

使用JavaScript和MQTT開發物聯網應用示例解析

圖5 Demo硬件演示

完整Demo代碼已經分享在github中,大家可以輸入URL下載。 https://github.com/coolnameismy/javascript-mqtt-demo-wearingTip

總結

本文和大家交流了物聯網應用的一般數據鏈路、MQTT協議的架構,并基于MQTT實現了一個簡單的物聯網應用。

現在正是前端工程師的大好機會,越來越多的嵌入式設備都開始支持JavaScript,原因是現在有很多JavaScript引擎可以把JavaScript轉換成各種平臺的底層代碼,比較有名的有Jerryscript、Duktape等。隨著越來越多的JavaScript工程師進入嵌入式開發的領域,嵌入式應用開發也會出現前后端分離的情況(應用開發或是驅動開發),類似于Web開發的前后端分離。前端關注在應用、創意、數據鏈路、用戶體現上,而后端則關心GPIO、I2C的底層數據接口和驅動,平臺兼容性等方向。

到此這篇關于使用JavaScript和MQTT開發物聯網應用示例解析的文章就介紹到這了,更多相關JavaScript和MQTT開發物聯網應用內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: JavaScript
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产日产精品_国产精品毛片| 国产视频一区免费看| 欧美在线日韩| 亚洲高清不卡| 国产亚洲电影| 清纯唯美亚洲综合一区| 亚洲va久久久噜噜噜久久| 午夜欧美在线| 亚洲精品一区二区妖精| 蜜臀久久久久久久| 肉色欧美久久久久久久免费看 | 国产日韩欧美三级| 免费观看久久久4p| 久久香蕉网站| 日韩和欧美一区二区三区| 久久99青青| 国产一级一区二区| 国产欧美一区二区三区精品酒店| 男人天堂欧美日韩| 国产综合欧美| 国产成人精品亚洲线观看 | 色欧美自拍视频| 黄色亚洲在线| 久久国产中文字幕| 视频精品一区二区| 麻豆精品视频在线观看免费| 高清日韩欧美| 羞羞答答国产精品www一本| 精品视频自拍| 欧美成人亚洲| 日本中文字幕不卡| 欧美亚洲tv| 久久99影视| 99精品一区| 美女日韩在线中文字幕| 91精品日本| 激情久久99| 午夜av成人| 视频在线观看国产精品| 欧美日本一区| 电影天堂国产精品| 免费国产亚洲视频| 日本欧美一区二区| 成人在线视频区| 黄色亚洲免费| 国产精品99久久免费观看| 中文字幕系列一区| 日韩专区一卡二卡| 麻豆国产一区| 极品裸体白嫩激情啪啪国产精品| 视频在线观看一区| 久久精品国产成人一区二区三区| 午夜av不卡| 国产农村妇女精品一区二区| 国产亚洲欧美日韩精品一区二区三区 | 欧美freesex黑人又粗又大| 欧美日韩国产综合网| 亚洲天堂免费| 国语精品一区| 中文字幕日韩高清在线| 激情不卡一区二区三区视频在线| 九九久久婷婷| 国产高清日韩| 欧美在线综合| 欧美国产小视频| 鲁大师影院一区二区三区| 国产精品伦一区二区| 欧美国产91| 国产九九精品| 欧美日韩国产免费观看| 日本va欧美va精品发布| 久久人人97超碰国产公开结果| 奶水喷射视频一区| 成人在线视频中文字幕| 亚洲一区欧美| 婷婷激情一区| 老牛国内精品亚洲成av人片 | 精品高清久久| 综合激情五月婷婷| 午夜av不卡| 国产精品v日韩精品v欧美精品网站| 91精品1区| 精品深夜福利视频| 亚洲一二av| 成人美女视频| 欧美一区二区三区免费看| 999久久久精品国产| 国产经典一区| 久久精品在线| 麻豆成人综合网| 日本中文字幕视频一区| 婷婷综合亚洲| 欧美好骚综合网| 国产精品亚洲一区二区在线观看| 久久精品欧洲| 国产色99精品9i| 老司机精品久久| 亚洲婷婷免费| av综合电影网站| 欧美日韩18| 麻豆9191精品国产| 激情婷婷久久| 亚洲天堂免费电影| 日韩综合在线| 麻豆国产欧美一区二区三区| 综合在线一区| 免费视频久久| 午夜在线视频观看日韩17c| 国产91精品对白在线播放| 国产一区一一区高清不卡| 国产精品一二| 国产精品三级| 久久国产精品免费一区二区三区| 综合一区av| 亚洲欧美日韩国产一区二区| 久久久久美女| 欧美日韩视频网站| 国产aⅴ精品一区二区三区久久| 国产日本久久| 国产亚洲字幕| 国产精品麻豆成人av电影艾秋| 欧美日韩夜夜| 欧美在线观看天堂一区二区三区| 日韩欧美美女在线观看| 综合一区在线| 日韩激情视频网站| 日韩精品免费视频一区二区三区| 中文字幕乱码亚洲无线精品一区| 蜜臀av性久久久久蜜臀aⅴ四虎| 亚洲精品国产偷自在线观看| 婷婷综合在线| 亚洲一卡久久| 婷婷亚洲成人| 日本免费一区二区视频| 水蜜桃精品av一区二区| 欧美丰满日韩| 999国产精品999久久久久久| 不卡中文一二三区| 国产毛片久久| 日韩欧美美女在线观看| 国产精品久久久一区二区| 欧美激情麻豆| 国产成人在线中文字幕| 日韩欧美视频专区| 久久免费高清| 一区二区视频欧美| 一本一道久久a久久| 亚洲另类av| 欧美天堂一区| 成人一二三区| 亚洲先锋成人| 免费一区二区视频| 日本午夜精品视频在线观看| 鲁大师精品99久久久| 日韩欧美午夜| 亚洲一区网站| 欧美在线黄色| 91视频精品| 午夜视频精品| 日韩精选在线| 精品亚洲二区| 91久久国产| 91欧美日韩在线| 精品国产乱码久久久久久樱花| 日韩大片在线播放| 亚洲欧美日本日韩| 国产精品亚洲一区二区在线观看| 国产精品99久久精品| 欧美午夜精品一区二区三区电影| 国产亚洲毛片| 国产欧美日韩一级| 色爱av综合网| 亚洲欧洲美洲国产香蕉| 麻豆精品视频在线| 久久亚洲成人| 国产日韩欧美三级| 97人人精品| 国产精品亚洲一区二区在线观看| 日韩福利视频网| 国产丝袜一区| 麻豆成全视频免费观看在线看| 91成人精品在线| 捆绑调教美女网站视频一区| 免费人成精品欧美精品| 国产亚洲精品v| 国产美女视频一区二区| 天使萌一区二区三区免费观看| 日韩欧美一区二区三区在线视频| 久久久久九九精品影院| 国产亚洲欧美日韩在线观看一区二区 | 超碰超碰人人人人精品| 午夜亚洲福利| 久久精品一区二区国产| 神马日本精品| 国产精品欧美大片| 国产精品试看| 精品国产美女a久久9999| 一区二区电影在线观看| 日产午夜精品一线二线三线| 中文字幕视频精品一区二区三区|