Как использовать 8-канальное USB-реле Sainsmart с питоном - PullRequest
0 голосов
/ 08 октября 2018

Я искал пару часов и хотел бы, чтобы мое 8-канальное USB-реле Sainsmart работало с использованием python.Если кто-то может помочь мне с этим, это было бы невероятно.Спасибо.

Ответы [ 2 ]

0 голосов
/ 25 февраля 2019

Поскольку этот модуль использует интегральную схему FT245RL USB FIFO, вы можете использовать этот репозиторий https://github.com/vpatron/relay_ft245r от Vince Patron.

источник test.py довольно прост и понятен:

import relay_ft245r
import sys
import time

rb = relay_ft245r.FT245R()
dev_list = rb.list_dev()

# list of FT245R devices are returned
if len(dev_list) == 0:
    print('No FT245R devices found')
    sys.exit()

# Show their serial numbers
for dev in dev_list:
    print(dev.serial_number)

# Pick the first one for simplicity
dev = dev_list[0]
print('Using device with serial number ' + str(dev.serial_number))

# Connect and turn on relay 2 and 4, and turn off
rb.connect(dev)
rb.switchon(2)    
rb.switchon(4)
time.sleep(1.0)
rb.switchoff(2)    
time.sleep(1.0)
rb.switchoff(4)
0 голосов
/ 30 декабря 2018

Итак, здесь есть два метода, и это зависит от того, куда вы хотите пойти.А) вы можете получить версию командной строки, работающую как usbrelay, а затем выдавать команды из python, и Б) вы можете открыть последовательное соединение изнутри python и использовать usb.core или usb.util для отправки последовательных команд на плату.

A) Работа Darrylb над github - хороший обзор здесь, чтобы получить инструмент командной строки, работающий для HID-совместимых реле.https://github.com/darrylb123/usbrelay

Если вы используете Debian:

sudo apt-get install usbrelay

Затем вы обновляете свой файл rules.d, чтобы вам не приходилось постоянно использовать 'sudo', и вы можете вызыватькомандная строка в Python.Конечно, это имеет определенные последствия для безопасности, которые вы должны найти в Google, если планируете использовать этот более длительный срок.

В любом случае, как только вы установите его, вы можете просто вызвать его из командной строки, и он выведет списокваши relay_ids в каком-то формате с суффиксами, которые выглядят как _1 - _8.

$ ./usbrelay

На выходе будет отображаться информация о подключенной плате, а также идентификаторы реле и статус.«1» включен, а «0» выключен.

затем из питона:

import os    
os.system("usbrelay 5291D_1=1 5291D_3=1")

Чтобы отключить их, просто измените их в назначениях на нули, и вы можете сделать все восемь номеров реле одновременно.Таким образом, вы можете продолжить писать все виды функций для запуска ваших реле в уникальных комбинациях, задержках и т. Д. Вы также можете использовать подпроцесс из Python:

import subprocess
subprocess.run(['usbrelay', '5291D_1=1', '5291D_3=1'], stdout=subprocess.PIPE).stdout.decode('utf-8')

B) Чтобы установить последовательное соединениеподход, вы должны начать с знания, какие правильные последовательные команды для вашей платы.Например, у меня есть 16-канальное реле sainsmart, которое требует от меня посылать последовательные команды, потому что оно не совместимо с HID.

Найдите номер вашей модели здесь, на Sainsmart Wiki: http://wiki.sainsmart.com/index.php/SKU

Затем скачайте zip-файл и ознакомьтесь с инструкциями к реле.Для меня я использовал модификацию работы RJ для отправки последовательной команды.
https://gist.github.com/RJ/7acba5b06a03c9b521601e08d0327d56

Это из инструкций для моего номера SKU (скорее всего, отличается от вашего!) CH-6 ON 3A 4645 30 35 30 30 30 35 46 46 30 30 46 39 0D 0A

Вам необходимо добавить префикс 0x к последовательным сообщениям:

c6_on=[0x3A, 0x46, 0x45, 0x30, 0x35, 0x30, 0x30, 0x30, 0x35, 0x46, 0x46, 0x30, 0x30, 0x46, 0x39, 0x0D, 0x0A]

Затем вы можете отправить эти командыusb.core.Endpoint, используя подход, как RJ подошел к нему в приведенной выше ссылке на git gist, где «ep» здесь - это usb.core.Endpoint:

ep.write(c6_on)

В любом случае, если вы можетеА) управлять платой из командной строки или Б) знать правильные последовательные команды для отправки, тогда вы можете выяснить, как это сделать с помощью Python.Единственное, на что нужно обратить внимание - это убедиться, что у вас есть соответствующие зависимости, и следить за разрешениями.

...