avrdude: ser_open(): не удается открыть устройство "/dev/ttyACM0": устройство или ресурс занят
Я пользователь Linux Mint. Я имею дело с Arduino Yun. Я компилирую программу Arduino. После этого я загружаю в Arduino Yun. Затем я получаю эту ошибку. Можете ли вы мне помочь?
11 ответов
Сначала вы должны убедиться, что у вас есть правильные права на чтение / запись, как описано здесь, по существу введите следующие команды:
$ sudo adduser <username> dialout
$ sudo chmod a+rw /dev/ttyACM0
'/dev/ttyACM0' - это порт, к которому подключен ваш arduino, он должен быть указан в папке / dev вашего корня.
второе: после того, как вы определили, к какому порту подключен arduino, и вы установили правильные права для этого порта, вам нужно выполнить следующую команду. Я не уверен, что он делает, я не уверен, действительно ли это нужно, но это несколько раз помогало мне загружать файлы.
$ sudo udevadm trigger
нашел эту команду http://starter-kit.nettigo.eu/2015/serial-port-busy-for-avrdude-on-ubuntu-with-arduino-leonardo-eth/
и, в- третьих, вы иногда найдете проблему с выбором времени и удачи. Продолжайте нажимать кнопку сброса (иногда два раза подряд) и между тем нажимайте кнопку загрузки вашего скриншота Arduino. В определенный момент это сработает. Мне повезло больше, когда я постоянно менял небольшие фрагменты кода, поэтому, когда я нажал "upload", сначала нужно было скомпилировать код.
https://www.arduino.cc/en/Guide/Troubleshooting
на некоторых компьютерах может потребоваться нажать кнопку сброса
Я никогда не перепутал ни с загрузчиком, ни с выводами ICSP и прочим (к счастью)
Также загляните на форум Arduino или по ссылке, предоставленной самостоятельно
У меня точная проблема с моей доской Леонардо и Ubuntu. Добавление правила, которое говорит ModemManger игнорировать все USB-устройства из упомянутой ссылки, не работает для меня. Тем не менее, удаление модем-менеджера на самом деле сделал.
sudo apt-get purge modemmanager
Решение, которое работало для меня всегда, состоит в том, чтобы пойти в Tools -> Port -> /dev/ttyACMx
и снова нажмите на выбранный порт.
После этого IDE загружает код без проблем.
sudo chmod a+rw /dev/ttyACM0
выполните следующую команду для первой загрузки
Просто чтобы добавить новое решение, которое сработало для меня (также под Linux Mint), я открыл последовательный монитор (из одной из 4 открытых IDE Arduino), и его закрытие помогло (вероятно, связано с проблемой процесса, описанной там)
Убедитесь, что ваш USB-кабель надежно подключен. Моя внезапно перестала работать из-за этого. Сообщение "/dev/ttyACM0 not found" происходит потому, что устройство не создается, если оно не подключено.
Я получаю это сообщение, когда процесс подключается к порту, который я пытаюсь использовать для загрузки кода, например, через screen или gtkterm.
Попробуйте эту команду:
lsof /dev/ttyACM3
Используйте ACM
screen 8610 elm 5u CHR 166,3 0t0 5599015 /dev/ttyACM3
Затем убейте PID:
kill 8610
Чтобы очистить процесс, использующий порт.
Не думаю, что изменение прав на порт - глупая идея. Я нашел лучшее решение. Это для запуска Arduino с sudo. И это руководство, как это сделать. Сначала найдите файл .desktop Arduino. Это может быть в
/usr/share/applications/
или на
~/.local/share/applications/
. Имя тоже может быть другим, но обязательно будет содержать «ардуино». Для меня это
/usr/share/applications/arduino.desktop
. Затем откройте его с помощью
sudo nano <your arduino.desktop file>
.
sudo nano /usr/share/applications/arduino.desktop
работает для меня. Он будет содержать что-то вроде этого:
[Desktop Entry]
Type=Application
Name=Arduino IDE
GenericName=Arduino IDE
Comment=Open-source electronics prototyping platform
Exec=arduino %U
Icon=arduino
Terminal=false
Categories=Development;IDE;Electronics;
MimeType=text/x-arduino;
Keywords=embedded electronics;electronics;avr;microcontroller;
StartupWMClass=processing-app-Base
Теперь найдите строку, начинающуюся с. Для меня это
Exec=arduino %U
. Все, что будет после
Exec=
это команда, запускающая Arduino. Для меня это
arduino %U
. И нам нужно, чтобы эта команда запускалась с помощью sudo. Затем введите
echo "<your password>" | sudo -S
перед этой командой. И сохраните файл с помощью
Ctrl+O
. Теперь
Exec
линия это будет что-то вроде
Exec=echo "blahblah" | sudo -S arduino %U
, где blahblah - ваш пароль. Готово! Теперь должно работать. Если этого не произошло, попробуйте перезагрузить компьютер. Но проблема все еще есть. Теперь Arduino IDE сохранит скетчи в
/root/Arduino/
по умолчанию (эскизы должны сохраняться в
/home/<username>/Arduino/
). Это не хорошо. Но это легко исправить в настройках Arduino. Также теперь вы можете редактировать с помощью Arduino IDE почти каждый файл в вашей системе. Так что будьте осторожны и ничего не сломайте.
Изменить: я был не прав.
sudo usermod -a -G uucp $USER
или
sudo usermod -a -G dialout $USER
а также
reboot
работает лучше.
У меня только что была эта проблема с моей подлинной Arduino Mega 2560, пытающейся подключиться к ней с машины Ubuntu 18.04.5 LTS с использованием локально скомпилированной Arduino IDE версии 1.8.16. Я смог исправить это в моем случае, поэтому публикую здесь, чтобы поделиться советами.
Наткнулся на несколько других тем форума, сообщающих о тех же симптомах (хотя не все из них Mega и не все в Linux):
- https://arduino.stackexchange.com/questions/33505/why-do-i-get-avrdude-stk500v2-receivemessage-timeout-error-when-uploading-to?newreg=d5f1171d37394be584fc5de8dea6138f
- https://arduino.stackexchange.com/questions/3316/mega-2560-не отвечает
- https://forum.arduino.cc/t/mega2560-timeout-communicating-with-programmer/132479
- https://starter-kit.nettigo.eu/2015/serial-port-busy-for-avrdude-on-ubuntu-with-arduino-leonardo-eth/
После устранения неполадок в течение нескольких часов я смог надежно подключиться к моей Mega. Оказалось, что было множество проблем, которые мешали ему работать, которые нужно было понять и решить, и когда я понял, в чем они заключались, я не мог поверить своим глазам.
Плакаты, которые предлагали убедиться, что правила udev настроены так, чтобы ModemManager не перехватывал устройство Mega, тем самым делая его недоступным для Arduino IDE, были на правильном пути. Итак, я проверил свой
/etc/udev/rules.d/70-snap.core.rules
и действительно подтвердил, что для ModemManager уже существует правило игнорировать устройства с идентификатором поставщика USB 2341, который является подлинным Arduino:
...
ATTRS{idVendor}=="2341", ENV{ID_MM_DEVICE_IGNORE}="1"
...
Однако, когда я сделал
tail -f /var/log/syslog
и подключил Mega, я не поверил своим глазам, увидев, что ModemManager все еще пытается с ним поговорить:
Dec 9 22:09:58 hostname ModemManager[999]: <info> [device /sys/devices/pci0000:00/0000:00:14.0/usb3/3-2] creating modem with plugin 'Generic' and '1' ports
Dec 9 22:09:58 hostname ModemManager[999]: <warn> Could not grab port (tty/ttyACM0): 'Cannot add port 'tty/ttyACM0', unhandled serial type'
Dec 9 22:09:58 hostname ModemManager[999]: <warn> Couldn't create modem for device '/sys/devices/pci0000:00/0000:00:14.0/usb3/3-2': Failed to find primary AT port
Похоже, что ModemManager все еще пытался подключиться к нему как к устройству TTY, отличному от USB.
Проблема усугублялась тем, что среда разработки Arduino не справлялась с этой проблемой изящно и продолжала зависать и пытаться подключиться к Mega даже после того, как я отключил ее от USB. Тем не менее, я быстро
ps -ef | grep ModemManager
а потом
kill [PID]
, подождал, пока Arduino IDE перестанет пытаться подключиться к отключенному Mega, затем снова подключил его, указал порт через «Инструменты» -> «Порт» и снова попытался загрузить, и это сработало как шарм. (И наоборот, если бы я просто ждал, наблюдая
/var/log/syslog
для ModemManager, чтобы сдаться и освободить устройство Arduino IDE, возможно, также работала бы без моего явного уничтожения ModemManager. Это, вероятно, объясняет, почему он работал спорадически.)
Тогда я подумал, что решил все свои проблемы и начал прикручивать Мегу к своему устройству. Я подтянул соединительные крепления, и снова не поверил своим глазам, что он снова перестал работать. Вынул Мегу обратно, открутил всю плату, и теперь она работает, прикрутил ее обратно, и она перестала работать. После нескольких раундов использование латунного упора на отверстии рядом со штифтом A6 коррелировало с причиной этой проблемы. Я предполагаю, что металлическая стойка замыкала или каким-то образом мешала следам печатной платы, которые проходят очень близко к этому отверстию. Так что перестал болтать в этом отверстии, и Мега начала нормально работать, собранная в моем устройстве.
Итак, в моем случае 2 проблемы препятствовали работе Mega и подключению к ней ПК через USB:
(1) ModemManager перегружал устройство, как только оно было подключено, несмотря на правила udev USB. Решение - убил ModemManager (все еще нужно изучить изменение конфигурации системы, чтобы мне не приходилось его каждый раз убивать).
(2) Аппаратная проблема: металлическая переходная плата мешает дорожкам печатной платы рядом с отверстием рядом с контактом A6. Решение - перестал болтаться в этой дыре.
Надеюсь, это полезно.
Сегодня я довольно долго боролся с этой проблемой, и все решения, которые я нашел в Интернете, не помогли. Все сообщения об ошибках, которые я получал, были точно такими же, как и на подобных форумах.
Затем я понял, что совершил самую неловкую ошибку: мой кабель не был правильно подключен.
Поэтому, пожалуйста, прежде чем вы в течение часа просматриваете веб-страницы, пытаясь найти каждое решение в Интернете, убедитесь, что кабели подключены правильно.