Arduino-pyFirmata-Python windows грешка (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