我的物聯(lián)網(wǎng)綜合知識之創(chuàng)建網(wǎng)頁版前端

本節(jié)的主要任務是:創(chuàng)建一個html頁面,為用戶提供一個可以控制Led燈開與關的按鈕岩饼,同時籍茧,能夠展示出實時的溫度曲線。也就是說寞冯,我們通過網(wǎng)頁與服務端進行交互吮龄,下發(fā)命令,獲取數(shù)據(jù)漓帚,實現(xiàn)前端尝抖、服務端、硬件端和數(shù)據(jù)庫整個物聯(lián)網(wǎng)系統(tǒng)中的雙向數(shù)據(jù)流牵署。
具體實現(xiàn)時奴迅,我們使用百度的Echarts進行數(shù)據(jù)可視化,展示溫度曲線取具,使用jade作為html框架暇检,建立html頁面。

關于Echarts 3

Echarts是基于Canvas的构蹬,純Javascript 的圖表庫,提供直觀庄敛,生動藻烤,可交互,可個性化定制的數(shù)據(jù)可視化圖表怖亭。創(chuàng)新的拖拽重計算兴猩、數(shù)據(jù)視圖、值域漫游等特性大大增強了用戶體驗膘婶,賦予了用戶對數(shù)據(jù)進行挖掘蛀醉、整合的能力衅码。

關于jade

HTML頁面使用Jade模塊,它是Express官方默認的模板引擎垛玻,也是Node.js官方推薦的奶躯,它的寫法比較簡單和優(yōu)雅。
首先账嚎,我們安裝Jade模塊儡蔓,進入服務端的文件目錄中喂江,執(zhí)行下面的命令:
npm install jade --save

實現(xiàn)步驟

1.修改server.js服務端文件,添加以下內(nèi)容:

var path=require('path');
app.use(express.static(path.join(__dirname + '/', 'public')));
app.set('views',path.join(__dirname + '/','views'));
app.set('view engine','jade');
app.get('/',function(req,res){
'use strict';
res.render('index',{
title:'Home'
});
});


#####2.在server目錄中(和server.js同一目錄中)創(chuàng)建文件夾public/scripts涨岁,在scripts文件夾中放入需要引入的js庫文件,并且把自己寫的顯示曲線的js文件也放入其中蹬铺。至少應該包括:jquery-2.1.4.min.js沮尿、echarts.js、echarts-sensor.js(自己編寫的畜疾,調(diào)用數(shù)據(jù)啡捶,并顯示曲線)、led.js(用來控制led燈的開關)彤敛。
#####3.在server目錄中(和server.js同一目錄中)創(chuàng)建一個文件夾views了赌,在views文件夾中再創(chuàng)建一個文件index.jade,其內(nèi)容為:

doctype html
html
head
title=title
script(src='./scripts/jquery-2.1.4.min.js')
script(src='./scripts/echarts.js')
script(src='./scripts/echarts-sensor.js')
script(src='./scripts/led.js')
body
label 開關燈控制:
input(id="led",type="checkbox")
label(id="status_label")
div(id="container",style="min-width: 310px;height:400px;margin:0 auto")


#echarts-sensor.js的內(nèi)容

$(function(){
var myChart = echarts.init(document.getElementById("container"));
var temperatures=[];
var times=[];
var mydate="";
$.ajax({
type : "get",
async : true,
url : "/sensor",袄秩。
dataType : "json",
success : function(result) {
if (result) {
for(var i=0;i<result.length;i++){
temperatures.push(result[i].temperature);
times.push(result[i].time);
}
mydate=result[result.length-1].date;
}
},
error : function(errorMsg) {
alert("圖表請求數(shù)據(jù)失敗!");
}
});
myChart.setOption({
title: {
left: 'center',//標題居中
text: '傳感器數(shù)據(jù)曲線'
},
tooltip: {},
dataZoom:[ //縮放
{
type: 'slider',//加入滑塊
start: 50,
end: 100
},
{
type: 'inside',
start: 50,
end: 100
}
],
xAxis: {
name:mydate,
nameGap:'55',
nameRotate:'-45',
data: times
},
yAxis: [
{
type : 'value',
axisLabel : {
formatter: '{value} °C'
},
splitLine : {show : true}
}
],

    series: [{
        type: 'line',
       
        data: temperatures
    }]
});

setInterval(function () {
$.ajax({
type : "get",
async : true,
url : "/sensor",
dataType : "json",
success : function(result) {
if (result) {
for(var i=0;i<result.length;i++){
temperatures.shift();
temperatures.push(result[i].temperature);
times.shift();
times.push(result[i].time);
}
mydate=result[result.length-1].date;
myChart.setOption({
xAxis: {
name:mydate,
data: times
},
series: [{
data: temperatures
}]
});
}
},
error : function(errorMsg) {
alert("圖表請求數(shù)據(jù)失敗!");
}
});
}, 5000);
})


