天天看點

智能開關:orange pi one(arm linux)控制繼電器

大家都知道,繼電器是用小電流去控制大電流運作的一種“自動開關”,在我們生活、工作中随處可見。現在的“智能家居”概念,有很多功能子產品其實就是“智能開關”,遠端開關、定時開關、條件觸發開關等等。

下面介紹的“orange pi one(arm linux)控制繼電器”,就可以輕松實作“智能開關”。

orange pi 和 樹莓派一樣,是基于arm linux的開發闆,大家把它當成一台普通linux電腦用就行了。當然相比普通linux電腦,它有自己的優勢和劣勢。簡單來說,劣勢就是硬體配置低、基于arm架構,開發難度比x86稍大;優勢是:價格便宜、功耗低、可常年開機運作。

我在網上買了一個“USB控制繼電器子產品”,它內建了“USB轉TTL序列槽”和“繼電器”子產品,并且在大多數現代作業系統上是免驅的,直接插入USB接口,作業系統就能識别出來,并加載為“序列槽裝置”。在windows xp、windows 7等作業系統直接用序列槽調試軟體就可發送指令操縱它。當然,我們的樹莓派、orange pi 也可以。

智能開關:orange pi one(arm linux)控制繼電器

繼電器有NO、NC、COM三各接線端。

NO是常開(NORMAL OPEN),就是通常即未通電狀态下,是斷開的,通電後在電磁線圈的作用下(吸合)處于閉合狀态。NC是常閉(NORMAL CLOSE),就是通常即未通電狀态下,是閉合的,通電後在電磁線圈的作用下(吸合)處于斷開狀态。可選擇接NO+COM 或  NC+COM,注意:NO、NC不可同時接入,否則會發生短路。

我用的是一個“orange pi“,從官網上下載下傳了armbian  for orange pi one并燒寫進tf卡,插進開發闆,上電就可以啟動了。

把USB繼電器子產品插到開發闆的USB接口,然後在控制台輸入” cd /dev  “,再輸入”  ls “,會看到 “ ttyUSB0 ”,這就是系統加載的USB序列槽。

通過序列槽發送“A0 01 01 A2“ 可以控制繼電器吸合,發送 “A0 01 00 A1”則斷開。

現在試一試,輸入echo -n -e "\xA0\x01\x01\xA2" >/dev/ttyUSB0  ,可以聽到USB繼電器子產品“卡塔“地響一聲,說明繼電器已經吸合,如果接線方式選擇”NC+COM“,現在相當于發送”開“指令。

再輸入  echo -n -e"\xA0\x01\x00\xA1" >/dev/ttyUSB0 ,USB繼電器子產品會再“卡塔“響一聲,說明開關狀态已經改變,如果接線方式選擇”NC+COM“,現在相當于發送”關“指令。

把“開“、”關“指令分别寫到一個腳本檔案裡,如下所示:

ttyUSB0Open.sh

#!/bin/bash

echo -n -e "\xA0\x01\x01\xA2" >/dev/ttyUSB0

ttyUSB0Close.sh

#!/bin/bash

echo -n -e "\xA0\x01\x00\xA1" >/dev/ttyUSB0

那麼直接在控制台執行 ./ttyUSB0Open.sh 和  ./ttyUSB0Close.sh 也能達到控制繼電器開關的目的。

到了這一步,相信程式猿朋友已經知道怎麼實作“智能開關了“,利用自己擅長的開發語言,如c/c++、java、python 、nodejs、golang等,都可以在arm+linux下開發”上與web通訊、下與序列槽通訊“的遠端、智能應用了。

當然,也可以不調用腳本檔案,直接在應用代碼裡發送序列槽資料。

我用的是nodejs,這裡列出主要代碼:

function util_ExeCmd(cmd, param, callback) {

    var rst = {};

    var spawn =require('child_process').spawn;

    var free = spawn(cmd,param);

    free.stdout.on('data',function (data) {

        rst.out = ""+ data;

    });

    free.stderr.on('data',function (data) {

        rst.err = ""+ data;

    });

    free.on('exit', function(code, signal) {

        rst.exit ="" + code;

        callback(rst);

    });

}

router.get('/ttyusb/open', function (req, res, next) {

   console.log("open");

   util_ExeCmd("ttyUSB0Open.sh", [], function (rst) {

       res.send(JSON.stringify(rst));

    });

});

router.get('/ttyusb/close', function (req, res, next) {

   util_ExeCmd("ttyUSB0Close.sh", [], function (rst) {

       res.send(JSON.stringify(rst));

    });

});

我已經通過上面的步驟控制了一個USB照明燈,放在衛生間門口:) 但還沒有接入220V電源來控制洗衣機、電鍋、空調等,希望膽大的朋友,接入220V測試後,能告訴我,謝謝!請在保證安全第一的情況下使用220V強電。