Ошибка Windows Arduino-pyFirmata-Python (5, доступ запрещен)

Доброе утро

Я хочу подключить свою плату Arduino к компьютеру с помощью pyFirmata lib, но возникла странная проблема. Предпосылка: pySerial и pyFirmata успешно установлены на моем компьютере. У меня windows 8.0 64 bit. Драйвера Arduino и USB портов работают нормально (поскольку я могу загрузить любой скетч на Arduino).

Код, который я хочу запустить, очень прост:

Если button (подключенный к контакту 4, настроенному как вход method.get_pin() от firmata library) нажат, красный светодиод будет мигать, в противном случае будет работать зеленый светодиод. Я заставляю их мигать с помощью простой функции:

from time import sleep
def Blink(pin):
    board.digital(pin).write(1)
    sleep(1)
    board.digital(pin).write(0)
    sleep(1)

плата определена в глобальной области видимости как pyfirmata.Arduino('com3')

Все контакты работают нормально, так как я проверил их с помощью firmata_test.exe, и я уверен, что ни одно последовательное соединение не открыто, прежде чем я запущу python.

Вот что странно:

Если я пишу каждую команду в оболочке Python, все работает нормально, светодиоды мигают правильно! НО, если я пишу все команды в модуль, а затем запускаю его, он выдает эту ошибку:

"Traceback (most recent call last):
  File "<pyshell#1>", line 1, in <module>
    board = pyfirmata.Arduino('com3')
  File "C:\Python27\lib\site-packages\pyfirmata\__init__.py", line 16, in __init__
    super(Arduino, self).__init__(*args, **kwargs)
  File "C:\Python27\lib\site-packages\pyfirmata\pyfirmata.py", line 89, in __init__
    self.sp = serial.Serial(port, baudrate, timeout=timeout)
  File "C:\Python27\lib\site-packages\serial\serialwin32.py", line 38, in __init__
    SerialBase.__init__(self, *args, **kwargs)
  File "C:\Python27\lib\site-packages\serial\serialutil.py", line 282, in __init__
    self.open()
  File "C:\Python27\lib\site-packages\serial\serialwin32.py", line 66, in open
    raise SerialException("could not open port %r: %r" % (self.portstr, ctypes.WinError()))
SerialException: could not open port 'com3': WindowsError(5, 'Access denied.')"

То есть он не может открыть порт. Я пробовал некоторую отладку, но это мне не помогло.

Если я проверю состояние порта с помощью

por = serial.Serial()
    por.port = 'com3'
    por.isOpen()
>>False

НО, если я использую

por = serial.Serial('com3')

выскакивает та же ошибка.

Глядя Arduino, светодиод TX регулярно мигает, поэтому я могу предположить, что он отправляет какие-то данные на последовательный порт. Если я открываю приложение Arduino, оно говорит мне, что порт занят. Я не могу понять, является ли это проблемой разрешений администратора, потому что я запускаю py IDLE от имени администратора. Даже если я запускаю скрипт из CMD в режиме администратора, ошибка остается.

Большое спасибо за каждый ответ.


person FrAxl93    schedule 30.05.2015    source источник


Ответы (1)


Ребята решил проблему! Я перезагрузил компьютер, затем (ПРЕЖДЕ ВСЕГО) я запустил CMD в режиме администратора и запустил модуль. Теперь он работает! Не знаю почему, кажется, что до сих пор я запускал первый раз без прав администратора. После этого, хотя я открываю CMD в режиме администратора, ошибка продолжает появляться.

Надеюсь, это может быть полезно для кого-то.

Спасибо.

person FrAxl93    schedule 30.05.2015