智能开关: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)控制继电器的更多相关文章
- golang 2行代码在基于arm linux的树莓派、orangepi上运行http web服务
go语言(golang)简化了跨平台交叉编译步骤,支持在windows系统下交叉编译基于arm+linux平台的应用,运行时无需其它依赖库.以下以一个简单的http server为例,先上源码: ** ...
- 【Orange Pi Lite2】 ——1《如何开始使用开源硬件》
[Orange Pi Lite2] --1<如何开始使用开源硬件> 本文只在博客园发布 在开始前你需要准备的材料与软件 用户手册_Orange Pi Lite2 OrangePi_Lite ...
- 【Orange Pi Lite2】 ——2《在使用之前的配置》(未完)
[Orange Pi Lite2] --2<在使用之前的配置> 本文只在博客园发布 在开始前你需要准备的材料与软件 filezilla/或者不 声明 : 本教程适合0基础新手,本章将会介绍 ...
- How to install Armbian on Orange Pi Plus 2e
bian on Orange Pi Plus 2e How to install Armbian on Orange Pi Plus 2e Armbian on the microSD You jus ...
- orange pi pc 体验(一)
最近在淘宝上看到一款和树莓派差不多的卡片机,定价才99元,而且是国产的,忍不住入手了一个,就是orange pi 感兴趣的可以百度搜索下,深圳一个公司出的,不过资料比树莓派少了很多,论坛中人也没多少, ...
- ARM Linux Qt 5.x.x 无标题栏
/********************************************************************************* * ARM Linux Qt 5. ...
- 构建 ARM Linux 4.7.3 嵌入式开发环境 —— BusyBox 构建 RootFS
上一篇我们已经成功将 ARM Linux 4.7.3 的内核利用 U-BOOT 引导了起来.但是细心的你会发现,引导到后面,系统无法启动,出现内核恐慌 (Kernel Panic). 原因是找不到文件 ...
- 构建 ARM Linux 4.7.3 嵌入式开发环境 —— U-BOOT 引导 Kernel
经过若干天的反复测试,搜索.终于成功利用 Qemu 在 u-boot 下引导 ARM Linux 4.7.3 内核.如下详细解释整个构建过程. 准备环境 运行环境:Ubuntu 16.04 需要的虚拟 ...
- ARM Linux 3.x的设备树(Device Tree)
http://blog.csdn.net/21cnbao/article/details/8457546 宋宝华 Barry Song <21cnbao@gmail.com> 1. ...
随机推荐
- tfs强行签入和删除工作区
作者:为爱痴狂 原文:http://www.cnblogs.com/splyn/archive/2011/10/31/2230213.html 域用户被网络管理员重建,或者其他用户牵出文档,导致的TF ...
- POJ 2299 Ultra-QuickSort (树状数组 && 离散化&&逆序)
题意 : 给出一个数n(n<500,000), 再给出n个数的序列 a1.a2.....an每一个ai的范围是 0~999,999,999 要求出当通过相邻两项交换的方法进行升序排序时需要交换 ...
- Experimental Educational Round: VolBIT Formulas Blitz K
Description IT City company developing computer games decided to upgrade its way to reward its emplo ...
- JS匿名函数以及arguments.callee的调用
var res = (function (n) { if( n>1 ) { return n + arguments.callee( n-1 ); } else { ...
- zabbix监控nginx mysql 服务添加
[root@test2 ~]# rpm -ivh nginx-1.8.0-1.el7.ngx.x86_64.rpm [root@test2 ~]# cd /etc/nginx/ [root@test2 ...
- Swagger的坑
swagger.pathPatterns如果是譬如/w/.*,那么如果API中以w开头的描述就会在swagger-ui中显示不出来
- management & Actuator
self define indicator https://docs.spring.io/spring-boot/docs/current/reference/html/production-read ...
- 信息领域热词分析系统--python切词
利用python将标题切割成词语 import jieba #读取文件 f=open(r"F:\大数据\大作业\爬取到的数据\data1_xinxi.txt",'r') s=f.r ...
- 使用hive数据仓库中遇到的问题
1. 原因:hive版本过高.我用的是3.1.1最高版本,所以报此错.
- 分配一维动态数组or 二维动态数组的方法以及学习 new 方法or vector
先来个开胃菜 // 使用new动态分配存储空间 #include<iostream> using std::cout; int main() { // 第1种方式 int *a=new i ...