在上一章《我的第一個(gè)物聯(lián)網(wǎng)應(yīng)用 2》中莺戒,我們完成了 Ruff SDK 的安裝伴嗡,開發(fā)環(huán)境已經(jīng)準(zhǔn)備就緒,這一章我們的目標(biāo)是:
- 新建一個(gè) Ruff 項(xiàng)目从铲,熟悉項(xiàng)目結(jié)構(gòu)
- 以繼電器為例學(xué)會(huì)添加連接外設(shè)瘪校,并控制外設(shè)
下面有請(qǐng)這一期的主角入場(chǎng)愉耙。
-
Ruff 開發(fā)板:
-
繼電器
繼電器的作用
為了方便理解后面的內(nèi)容舌镶,這里先簡(jiǎn)單科普一下繼電器的工作原理,如果你已經(jīng)知道繼電器的作用可以跳過這段內(nèi)容躺彬。
什么是繼電器伸辟?繼電器是一種通過某種信號(hào)變化來自動(dòng)控制電路開關(guān)的電子設(shè)備麻惶。
上圖是最簡(jiǎn)單的繼電器模型圖,輸出電路有三個(gè)端口:常閉信夫、常開和公共端窃蹋,默認(rèn)情況下常閉端和公共端是連通的卡啰,控制端根據(jù)輸入的電信號(hào)能控制擺動(dòng)條向下或向上擺,從而控制公共端和常閉端或者常開端連通警没。例如下圖就是一個(gè)基于電磁信號(hào)來實(shí)現(xiàn)的繼電器:
大家回憶一下中學(xué)物理課中的電磁感應(yīng)原理匈辱,當(dāng)線圈通電后,線圈環(huán)繞的鐵芯會(huì)產(chǎn)生磁力杀迹,在磁力的吸引作用下鐵片和常閉端斷開亡脸、和常開端聯(lián)通;當(dāng)線圈斷電树酪,鐵芯磁力消失浅碾,鐵片在彈簧拉力的作用下和常閉端聯(lián)通。 如果我們用開發(fā)板控制繼電器來控制風(fēng)扇嗅回,那么電路連接情況可以如下圖:
創(chuàng)建項(xiàng)目
思路理清楚了及穗,下面我們終于可以寫代碼了,開干吧绵载!創(chuàng)建一個(gè)目錄:MyLotApp埂陆。進(jìn)入項(xiàng)目目錄。執(zhí)行命令:
rap init
接下來命令終端會(huì)讓你輸入項(xiàng)目名稱娃豹、描述焚虱、作者等信息,寫過 NodeJs 的同學(xué)一定會(huì)覺得很親切懂版,項(xiàng)目初始化完成之后我們來看看工程的目錄結(jié)構(gòu):
package.json:
{
"name": "MyLotApp",
"version": "0.1.0",
"description": "My first Lot App",
"author": "dalimao",
"main": "src/index.js",
"ruff": {
"boards": {
"ruff-mbd-v1": "^4.2.0",
"*": "*"
},
"dependencies": {}
}
}
其中 main 節(jié)點(diǎn)指定了程序的入口文件鹃栽;ruff 節(jié)點(diǎn)描述工程的依賴模塊,boards 是開發(fā)板的基礎(chǔ)依賴模塊躯畴,dependencies 是設(shè)備的依賴模塊民鼓,我們現(xiàn)在還沒添加外設(shè)備,所以這里是空的蓬抄。
app.json: 描述設(shè)備的邏輯ID(我們?cè)谔砑油庠O(shè)時(shí)自己指定的ID)和驅(qū)動(dòng)依賴包的映射關(guān)系丰嘉。
test 目錄:測(cè)試代碼存放目錄。
src 目錄:源碼目錄嚷缭,我們寫的代碼就放到這個(gè)目錄下饮亏。
src/index.js: 在package.json 中指定了 index.js 為項(xiàng)目的程序入口。
'use strict';
$.ready(function (error) {
if (error) {
console.log(error);
return;
}
$('#led-r').turnOn();
});
$.end(function () {
$('#led-r').turnOff();
});
開發(fā)板啟動(dòng)完成阅爽、加載程序之后會(huì)執(zhí)行ready() 回調(diào)函數(shù)路幸,關(guān)閉之前會(huì)執(zhí)行end()回調(diào)函數(shù)。這段代碼加載后付翁,開發(fā)板會(huì)點(diǎn)亮開發(fā)板上內(nèi)置的紅色led 燈〖螂龋現(xiàn)在我們讓這段初始化生成的代碼在開發(fā)板上跑起來吧,有請(qǐng)我們的第一位主角-Ruff 開發(fā)板出場(chǎng)百侧。
啟動(dòng)開發(fā)版
用 USB 連接線給 Ruff 開發(fā)板 砰识,開發(fā)板隨即啟動(dòng)杂伟。開發(fā)版啟動(dòng)后會(huì)啟動(dòng)一個(gè)名字以 Ruff 開頭的 WI-FI 熱點(diǎn),例如 Ruff0021332 仍翰。讓開發(fā)機(jī)(你的電腦)連上這個(gè) WI-FI 熱點(diǎn),然后就可以把代碼部署到開發(fā)板上了观话。
部署程序
打開終端予借,進(jìn)入工程目錄,輸入命令:
rap deploy -s
部署成功频蛔,觀察一下開發(fā)板上紅色 led 燈是否亮了灵迫。
添加繼電器
關(guān)掉開發(fā)板電源,WIFI 切回正常使用的 WIFI晦溪。先來熟悉下 rap device add <device-id>這個(gè)命令瀑粥,這個(gè)命令是用來添加外設(shè)的, 后面的參數(shù)是邏輯上的設(shè)備 ID三圆,你可以自行定義狞换,只要保證和其他設(shè)備 ID 不重復(fù)就行了。
rap device add relay
這里我把繼電器的 ID 定義為 relay 舟肉,回車之后 Ruff 命令行會(huì)詢問你 Module ID修噪, 這個(gè)才是設(shè)備真正的 ID ,這個(gè) ID 和這個(gè)硬件的驅(qū)動(dòng)程序是對(duì)應(yīng)的路媚,這個(gè) ID 在設(shè)備的包裝盒上有注明黄琼,輸入這個(gè) ID 回車之后 Ruff SDK 會(huì)根據(jù) ID 在 Ruff 的軟件倉庫幫你尋找對(duì)應(yīng)的驅(qū)動(dòng)程序供你選擇安裝,如果這個(gè)設(shè)備還沒有對(duì)應(yīng)的驅(qū)動(dòng)程序整慎,你可以去根據(jù) Ruff 的 API 去為它寫驅(qū)動(dòng)程序脏款,當(dāng)然這是后話了。
輸入繼電器的 Module ID :RELAY-1C裤园,回車選擇最新的驅(qū)動(dòng)撤师,然后自動(dòng)到 Ruff 驅(qū)動(dòng)倉庫下載繼電器的依賴模塊。完成之后觀察下項(xiàng)目 package.json 和 app.json 的變化比然,多了設(shè)備的配置信息丈氓。
安裝上設(shè)備驅(qū)動(dòng)之后 rap 命令行會(huì)輸出設(shè)備針腳很開發(fā)板管腳的連接布局信息,你也可以通過 rap layout 命令來查詢布局信息强法,你還可以通過 rap layout --visual 這個(gè)命令查看圖形化的布局信息万俗。
根據(jù)指示完成繼電器和主板的連線,連線過程記得關(guān)閉主板電源喲饮怯。
控制繼電器
現(xiàn)在我們可以寫程序來控制繼電器了闰歪,怎么控制?這里我們要學(xué)會(huì)去Ruff 官網(wǎng)查看每個(gè)設(shè)備驅(qū)動(dòng)提供的 API 和用法蓖墅。到 Ruff 的軟件倉庫:https://rap.ruff.io/搜索:
你可以直接搜索 Module ID库倘,你也可以搜索設(shè)備名稱临扮。搜索之后結(jié)果頁面會(huì)出現(xiàn)模塊的信息:
進(jìn)入驅(qū)動(dòng)頁面可以看到設(shè)備模塊對(duì)應(yīng)的驅(qū)動(dòng)的用法:
通過 ID,索引設(shè)備對(duì)象教翩,這里的 ID 就是我們添加設(shè)備的時(shí)候自己定義的ID杆勇,我們定義的 ID 是"relay",所以我們可以這樣來打開繼電器(使公共端和常開端連通):
$('#relay').turnOn(function () {
// 打開繼電器成功的回調(diào)函數(shù)
console.log('turn on');
});
現(xiàn)在我們把打開饱亿、關(guān)閉繼電器的邏輯放到src/index.js中:
'use strict';
$.ready(function (error) {
if (error) {
console.log(error);
return;
}
$('#relay').turnOn(function () {
// 打開繼電器成功的回調(diào)函數(shù)
console.log('turn on');
});
});
$.end(function () {
$('#relay').turnOff(function () {
// 關(guān)閉繼電器成功的回調(diào)函數(shù)
console.log('turn off');
});
});
啟動(dòng)并連接開發(fā)板蚜退,重新部署程序,部署成功你會(huì)聽到繼電器發(fā)出“嗒”的一聲彪笼,說明繼電器打開成功钻注。
至此,我們能創(chuàng)建一個(gè)應(yīng)用配猫、學(xué)會(huì)如何添加并控制外設(shè)了幅恋,下一章有請(qǐng)另外兩位主角:玩具小風(fēng)扇和紅外接收器。