#led.js的內(nèi)容

$(function(){
  $.ajax({
type : "GET",
async : true,
url:"/led",
success: function(status){
if(status){
$("#led").attr("checked",status[0].status);
if (status[0].status){
$("#status_label").html("<font color=#f00>(已開!)</font>");
}else{
$("#status_label").html("<font color=#0f0>(已關砍聊!)</font>");
}
}
}
});
$("#led").click(function() {
$.ajax({
type : "PUT",
async : true,
url:"/led",
data:{status:$('#led').is(':checked')},
success: function(status){
if (status[0].status){
$("#status_label").html("<font color=#f00>(已開玻蝌!)</font>");
}else{
$("#status_label").html("<font color=#0f0>(已關!)</font>");
}
}
});
});  
}

其實疆前,最主要的是編寫兩個js文件聘萨,分別用來獲取并展示溫度數(shù)據(jù)以及下發(fā)控制命令,控制led的開與關胸完。
將服務器運行起來,執(zhí)行命令:
```node server.js```
然后爆惧,在瀏覽器中輸入:
```http://localhost:3000```
可以看到锨能,最終完成的頁面為:
![頁面效果](http://upload-images.jianshu.io/upload_images/2076272-69e00bd78ecdf80f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末址遇,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子秃殉,更是在濱河造成了極大的恐慌浸剩,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,729評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件吏恭,死亡現(xiàn)場離奇詭異砸泛,居然都是意外死亡蛆封,警方通過查閱死者的電腦和手機勾栗,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,226評論 3 399
  • 文/潘曉璐 我一進店門围俘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人簿寂,你說我怎么就攤上這事宿亡。” “怎么了克胳?”我有些...
    開封第一講書人閱讀 169,461評論 0 362
  • 文/不壞的土叔 我叫張陵漠另,是天一觀的道長。 經(jīng)常有香客問我笆搓,道長满败,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,135評論 1 300
  • 正文 為了忘掉前任着裹,我火速辦了婚禮米同,結果婚禮上,老公的妹妹穿的比我還像新娘少孝。我一直安慰自己熬苍,他們只是感情好,可當我...
    茶點故事閱讀 69,130評論 6 398
  • 文/花漫 我一把揭開白布婿脸。 她就那樣靜靜地躺著柄驻,像睡著了一般鸿脓。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上野哭,一...
    開封第一講書人閱讀 52,736評論 1 312
  • 那天拨黔,我揣著相機與錄音,去河邊找鬼城榛。 笑死,一個胖子當著我的面吹牛狠持,可吹牛的內(nèi)容都是我干的疟位。 我是一名探鬼主播,決...
    沈念sama閱讀 41,179評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼喘垂,長吁一口氣:“原來是場噩夢啊……” “哼甜刻!你這毒婦竟也來了?” 一聲冷哼從身側響起正勒,我...
    開封第一講書人閱讀 40,124評論 0 277
  • 序言:老撾萬榮一對情侶失蹤得院,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后章贞,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體祥绞,經(jīng)...
    沈念sama閱讀 46,657評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,723評論 3 342
  • 正文 我和宋清朗相戀三年鸭限,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片败京。...
    茶點故事閱讀 40,872評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡兜喻,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出赡麦,到底是詐尸還是另有隱情朴皆,我是刑警寧澤,帶...
    沈念sama閱讀 36,533評論 5 351
  • 正文 年R本政府宣布泛粹,位于F島的核電站遂铡,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏晶姊。R本人自食惡果不足惜忧便,卻給世界環(huán)境...
    茶點故事閱讀 42,213評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望帽借。 院中可真熱鬧,春花似錦超歌、人聲如沸砍艾。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,700評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽脆荷。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間蜓谋,已是汗流浹背梦皮。 一陣腳步聲響...
    開封第一講書人閱讀 33,819評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留桃焕,地道東北人剑肯。 一個月前我還...
    沈念sama閱讀 49,304評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像观堂,于是被迫代替她去往敵國和親让网。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,876評論 2 361

推薦閱讀更多精彩內(nèi)容