继电器Relay:ZZR08

继电器常识:

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

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

      继电器接通时,该继电器的灯会亮。ZZR08有8个继电器,以一个字节表示其整体状态,以每位的位高(bit high)代表对应继电器的状态。例如:第一个继电器set on 时为00000001,set off 时该位为0;第二个set on 时为000000102), 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="0666", 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.Serialdevice, 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.writechrcmd))
    time.sleepW)
    a = ser.read1)
    print orda)
    b = ser.read1)
    print ordb)
    time.sleep1)

def set_relay_oni):
    ''' relay No is from 1 to 8'''
    cmd = 100 + i
    print "set relay %d on "%i)
    ser.writechrcmd))
    time.sleepW)
    ser.writechr91)) # get relay states
    a = ser.read1)
    print orda)
    time.sleepW)

def set_relay_offi):
    ''' relay No is from 1 to 8'''
    cmd = 110 + i
    print "set relay %d off"%i)
    ser.writechrcmd))
    time.sleepW)
    ser.writechr91))
    a = ser.read1)
    print orda)
    time.sleepW)
    
set_relay_off1)
# set_relay_on1)

 newer edition:

import serial
import sys, time
'''
base API of controlling Relay.
'''
class RelayControlobject):
    def __init__self, relay_id='/dev/ttyACM0', interval=0.05):
        self.relay_id = relay_id
        self.interval = interval
        self.handler = serial.Serialrelay_id, 19200, serial.EIGHTBITS, serial.PARITY_NONE, serial.STOPBITS_TWO, None)

    def get_versionself, cmd=90):
        print "get the relay software version"
        self.handler.writechrcmd))
        time.sleepself.interval)
        a = self.handler.read1)
        print orda)
        b = self.handler.read1)
        print ordb)
        time.sleep1)

    def get_relay_statusself, cmd=91):
        self.handler.writechrcmd))
        a = self.handler.read1)
        print orda)
        time.sleepself.interval)
        return orda)

    def set_relay_onself, relay_no):
        ''' relay No is from 1 to 8'''
        cmd = 100 + relay_no
        print "set relay %d on "%relay_no)
        self.handler.writechrcmd))
        time.sleepself.interval)
        self.get_relay_status)

    def set_relay_offself, relay_no):
        ''' relay No is from 1 to 8'''
        cmd = 110 + relay_no
        print "set relay %d off"%relay_no)
        self.handler.writechrcmd))
        time.sleepself.interval)
        self.get_relay_status)

    def set_all_relay_onself, cmd=100):
        print "set all relays on "
        self.handler.writechrcmd))
        time.sleepself.interval)
        self.get_relay_status)

    def set_all_relay_onself, cmd=110):
        print "set all relays off "
        self.handler.writechrcmd))
        time.sleepself.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

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注