继电器常识:

继电器有三个接线柱:常开(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. Android实现AppWidget、Broadcast静态注册

    Android实现AppWidget.Broadcast静态注册 本篇博客是基于我上一篇博客继续修改的,详情请看Android实现AppWidget.Broadcast动态注册 开发工具:Andori ...

  2. 一、IRIG-B 概念

    参考:http://baike.baidu.com/view/3601618.htm http://wenku.baidu.com/view/7956cd29bd64783e09122bf1.html ...

  3. urllib3 ProxyManager

    ProxyManager is an HTTP proxy-aware subclass of PoolManager. It produces a singleHTTPConnectionPool ...

  4. 邻接矩阵实现Dijkstra算法以及BFS与DFS算法

    //============================================================================ // Name : MatrixUDG.c ...

  5. Delphi 调试日子 - 莫名其妙的堆溢出

    这个是个很有意思的事情,这一个成熟的模板上更改,同样的属性,同样的方法,新的组件在载入过程中就是报错. “Stack overflow” 因为有初始化过程,担心是不是那个地方有问题,由于是在属性赋值过 ...

  6. android selector

    android 选择器的使用 1.在drawable文件夹下面建一个xml文件,如item.xml,在eclipse中有selector这个选项 2.可以在布局文件.xml(配置android:lis ...

  7. HTML统一资源定位器

    w3c 更好的解释 在OSGi in action中安装bundle时要加文本传输协议,要不然shell判断不出来

  8. 【CentOS】安装chrome

    参考资料:http://www.cnblogs.com/xia520pi/p/3545715.html 问题描述: 出现如下错误: 升级glibc任然无效,最后在博客园:http://www.cnbl ...

  9. Phyre LCUE with YEBIS cause issues about GS

    when LCUE enabled in phyreEngine when Yebis integrated and render there are two mainloopdraws in one ...

  10. 疑难杂症rendering(对角线上的线)

    postprocess全屏特效 对角线有条线 明显和buffer有关因为线由小的东西组成 就像之前没清空buffer产生的马赛克 beginscene时 clearmask 设0 ---------- ...