继电器Relay:ZZR08
繼電器常識:
繼電器有三個接線柱:常開(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="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 rootdialout.
可以更改繼電器權限:chmod a+rw/dev/ttyRelayCard. 這樣壞處是,每次插拔繼電器都要更改。
繼電器的user是root, group是dialout??梢允巩斍坝脩魪膶儆赿ialout用戶組。查看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的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SAP UI5 应用 XML 视图的加载
- 下一篇: AI 威胁其生存,美国好莱坞编剧发起 1