继电器常识:

继电器有三个接线柱:常开(NO),常闭(NC),接地(C)

如果连接的时间长,偶尔需要断电, 那么接NC 和 C, 这样继电器set on 时为断电。除此之外,继电器还可以控制按键,以及长按。

继电器接通时,该继电器的灯会亮。ZZR08有8个继电器,以一个字节表示其整体状态,以每位的位高(bit high)代表对应继电器的状态。例如:第一个继电器set on 时为00000001,set off 时该位为0;第二个set on 时为00000010(2), set off 时该位为0。以此类推.

怎样使用继电器:

1. Command “ls /dev/tty*”, you can find like this
/dev/ttyRelayCard

在接入继电器之前运行“ls /dev/tty*”, 接入之后再运行一次,多出来的就是继电器的标识。

2. Check the file /etc/udev/rules.d/ACS.rules. In this file, there have a code like

this:

SUBSYSTEMS=="usb", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60",
SYMLINK+="ttyRelayCard", MODE="", OWNER="buildbot"

If there don’t have this code, please add it by manual. And then re-plugin the

relay card’s USB cable.

    查看是否存在/etc/udev/rules.d/ACS.rules,如果不存在,则建立文件:touch ACS.rules,文件内容如上。

3. 查看权限:ls -l /dev/ttyRelayCard 结果crw-rw---- 1 root dialout.

    可以更改继电器权限:chmod a+rw /dev/ttyRelayCard. 这样坏处是,每次插拔继电器都要更改。

继电器的user是root, group是dialout。可以使当前用户从属于dialout用户组。查看user的用户组:groups user。更改user的附属用户组list: sudo usermod -G dialout,adm,...

4. python script

import serial
import sys, time
'''
ser = serial.Serial(
port=None, # number of device, numbering starts at
# zero. if everything fails, the user
# can specify a device string, note
# that this isn't portable anymore
# if no port is specified an unconfigured
# an closed serial port object is created
baudrate=9600, # baud rate
bytesize=EIGHTBITS, # number of databits
parity=PARITY_NONE, # enable parity checking
stopbits=STOPBITS_ONE, # number of stopbits
timeout=None, # set a timeout value, None for waiting forever
xonxoff=0, # enable software flow control
rtscts=0, # enable RTS/CTS flow control
interCharTimeout=None # Inter-character timeout, None to disable
)
''' device = sys.argv[1] # /dev/ttyRelayCard
ser = serial.Serial(device, 19200, serial.EIGHTBITS, serial.PARITY_NONE, serial.STOPBITS_TWO, None)
W = 0.05 def get_version():
cmd = 90
print "get the relay software version"
ser.write(chr(cmd))
time.sleep(W)
a = ser.read(1)
print ord(a)
b = ser.read(1)
print ord(b)
time.sleep(1) def set_relay_on(i):
''' relay No is from 1 to 8'''
cmd = 100 + i
print "set relay %d on "%(i)
ser.write(chr(cmd))
time.sleep(W)
ser.write(chr(91)) # get relay states
a = ser.read(1)
print ord(a)
time.sleep(W) def set_relay_off(i):
''' relay No is from 1 to 8'''
cmd = 110 + i
print "set relay %d off"%(i)
ser.write(chr(cmd))
time.sleep(W)
ser.write(chr(91))
a = ser.read(1)
print ord(a)
time.sleep(W) set_relay_off(1)
# set_relay_on(1)

newer edition:

import serial
import sys, time
'''
base API of controlling Relay.
'''
class RelayControl(object):
def __init__(self, relay_id='/dev/ttyACM0', interval=0.05):
self.relay_id = relay_id
self.interval = interval
self.handler = serial.Serial(relay_id, 19200, serial.EIGHTBITS, serial.PARITY_NONE, serial.STOPBITS_TWO, None) def get_version(self, cmd=90):
print "get the relay software version"
self.handler.write(chr(cmd))
time.sleep(self.interval)
a = self.handler.read(1)
print ord(a)
b = self.handler.read(1)
print ord(b)
time.sleep(1) def get_relay_status(self, cmd=91):
self.handler.write(chr(cmd))
a = self.handler.read(1)
print ord(a)
time.sleep(self.interval)
return ord(a) def set_relay_on(self, relay_no):
''' relay No is from 1 to 8'''
cmd = 100 + relay_no
print "set relay %d on "%(relay_no)
self.handler.write(chr(cmd))
time.sleep(self.interval)
self.get_relay_status() def set_relay_off(self, relay_no):
''' relay No is from 1 to 8'''
cmd = 110 + relay_no
print "set relay %d off"%(relay_no)
self.handler.write(chr(cmd))
time.sleep(self.interval)
self.get_relay_status() def set_all_relay_on(self, cmd=100):
print "set all relays on "
self.handler.write(chr(cmd))
time.sleep(self.interval)
self.get_relay_status() def set_all_relay_on(self, cmd=110):
print "set all relays off "
self.handler.write(chr(cmd))
time.sleep(self.interval)
self.get_relay_status()

附录

ZZR08 command Table

Command Action
Character DEC HEX  
  90 5A Get software version - returns 2 bytes, the first being the module
ID which is 8, followed by the software version
  91 5B Get relay states -
sends a single byte back to the controller, bit high
meaning the corresponding relay is powered
  92 5C Set relay states -
