Добро утро
Искам да свържа моята 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 в администраторски режим, грешката остава.
Благодаря много за всеки отговор.