继电器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="", 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的更多相关文章
- 使用MUART0-P-1-2设置无线PM2.5感测环境
信息搜集–> 处理分析–> 动作执行,这是IoT环境中最基本的组成要素,传感器搜集环境信息后,透过指定的通讯协议传送到至控制中枢,经过处理分析后再将命令送交各device端执行.要实现这样 ...
- 截取usb数据包,控制usb设备----Relay设备
在项目开发当中,我们需要一个usb转继电器的设备当开关控制无线发射设备,采购部采购时并未详细了解Relay设备的运行环境就买了一批设备,之后发现设备厂家只提供了windows库,而我们是要在linux ...
- Arduino+RFID RC522 +继电器
博客园的第一篇博文就献给Arduino了.不知道能不能坚持自己喜欢的并且记录下来. 起码是个好的开始. 想实现一卡通代替钥匙开启电动车. 简单的原理,通过RC522模块读取一卡通的序列号,在程序中进行 ...
- C# 调用继电器api usb_relay_device.dll
C# 调用继电器api usb_relay_device.dll 代码封装 usb_relay_device.dll 为C++编写 using System; using System.Collect ...
- 香农的伟大论文《A Symbolic Analysis of Relay and Switching Circuits》
香农在1938年发表的伟大论文A Symbolic Analysis of Relay and Switching Circuits(<对继电器和开关电路中的符号分析>)将开关.继电器.二 ...
- 花 1 小时,开源设计 LoRa 继电器开关
提示1:锐米所有 LoRa 产品严格遵循国标标准的 LoRaWAN 协议. 提示2:您可以免费复制,修改和商用本项目,请注明锐米原创. 提示3:如果您有其他 LoRa 需求或建议,欢迎联系锐米 sup ...
- c# 调用c++类库控制usb继电器
网上找不到调用此类库的文章,简单写一下,以备后用. 下面是封装后的调用c++类库的类 public class UsbRelayDeviceHelper { /// <summary> / ...
- 【雕爷学编程】Arduino动手做(43)---单路继电器模块
37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的.鉴于本人手头积累了一些传感器和模块,依照实践(动手试试)出真知的理念,以学习和交流为目的,这里准备 ...
- 继电器是如何成为CPU的(1)
继电器是如何成为CPU的(1) ——<穿越计算机的迷雾>整理和总结 究竟是如何设计的电路,具有计算和控制的智力? 这一点也不高深.本系列文章从初中学的最简单的电路图说起,看看能不能从最初的 ...
随机推荐
- C中的一些函数
简述:printf.sprintf函数 转载自http://www.cnblogs.com/adslg/archive/2008/08/22/1274164.html 部分进行了修改,参考http:/ ...
- TF-IDF与余弦相似性的应用(三):自动摘要
有时候,很简单的数学方法,就可以完成很复杂的任务. 这个系列的前两部分就是很好的例子.仅仅依靠统计词频,就能找出关键词和相似文章.虽然它们算不上效果最好的方法,但肯定是最简便易行的方法. 今天,依然继 ...
- 【First Missing Positive】cpp
题目: Given an unsorted integer array, find the first missing positive integer. For example,Given [1,2 ...
- 【Binary Tree Level Order Traversal】cpp
题目: Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to ri ...
- 使用try-with-resources注意的问题
package coin; import java.io.FileInputStream; import java.io.ObjectInputStream; /** * 使用 try-with-re ...
- OS X 使用技巧——轻松地调整窗口大小
如果你想调整窗口大小,只需要把鼠标指针悬停在窗口边框上.当它变成双向箭头时,点击并拖动鼠标即可完成这一操作. 但在实际操作中,迅速把鼠标指针定位到边框上比较困难. 解决的办法是:在终端输入以下命令: ...
- appium for windows 环境搭建
服务环境: 1 安装Nodejs 下载nodejs安装包(http://nodejs.org/download/)安装 测试安装是否成功:运行cmd,输入node -v 2 安装android的SKD ...
- Ionic 安装部署
Ionic 安装部署 准备工作 下载安装Node.js, JDK,Apache Ant,Android SDK:编辑器用WebStorm node jdk ant 均需要加进 环境变量path中 An ...
- 【BZOJ】【3261】最大异或和
可持久化Trie 嗯……同样搞个前缀异或和,然后将x与sum异或一下,就是在[l-1,r-1]中找x^sum的最大异或值了.同样可持久化Trie搞搞即可(模板还是没背全啊……sad /******** ...
- 网络(一),libevent客户端部分
网络模块() 一.服务端: 暂时就以libevent模块,共享内存等下 .GS打开,首先创建4个libevent子线程,当然为每个线程设置连接通知回调函数,这个是基于sockpair的,然后再创建一个 ...