the next single byte will set all relays states, All on
= 255 (11111111) ,All off = 0
d 100 64 All relays on
e 101 65 Turn relay 1 on
f 102 66 Turn relay 2 on
g 103 67 Turn relay 3 on
h 104 68 Turn relay 4 on
i 105 69 Turn relay 5 on
j 106 6A Turn relay 6 on
k 107 6B Turn relay 7 on
l 108 6C Turn relay 8 on
n 110 6E All relays off
o 111 6F Turn relay 1 off
p 112 70 Turn relay 2 off
q 113 71 Turn relay 3 off
r 114 72 Turn relay 4 off
s 115 73 Turn relay 5 off
t 116 74 Turn relay 6 off
u 117 75 Turn relay 7 off
v 118 76 Turn relay 8 off

继电器Relay:ZZR08的更多相关文章

  1. 使用MUART0-P-1-2设置无线PM2.5感测环境

    信息搜集–> 处理分析–> 动作执行,这是IoT环境中最基本的组成要素,传感器搜集环境信息后,透过指定的通讯协议传送到至控制中枢,经过处理分析后再将命令送交各device端执行.要实现这样 ...

  2. 截取usb数据包,控制usb设备----Relay设备

    在项目开发当中,我们需要一个usb转继电器的设备当开关控制无线发射设备,采购部采购时并未详细了解Relay设备的运行环境就买了一批设备,之后发现设备厂家只提供了windows库,而我们是要在linux ...

  3. Arduino+RFID RC522 +继电器

    博客园的第一篇博文就献给Arduino了.不知道能不能坚持自己喜欢的并且记录下来. 起码是个好的开始. 想实现一卡通代替钥匙开启电动车. 简单的原理,通过RC522模块读取一卡通的序列号,在程序中进行 ...

  4. C# 调用继电器api usb_relay_device.dll

    C# 调用继电器api usb_relay_device.dll 代码封装 usb_relay_device.dll 为C++编写 using System; using System.Collect ...

  5. 香农的伟大论文《A Symbolic Analysis of Relay and Switching Circuits》

    香农在1938年发表的伟大论文A Symbolic Analysis of Relay and Switching Circuits(<对继电器和开关电路中的符号分析>)将开关.继电器.二 ...

  6. 花 1 小时,开源设计 LoRa 继电器开关

    提示1:锐米所有 LoRa 产品严格遵循国标标准的 LoRaWAN 协议. 提示2:您可以免费复制,修改和商用本项目,请注明锐米原创. 提示3:如果您有其他 LoRa 需求或建议,欢迎联系锐米 sup ...

  7. c# 调用c++类库控制usb继电器

    网上找不到调用此类库的文章,简单写一下,以备后用. 下面是封装后的调用c++类库的类 public class UsbRelayDeviceHelper { /// <summary> / ...

  8. 【雕爷学编程】Arduino动手做(43)---单路继电器模块

    37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的.鉴于本人手头积累了一些传感器和模块,依照实践(动手试试)出真知的理念,以学习和交流为目的,这里准备 ...

  9. 继电器是如何成为CPU的(1)

    继电器是如何成为CPU的(1) ——<穿越计算机的迷雾>整理和总结 究竟是如何设计的电路,具有计算和控制的智力? 这一点也不高深.本系列文章从初中学的最简单的电路图说起,看看能不能从最初的 ...

随机推荐

  1. [转]40多个关于人脸检测/识别的API、库和软件

    [转]40多个关于人脸检测/识别的API.库和软件 http://news.cnblogs.com/n/185616/ 英文原文:List of 40+ Face Detection / Recogn ...

  2. 引用类型a=b

    List<int> list = new List<int>(); list.Add(1); list.Add(2); list.Add(3); Cache["Key ...

  3. 30.DDR2问题2_local_init_done为什么没拉高?

    按照初始化时序,在200us时,mem_clk时钟稳定,开始初始化设置,设置完后,会产生一个初始化完成标志,local_init_done会拉高,没有拉高,可能有以下几个原因: 1.确认DDR2 IP ...

  4. 安装配置OPENCMS的Replication cluster(从)详细过程

    1.  把opencms.war拷贝到tomcat下的webapps目录,启动tomcat服务. 2.  在安装之前,打开解压缩后的war包目录(tomcat启动后会自动把war包解开),删除目录 $ ...

  5. android实现左右滑动菜单

    直接看效果图:       主要实现代码: package com.way.view; import android.content.Context; import android.media.Den ...

  6. 【Convert Sorted List to Binary Search Tree】cpp

    题目: Given a singly linked list where elements are sorted in ascending order, convert it to a height ...

  7. Netsharp快速入门(之16) Netsharp基础功能(权限管理)

    第5章     Netsharp基础功能 5.1     权限配置 5.1.1  功能权限 1.配置权限功能点,打开平台工具-基础业务-操作管理 2.选择资源节点为销售订单,点添加常用操作,添加完成后 ...

  8. UBOOT分析

    U-Boot是一个通用的Boootloader,它是在系统上电后执行的第一段程序,先初始化硬件设备,再准备软件环境,最后引导系统内核. 一般来说Bootloader的启动过程来说一般分两个阶段: 第一 ...

  9. 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5

    // test20.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include<iostream> #include< ...

  10. hdu 1548 A strange lift 宽搜bfs+优先队列

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1548 There is a strange lift.The lift can stop can at ...