serial.serialutil.SerialException: [Errno 16] не удалось открыть порт: [Errno 16] устройство или ресурс занят: '/ dev / ttyACM0' - PullRequest
0 голосов
/ 15 мая 2018

Я пытаюсь распечатать последовательный вывод из Arduino Uno на мой экран с помощью библиотеки Pyserial Python.

Вот мой код Arduino.Он просто генерирует и печатает случайные числа на последовательном мониторе:

void setup() {
Serial.begin(9600);

}

void loop() {
    long rand = random(10);
    Serial.print(rand);
}

Мой код Python просто должен печатать значения из последовательного в командную строку, вот код:

#!/usr/bin/python

import serial

ser = serial.Serial("/dev/ttyACM0",9600)
while True:
    thing = ser.readline()
    print(thing)

Пока Arduino печатает случайные числа на последовательном мониторе, я запускаю скрипт на python и получаю ошибку:

Traceback (most recent call last):
  File "/home/archimedes/anaconda3/lib/python3.6/site-packages/serial/serialposix.py", line 265, in open
    self.fd = os.open(self.portstr, os.O_RDWR | os.O_NOCTTY | os.O_NONBLOCK)
OSError: [Errno 16] Device or resource busy: '/dev/ttyACM0'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "pythonSerialTest.py", line 6, in <module>
    ser = serial.Serial("/dev/ttyACM0",9600)
  File "/home/archimedes/anaconda3/lib/python3.6/site-packages/serial/serialutil.py", line 240, in __init__
    self.open()
  File "/home/archimedes/anaconda3/lib/python3.6/site-packages/serial/serialposix.py", line 268, in open
    raise SerialException(msg.errno, "could not open port {}: {}".format(self._port, msg))
serial.serialutil.SerialException: [Errno 16] could not open port /dev/ttyACM0: [Errno 16] Device or resource busy: '/dev/ttyACM0'

Ответы [ 2 ]

0 голосов
/ 28 января 2019

Я получал resource busy error, потому что Python пытался получить доступ к последовательному монитору, но так как я загрузил свой код в Arduino с помощью команды: sudo make upload monitor clean, мой компьютер получил доступ к последовательному монитору из Arduino, что помешалоPython от возможности доступа к последовательному монитору из Arduino.Теперь я просто загружаю код в Arduino с помощью sudo make upload clean и исключаю команду monitor, если планирую использовать Python для доступа к последовательному монитору.

0 голосов
/ 15 мая 2018

У вас не может быть двух программ, использующих один и тот же последовательный порт.

Закройте последовательный монитор в Arduino IDE.


PS: Вы также пытаетесь читать строки в Python, но не отправляете их из Arduino.

Вывести числа в виде строк с Serial.println(rand);.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...