Форум обсуждения систем  

Вернуться   Форум обсуждения систем "Умный дом", проектов Ардуино, OpenWRT и других DIY устройств > Форум умного дома > Сделай сам > OpenWRT/LEDE

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 19.11.2015, 12:25   #1
Dimanjy
Junior Member
 
Регистрация: 17.11.2015
Сообщений: 3
Вес репутации: 0
Dimanjy is an unknown quantity at this point
По умолчанию Кто работал с PyUSB, отзовитесь!

Пытаюсь наковырять скрипт на Python для работы с Arduino.
PySerial не работает, потому как на OpenWrt 14.07 (на котором у меня нормально подключилась Ардуинка через USB) - не портирован один из пакетов в зависимостях. Поэтому поставил pyusb, который работает через libusb и больше ничего не требует.

Вот мой скрипт, который худо-бедно что-то шлет и получает.
Код:
#!/usr/bin/env python

import usb, time

ftdi = None

busses = usb.busses()

for bus in busses:
	devices = bus.devices
	for dev in devices:
                # Ищем FTDI
		if dev.idVendor == 0x0403 or dev.idProduct == 0x6001:
		    ftdi = dev

# Нашли FTDI и работаем
if ftdi is not None:
	device = ftdi
	print "FTDI 0x%04x : 0x%04x" % ( device.idVendor, device.idProduct)
	h = device.open()
        # Вырубаем драйвер ядра, иначе будет Device busy
	print "Try to detachKernelDriver..."
	try:
		h.detachKernelDriver(0)
	except usb.USBError as e:
		print "Kernel driver apparently is not attached."
	h.setConfiguration(1)
	h.claimInterface(0)

	i=0

        # Такой пакет отправляем в Ардуинку. Там стоит обычный
        # повторитель, который вернет эту же строку, но с '>' в начале
	msg = '+1234567890123456789012345678901234567890123-\n'
	msglen = len(msg)

        # Отправляем пакет
	print h.bulkWrite(0x02, msg, msglen)
	#time.sleep(1)

        # Пытаемся прочитать данные из Ардуинки
	while i<msglen:
                # FIX!
		#print h.bulkWrite(0x02, msg, msglen)
		ret = h.bulkRead(0x81, 64)
		print ''.join([chr(x) for x in ret])
		i = i+len(ret)

	h.releaseInterface()
UPD: Что-то редактор все табуляции скушал

Версия pyusb 0.4 - такая уж в репозитории у OpenWrt 14.07, но вроде работает.

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

Если раскомментировать строку после #FIX!, то bulkRead начинает более-менее нормально читать ответ обрывками, но это получается, что мы "вышибаем" ответ от Ардуинки путем многократной посылки одной и той же команды, а нам это совсем не нужно, потому как бред!

В описании устройства FTDI максимальный размер пакета = 64. Если в bulkRead поставить маньше, то появляется ошибка! Можно только больше.

В общем, никак не пойму с размерами пакетов... Как послать .bulkWrite() один раз, а потом вычитать ответ целиком и без ошибок с .bulkRead() - вот в чем основной вопрос.

Последний раз редактировалось Dimanjy; 19.11.2015 в 12:54.
Dimanjy вне форума   Ответить с цитированием
Старый 19.11.2015, 12:31   #2
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,616
Вес репутации: 9821
Admin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant future
По умолчанию Re: Кто работал с PyUSB, отзовитесь!

Цитата:
UPD: Что-то редактор все табуляции скушал
Нужно использовать тег [CODE] или [PHP]
Admin вне форума   Ответить с цитированием
Старый 19.11.2015, 12:54   #3
Dimanjy
Junior Member
 
Регистрация: 17.11.2015
Сообщений: 3
Вес репутации: 0
Dimanjy is an unknown quantity at this point
По умолчанию Re: Кто работал с PyUSB, отзовитесь!

Цитата:
Сообщение от Admin Посмотреть сообщение
Нужно использовать тег [CODE] или [PHP]
Да, спасибо - поправил
Dimanjy вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 11:32. Часовой пояс GMT +3.


Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Яндекс.Метрика