在上一章《我的第一個物聯(lián)網(wǎng)應用 2》中,我們完成了 Ruff SDK 的安裝,開發(fā)環(huán)境已經(jīng)準備就緒,這一章我們的目標是:
- 新建一個 Ruff 項目,熟悉項目結構
- 以繼電器為例學會添加連接外設,并控制外設
下面有請這一期的主角入場。
-
Ruff 開發(fā)板:
主板 -
繼電器
繼電器
繼電器的作用
為了方便理解后面的內(nèi)容,這里先簡單科普一下繼電器的工作原理,如果你已經(jīng)知道繼電器的作用可以跳過這段內(nèi)容。
什么是繼電器?繼電器是一種通過某種信號變化來自動控制電路開關的電子設備。

上圖是最簡單的繼電器模型圖,輸出電路有三個端口:常閉、常開和公共端,默認情況下常閉端和公共端是連通的,控制端根據(jù)輸入的電信號能控制擺動條向下或向上擺,從而控制公共端和常閉端或者常開端連通。例如下圖就是一個基于電磁信號來實現(xiàn)的繼電器:

大家回憶一下中學物理課中的電磁感應原理,當線圈通電后,線圈環(huán)繞的鐵芯會產(chǎn)生磁力,在磁力的吸引作用下鐵片和常閉端斷開、和常開端聯(lián)通;當線圈斷電,鐵芯磁力消失,鐵片在彈簧拉力的作用下和常閉端聯(lián)通。 如果我們用開發(fā)板控制繼電器來控制風扇,那么電路連接情況可以如下圖:

創(chuàng)建項目
思路理清楚了,下面我們終于可以寫代碼了,開干吧!創(chuàng)建一個目錄:MyLotApp。進入項目目錄。執(zhí)行命令:
rap init
接下來命令終端會讓你輸入項目名稱、描述、作者等信息,寫過 NodeJs 的同學一定會覺得很親切,項目初始化完成之后我們來看看工程的目錄結構:

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é)點指定了程序的入口文件;ruff 節(jié)點描述工程的依賴模塊,boards 是開發(fā)板的基礎依賴模塊,dependencies 是設備的依賴模塊,我們現(xiàn)在還沒添加外設備,所以這里是空的。
app.json: 描述設備的邏輯ID(我們在添加外設時自己指定的ID)和驅(qū)動依賴包的映射關系。
test 目錄:測試代碼存放目錄。
src 目錄:源碼目錄,我們寫的代碼就放到這個目錄下。
src/index.js: 在package.json 中指定了 index.js 為項目的程序入口。
'use strict';
$.ready(function (error) {
if (error) {
console.log(error);
return;
}
$('#led-r').turnOn();
});
$.end(function () {
$('#led-r').turnOff();
});
開發(fā)板啟動完成、加載程序之后會執(zhí)行ready() 回調(diào)函數(shù),關閉之前會執(zhí)行end()回調(diào)函數(shù)。這段代碼加載后,開發(fā)板會點亮開發(fā)板上內(nèi)置的紅色led 燈?,F(xiàn)在我們讓這段初始化生成的代碼在開發(fā)板上跑起來吧,有請我們的第一位主角-Ruff 開發(fā)板出場。
啟動開發(fā)版
用 USB 連接線給 Ruff 開發(fā)板 ,開發(fā)板隨即啟動。開發(fā)版啟動后會啟動一個名字以 Ruff 開頭的 WI-FI 熱點,例如 Ruff0021332 。讓開發(fā)機(你的電腦)連上這個 WI-FI 熱點,然后就可以把代碼部署到開發(fā)板上了。
部署程序
打開終端,進入工程目錄,輸入命令:
rap deploy -s
部署成功,觀察一下開發(fā)板上紅色 led 燈是否亮了。
添加繼電器
關掉開發(fā)板電源,WIFI 切回正常使用的 WIFI。先來熟悉下 rap device add <device-id>這個命令,這個命令是用來添加外設的, 后面的參數(shù)是邏輯上的設備 ID,你可以自行定義,只要保證和其他設備 ID 不重復就行了。
rap device add relay
這里我把繼電器的 ID 定義為 relay ,回車之后 Ruff 命令行會詢問你 Module ID, 這個才是設備真正的 ID ,這個 ID 和這個硬件的驅(qū)動程序是對應的,這個 ID 在設備的包裝盒上有注明,輸入這個 ID 回車之后 Ruff SDK 會根據(jù) ID 在 Ruff 的軟件倉庫幫你尋找對應的驅(qū)動程序供你選擇安裝,如果這個設備還沒有對應的驅(qū)動程序,你可以去根據(jù) Ruff 的 API 去為它寫驅(qū)動程序,當然這是后話了。
輸入繼電器的 Module ID :RELAY-1C,回車選擇最新的驅(qū)動,然后自動到 Ruff 驅(qū)動倉庫下載繼電器的依賴模塊。完成之后觀察下項目 package.json 和 app.json 的變化,多了設備的配置信息。
安裝上設備驅(qū)動之后 rap 命令行會輸出設備針腳很開發(fā)板管腳的連接布局信息,你也可以通過 rap layout 命令來查詢布局信息,你還可以通過 rap layout --visual 這個命令查看圖形化的布局信息。

根據(jù)指示完成繼電器和主板的連線,連線過程記得關閉主板電源喲。
控制繼電器
現(xiàn)在我們可以寫程序來控制繼電器了,怎么控制?這里我們要學會去Ruff 官網(wǎng)查看每個設備驅(qū)動提供的 API 和用法。到 Ruff 的軟件倉庫:https://rap.ruff.io/搜索:

你可以直接搜索 Module ID,你也可以搜索設備名稱。搜索之后結果頁面會出現(xiàn)模塊的信息:

進入驅(qū)動頁面可以看到設備模塊對應的驅(qū)動的用法:

通過 ID,索引設備對象,這里的 ID 就是我們添加設備的時候自己定義的ID,我們定義的 ID 是"relay",所以我們可以這樣來打開繼電器(使公共端和常開端連通):
$('#relay').turnOn(function () {
// 打開繼電器成功的回調(diào)函數(shù)
console.log('turn on');
});
現(xià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 () {
// 關閉繼電器成功的回調(diào)函數(shù)
console.log('turn off');
});
});
啟動并連接開發(fā)板,重新部署程序,部署成功你會聽到繼電器發(fā)出“嗒”的一聲,說明繼電器打開成功。
至此,我們能創(chuàng)建一個應用、學會如何添加并控制外設了,下一章有請另外兩位主角:玩具小風扇和紅外接收器。

