Godd day y'all!
Я разрабатываю приложение для компьютеров под управлением Windows, которое должно непрерывно записывать местоположения GPS с внешнего устройства в фоновом режиме.При использовании систем Arduino / UNIX существует множество учебных пособий, однако я разрабатываю специально для Windows, поэтому многие из них не так легко переносимы ( также: я совершенно новичок в области ввода-вывода устройства в python ).
Установка внешнего программного обеспечения, такого как gpsd, на ПК пользователя не вариант .Я скачал драйверы libusb для Windows, которые будут поставляться с конечным продуктом (я полагаю, если вы не заметите, что это не обязательно).
Насколько я понимаю, pyserial должен иметь возможность взаимодействовать с обоимик USB-портам и аппаратным COM-портам, поскольку win7 + технически рассматривает USB-порты как виртуальные COM-порты - это правда?
Я успешно использовал pyusb для просмотра устройств, подключенных к моему компьютеру.Однако открытие устройства для ввода / вывода было запрещено (возможно, из-за того, что GPS не должен принимать входы?).
Я включил свой код для подключения и потоковой передачи данных (содержащий некоторый код, который я нашел в других SOсообщения, например Чтение информации USB-GPS с Python и другие, извините, я не могу вспомнить авторов оригинала, я забыл записать это в источнике. Если вы случайно наткнулись на свой собственный код, почувствуйтеВы можете запросить редактирование, и я обязуюсь.)
import usb
import usb.backend.libusb1
def streamDevice(dev: usb.core.Device = None):
print(dev)
if dev.is_kernel_driver_active(0) is True: dev.detach_kernel_driver(0)
# use the first/default configuration
dev.set_configuration(0)
# first endpoint
endpoint = dev [0][(0,0)][0]
print(endpoint)
# read a data packet
data = None
while True:
try:
data = dev.read(endpoint.bEndpointAddress,endpoint.wMaxPacketSize)
print(data)
except usb.core.USBError as e:
data = None
if e.args == ('Operation timed out',): continue
backend = usb.backend.libusb1.get_backend(find_library= lambda x: "DLL/MinGW64/dll/libusb-1.0.dll")
devices = usb.core.find(find_all = True, backend=backend)
mouse = None
for idx,dev in enumerate(devices):
print(dev) #class 9 (hubs) cannot easily be printed using __str___
if dev.bDeviceClass != 9: print(dev)
else:
print(" + Class: %s" % dev.bDeviceClass)
print(" + Subclass: %i" % dev.bDeviceSubClass)
print(" + Protocol: %i" % dev.bDeviceProtocol)
print(" + Length : %s" % dev.bLength)
print(" + Configurations: %i" % dev.bNumConfigurations)
if dev.bDeviceClass == '0xef':
print('GPS found!')
print(dev)
streamDevice(dev)
В итоге:
1.Как я могу передать строку NMEA от устройства GPS, подключенного к физическому COM-порту в Python 3+, используя Windows7 +?
2.Как я могу надежно определить устройство и выполнить потоковую передачу с устройства GPS, подключенного к USB-порту USB в Python 3+, используя windows7 +?
Приветствия и большое спасибо заранее!
PS: не стесняйтесь указывать на любые мои заблуждения относительно последовательной связи в python и windows;как я уже сказал: я совершенно новичок в устройстве ввода-вывода в python и с удовольствием отредактирую свой вопрос!