Ошибка при загрузке инструкций с использованием пакета PyFirmata - PullRequest
0 голосов
/ 09 мая 2020

Итак, я пытаюсь изучить модуль PyFirmata python, который позволяет нам писать коды в Python и загружать его на плату Arduino.

Я изучаю его на этом веб-сайте .

Код, который заставляет встроенный светодиод мигать:

import pyfirmata
import time

board = pyfirmata.Arduino('/dev/ttyACM0') #This Line gives error

while True:
    board.digital[13].write(1)
    time.sleep(1)
    board.digital[13].write(0)
    time.sleep(1)

Но когда я запускаю его (в Sublime Text 3), я получаю эту ошибку:

raise SerialException("could not open port {!r}: {!r}".format(self.portstr, ctypes.WinError()))
  serial.serialutil.SerialException: could not open port '/dev/ttyACM0': FileNotFoundError(2, 'The 
  system cannot find the path specified.', None, 3)
  [Finished in 7.0s]

Может ли кто-нибудь помочь мне исправить эту ошибку?

1 Ответ

2 голосов
/ 09 мая 2020

Порт, к которому вы пытаетесь получить доступ, не существует, или ваша программа не имеет разрешения на доступ к нему.

Первая проверка, существует ли порт или нет. Если у вас установлено программное обеспечение Arduino, вы можете проверить его. В случае его отсутствия должен появиться другой порт, например, /dev/ttyACM*, где * - любое число. Выбери его и попробуй запустить. Если он существует, но программа по-прежнему не работает, посетите официальный сайт arduino .

Эта проблема решается двумя командами. Откройте терминал и введите:

ls -l /dev/ttyACM*

Тогда вы получите что-то вроде этого:

crw-rw---- 1 root dialout 188, 0 5 apr 23.01 ttyACM0

Вот что нам нужно dialout. После указанной выше команды введите следующую команду и перезагрузите устройство.

sudo usermod -a -G your_username

Это должно работать, но есть случаи, когда это не так. Затем вам нужно добавить свой порт в root доступ:

=============================================== ============================== cd ~/etc/udev/rules.d

В этом каталоге создайте новый файл .rules и добавьте к нему следующее:

KERNEL=="ttyACM0", MODE="0666"

Это должно работать.

...