DIY物聯(lián)網(wǎng)應(yīng)用 3-控制繼電器

在上一章《我的第一個(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)圖

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


電磁信號(hào)繼電器

大家回憶一下中學(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)扇和紅外接收器。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,983評(píng)論 6 537
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,772評(píng)論 3 422
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,947評(píng)論 0 381
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,201評(píng)論 1 315
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,960評(píng)論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,350評(píng)論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,406評(píng)論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,549評(píng)論 0 289
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,104評(píng)論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,914評(píng)論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,089評(píng)論 1 371
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,647評(píng)論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,340評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,753評(píng)論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,007評(píng)論 1 289
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,834評(píng)論 3 395
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,106評(píng)論 2 375

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