上次APP開(kāi)發(fā)android,ios實(shí)現(xiàn)了溫濕度器采集至云端,wifi功能二次開(kāi)發(fā)。
這次我們來(lái)實(shí)現(xiàn)通過(guò)arduino測(cè)量室內(nèi)溫度并在瀏覽器上顯示出來(lái)。
【所需材料】
硬件:LM35溫度傳感器,arduino uno板,面包板,若干導(dǎo)線,wifi模塊。
軟件:socket.io,cylonJs, express等
【準(zhǔn)備-硬件部分】
1、首先當(dāng)然是連接電路板:
注意這個(gè)ANALOG IN是傳感器的輸入,就是讀取溫度的入口。
看看我連的:
2、然后按照 nodejs操作arduino入門(mén)篇先連接上arduino試試吧。
【準(zhǔn)備-軟件部分】
1、安裝socket.io,express,package.json中這樣寫(xiě):
{
"name": "robot",
"version": "1.0.0",
"description": "robot",
"main": "main.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "yourname",
"license": "ISC",
"devDependencies": {
"cheerio": "^0.22.0",
"cylon-firmata": "*"
},
"dependencies": {
"cylon-firmata": "^0.24.0",
"cylon-gpio": "^0.29.0",
"cylon-i2c": "^0.26.1",
"express": "^4.14.0",
"socket.io": "^1.5.0"
}
}
執(zhí)行npm install安裝依賴包
2、編寫(xiě)主文件,就是讀取溫度,在main.js中寫(xiě)入:
var Cylon = require('cylon');
var express = require('express');
var http = require('http');
var app = express;
var server = http.Server(app);
var io = require('socket.io')(server);
var port = 3000;
app.use(express.static(__dirname+'/'));//設(shè)置靜態(tài)文件目錄
app.get('/',function(req,res){
res.sendFile('index.html');//渲染一個(gè)html文件,在這個(gè)html文件中來(lái)展示溫度
});
server.listen(port,function{
console.log("正在監(jiān)聽(tīng)%d端口...",port);
});
Cylon.api('http');
Cylon.robot({
connections: {
arduino: { adaptor: 'firmata', port: '/dev/cu.wchusbserial1420' }
},
devices: {
sensor: { driver: 'analog-sensor', pin: 2, lowerLimit: 100, upperLimit: 900 }//2號(hào)analog in口,后面是最低和最高讀取值
},
work: function(my) {
var analogValue = 0;
io.on('connection', function(socket){
every((1).second, function {//頻率是1Hz,就是1秒讀取一次溫度
analogValue = my.sensor.analogRead;//讀取傳感器數(shù)值
io.emit('news', (analogValue*500/1023).toFixed(1));//analogValue*500/1023是將傳感器數(shù)值轉(zhuǎn)換成攝氏度。取一位小數(shù)
//用socket.io把數(shù)值綁定在news這個(gè)名字上,前端也會(huì)用這個(gè)名字來(lái)讀取這個(gè)值
});
console.log('a user connected');
socket.on('disconnect', function{
console.log('user disconnected');
});
});
}
}).start;
3、前端代碼--index.html:
當(dāng)前溫度是:--
抱歉上面花屏了:
var socket = io;
socket.on('news',function(msg){
$('#t').text(msg+'\'C');
});
然后執(zhí)行node main.js,在瀏覽器中輸入localhost:3000應(yīng)該就能看到效果,再貼上css代碼:
html,body{
margin: 0;
padding: 0;
background-color: #242424;
}
.temperature{
color: white;
width: 400px;
height: 400px;
position: absolute;
margin: auto;
left: 0;
right: 0;
top: 0;
bottom: 0;
text-align: center;
line-height: 400px;
}
.t-val {
font-size: 40px;
font-family: KaiTi;
}
然后看執(zhí)行效果:頁(yè)面刷新之后我就用手指捏住傳感器,所以溫度上升,松開(kāi)又下降了。然后我去看了看公司的空調(diào)設(shè)置溫度是25.5(傳感器一開(kāi)始顯示的是25.4),有圖為證:
目前只是實(shí)現(xiàn)了在本地wifi溫濕度器,之后我再研究研究怎么連接到服務(wù)器,初步的思路有:
1、使用樹(shù)莓派,將arduino連接樹(shù)莓派,再在樹(shù)莓派上搭建服務(wù)器,再用花生棒或者其他端口映射的方法連接到公網(wǎng),這樣就能在公網(wǎng)上看到數(shù)據(jù)。
2、通過(guò)Ethernet擴(kuò)展板實(shí)現(xiàn)網(wǎng)絡(luò)遠(yuǎn)程訪問(wèn)
3、使用 wifi模塊,再連接路由器實(shí)現(xiàn)網(wǎng)絡(luò)訪問(wèn)(網(wǎng)上說(shuō)的是推薦 esp8266模塊,經(jīng)濟(jì)實(shí)惠)
4、GPRS模塊,這個(gè)可以讓arduino移動(dòng)到任何地方,但是感覺(jué)如果要做到一直測(cè)的話,電話卡的流量得很多啊,這個(gè)我也只是瞎猜,沒(méi)用過(guò)。