智能開關: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 也可以。
繼電器有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強電。
智能開關:orange pi one(arm linux)控制繼電器