资讯详情

USB中继由python控制,继电器,USBrelay,用

概要

USB relay是在github参考链接如下:

https://github.com/pavel-a/usb-relay-hid,可下载发布的二进制文件进一步封装。

在linux下使用 USB relay

可以用sudo apt-get install usbrelay,或下载发布bin直接执行文件。

在window下控制

想要usb relay实现开关控制的继电器现在分类成一个python调用库,r以下:需要发布dll文件保存在同级目录中lib文件夹下,

# vim relay.py

#!/usr/bin/env python

# -*- coding:utf-8 -*-

import os

import sys

import time

from ctypes import Structure,WinDLL,c_char_p,POINTER,pointer,cdll

from platform import system

cdll_names = {

'Darwin' : 'libc.dylib',

'Linux' : 'libc.so.6',

'Windows': 'msvcrt.dll'

}

clib = WinDLL(cdll_names[system()])

class Usb_relay_device_type(Structure):

USB_RELAY_DEVICE_ONE_CHANNEL = 1

USB_RELAY_DEVICE_TWO_CHANNEL = 2

USB_RELAY_DEVICE_FOUR_CHANNEL = 4

USB_RELAY_DEVICE_EIGHT_CHANNEL = 8

class Usb_relay_device_info(Structure):

pass

Usb_relay_device_info._fields_ = [("serial_number",c_char_p),

("device_path",c_char_p),

("type",Usb_relay_device_type),

("next",POINTER(Usb_relay_device_info))]

usb_relay_device_info_p = pointer(Usb_relay_device_info())

class Relay():

def __init__(self):

self.filepath64 = os.path.dirname(os.path.abspath(__file__)) os.sep "lib" os.sep "USB_RELAY_DEVICE_64n.dll"

self.filepath32 = os.path.dirname(os.path.abspath(__file__)) os.sep "lib" os.sep "USB_RELAY_DEVICE_32n.dll"

# print(self.filepath64)

# print(self.filepath32)

self.usb_relay_device_info = pointer(Usb_relay_device_info())

self.load_usb_relay_device_dll()

self.usb_relay_device_enumerate = self.usb_relay_device_enumerate()

self.m_hCurDevice = self.usb_relay_device_open()

print(self.m_hCurDevice)

print("------------------")

def __del__(self):

print("close relay")

self.usb_relay_device_close()

def load_usb_relay_device_dll(self):

if os.path.isfile(self.filepath32) and os.path.isfile(self.filepath64):

try:

self.filepath = self.filepath32

self.usb_relay_device_dll = cdll.LoadLibrary(self.filepath)

except:

self.filepath = self.filepath64

self.usb_relay_device_dll = cdll.LoadLibrary(self.filepath)

else:

assert False, "Can not find %s"%self.filepath

if self.usb_relay_device_dll is not None:

print ("Load %s successfully"%os.path.basename(self.filepath))

def usb_relay_init(self):

self.usb_relay_device_dll.usb_relay_init()

# 判断它是否存在USB relay,

def usb_relay_exit(self):

if self.m_hCurDevice > 0:

return True

else:

return False

def usb_relay_device_enumerate(self):

self.usb_relay_device_dll.usb_relay_device_enumerate.args = POINTER(Usb_relay_device_info)

self.usb_relay_device_dll.usb_relay_device_enumerate.restype = POINTER(Usb_relay_device_info)

return self.usb_relay_device_dll.usb_relay_device_enumerate()

def usb_relay_device_open(self):

return self.usb_relay_device_dll.usb_relay_device_open(self.usb_relay_device_enumerate)

def usb_relay_device_close(self):

self.usb_relay_device_dll.usb_relay_device_close(self.m_hCurDevice)

# 打开指定通道

def usb_relay_device_open_one_relay_channel(self,index):

self.usb_relay_device_dll.usb_relay_device_open_one_relay_channel(self.m_hCurDevice, index)

# 打开所有通道

def usb_relay_device_open_all_relay_channel(self):

self.usb_relay_device_dll.usb_relay_device_open_all_relay_channel(self.m_hCurDevice)

#关闭指定通道

def usb_relay_device_close_one_relay_channel(self, index):

self.usb_relay_device_dll.usb_relay_device_close_one_relay_channel(self.m_hCurDevice, index)

关闭所有通道

def usb_relay_device_close_all_relay_channel(self,):

self.usb_relay_device_dll.usb_relay_device_close_all_relay_channel(self.m_hCurDevice)

def usb_relay_device_get_status(self, status):

self.usb_relay_device_dll.usb_relay_device_get_status(self.m_hCurDevice, status)

# 获取 usb relay回到各种通道状态,形式如{1:open”, 2:“close”,}

def UsbRelayDeviceStatus(self):

num = self.usb_relay_device_dll.usb_relay_device_get_status_bitmap(self.m_hCurDevice)

relay_num = self.usb_relay_device_dll.usb_relay_device_get_num_relays(self.m_hCurDevice)

DeviceStatus = {}

for i in range(1,relay_num+1):

DeviceStatus[i] = "close"

for i in range(1,relay_num+1):

if num%2 == 1:

num=num/2

DeviceStatus[i]="open"

else:

num=num/2

DeviceStatus[i]="close"

return DeviceStatus

def UsbRelayDeviceNum(self):

return self.usb_relay_device_dll.usb_relay_device_get_num_relays(self.m_hCurDevice)

if __name__ == "__main__":

r = Relay() #实例化Relay(),然后就可以调用里面到各个方法了。

print("hqh ---------------------------")

print(r.UsbRelayDeviceStatus())

print(r.UsbRelayDeviceNum())

r.usb_relay_device_open_one_relay_channel(2)

time.sleep(1)

r.usb_relay_device_close_all_relay_channel()

print(r.usb_relay_device_get_status("1"))

标签: 里面的继电器64m继电器74l374继电器2101m继电器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台