Отсутствует /dev/ttyACM* в Ubuntu
Я установил Arduino IDE в соответствии с arduino.cc инструкции (вызов install.sh
), а не sudo apt install ...
. Порты /dev/ttyACM*
присутствовали при выполнении следующей команды Linux.
ls -l /dev/ttyACM*
Это показывает, что устройства имеют членство в группе dialout
. Необходимо добавить себя в качестве пользователя в группу dialout
.
sudo usermod-a-G dialout <имя пользователя>
Я выбрал плату и порт и сделал загрузку, которая в конце концов завершилась, но это заняло много времени. Программа, вероятно, не работала, так как программа должна была мигать светодиодом в течение 2 секунд, но скорость флэш была определенно намного быстрее, так что, похоже, загрузка не сработала.
Я удалил IDE и переустановил его, и порты исчезли.
Я применил это исправление для использования Arduino IDE в Linux.
Из описания исправления следует, что инструкция должна выдавать следующие команды:
wget https://github.com/adafruit/Trinket_Arduino_Linux/raw/master/99-adafruit-boards.rules
sudo cp 99-adafruit-boards.rules /etc/udev/rules.d/
Далее перезагрузите Linux.
Согласно этой странице на Arduino для Linux, в /dev/ttyACM* должны быть некоторые устройства
, но мои отсутствуют. Каково решение этой проблемы? Я заменил USB-кабель, и это не имеет никакого значения.
Плата Adafruit Feather 32u4 имеет ATmega32U4. ОС - Ubuntu 16.04.
@H2ONaCl, 👍7
Обсуждение6 ответов
Лучший ответ:
Если Arduino IDE не показывает порт или не позволяет выбрать порт, загрузите известную рабочую программу (например, Example > Blink), начните загрузку, а затем дважды щелкните кнопку сброса платы.
Для получения того же совета плюс посторонней информации просмотрите эту справочную страницу на конкретном Пере, плате микроконтроллера32u4, которая, по-видимому, предполагает использование подробного режима загрузки, но это кажется ненужным, потому что вы можете просто повторить попытку, если она не удалась. Режим подробного скачивания включен в настройках. Несмотря на то, что в этом нет необходимости, я в конце концов решил всегда использовать подробный режим загрузки, потому что он дает, по крайней мере мне, более непосредственную и очевидную обратную связь об успехе и неудаче.
это та же цель, что ускорила @Majenko и Юрая., @abu-ahmed al-khatiri
Согласно этой странице на Arduino для Linux, в /dev/ttyACM должны быть некоторые устройства*
Но это не так. На "традиционной" плате Arduino, такой как Uno, у вас есть две микросхемы: основной MCU, который вы программируете, и микросхема интерфейса USB, которая предварительно запрограммирована с кодом для представления интерфейса CDC/ACM компьютеру (для которого он затем создает устройство /dev/ttyACMx)..
С пером у тебя этого нет. У вас есть один-единственный чип. Этот чип - это и интерфейс USB, и чип, который вы программируете, и, самое главное, именно ваша программа обеспечивает устройство CDC/ACM, если вы выберете. Если ваша программа не предоставляет устройство CDC/ACM, то компьютер никогда его не увидит, поэтому он никогда не создаст /dev/ttyACMx.
В общем, ядро Arduino всегда добавляет устройство CDC/ACM независимо от того, просите вы об этом или нет, так как оно часто используется для инициирования сброса в загрузчик. Однако если скетч перестает работать по какой-либо причине, то порт CDC/ACM больше не существует.
Однако у M0 на пере есть хитрый трюк - если вы дважды сбросите плату с помощью кнопки сброса, код запуска распознает этот факт и заставит его запустить загрузчик. Затем этот загрузчик представляет необходимое устройство CDC/ACM компьютеру, позволяя загружать новый код.
Конечно, если загруженная вами программа не инициализирует свое собственное устройство CDC/ACM или выйдет из строя, устройство CDC/ACM не будет представлено до тех пор, пока вы снова не выполните трюк двойного сброса.
разве у него нет Микро-клона? Я знаю трюк с двойным щелчком для M0, но работает ли он для Micro?, @Juraj
Я прочитал комментарии. Мне кажется, он говорит о пере., @Majenko
у Adafruit половина продуктов-перья: -), @Juraj
@Juraj Также двойной щелчок сработал, согласно комментариям. Так что двойной щелчок - это ответ. Это означает, что логически это должно быть перо M0., @Majenko
вот с чем у меня проблема. часто задаваемые вопросы Adafruit для 32u4 feather рекомендуют двойной щелчок. У них есть другой загрузчик или микро-загрузчик тоже имеет двойной щелчок? или часто задаваемые вопросы копируются из часто задаваемых вопросов M0, и простой сброс работает для OP?, @Juraj
@Juraj Кто знает, что происходит в голове дизайнера Adafruit...? Я имею в виду, зачем вообще создавать перья? ;), @Majenko
Знаете ли вы, есть ли у Arduino Micro трюк с двойным щелчком?, @Juraj
@Juraj Понятия не имею. Я никогда не использую чипы AVR, если могу что-то поделать..., @Majenko
Пример программы Blink может принять загрузку, даже если кажется, что нет никакого кода, связанного с этим. void setup () {pinMode(LED_BUILDIN, OUTPUT);} void loop () { digitalWrite(LED_BUILDIN, HIGH); delay(1000); digitalWrite(LED_BUILDIN, LOW); delay (1000); }, @H2ONaCl
Отсюда и 4-й абзац моего ответа..., @Majenko
/dev/ttyACM* мои отсутствуют.
Я думаю, что что-то udev rules issue, вы можете определить другие правила с помощью add Feather32u4.rules
и удалить файл 99-adafruit-boards.rules
раньше.
SUBSYSTEM=="usb", ATTRS{idProduct}=="0c9f", ATTRS{idVendor}=="1781", MODE="0660", GROUP="dialout"
ATTRS{idVendor}=="239a", ENV{ID_MM_DEVICE_IGNORE}="0"
ATTRS{idVendor}=="239a", MODE="0660", GROUP="dialout"
SUBSYSTEM=="tty", ATTRS{idProduct}=="8011", ATTRS{idVendor}=="239a", MODE="0660", GROUP="dialout"
SUBSYSTEM=="tty", ATTRS{idProduct}=="0011", ATTRS{idVendor}=="239a", MODE="0660", GROUP="dialout"
после сохранения и копирования файлов в файл /etc/udev/rules.d/
sudo cp Feather32u4.rules /etc/udev/rules.d/
а затем перезагрузите свой udev
sudo reload udev
или,
sudo udevadm control --reload-rules
sudo udevadm trigger
не забудьте перезапустить свой сервис
sudo systemctl restart ModemManager.service
проверьте еще раз ваш порт со следующим ll /dev/tty*
, если он появляется с именем /dev/ttyUSBx
или /dev/ttyACMx
добавьте пользователя в вашу группу
sudo usermod -a -G plugdev <user>
также попробуйте автоматически сбросить кнопку с добавлением задержки в ваш скетч
while(!Serial){
delay(1000);
}
Serial.begin(115200);
если он не показал порт в списке /dev/tty
, попробуйте
- Включена подробная загрузка в настройках Arduino.
- Откройте пример мигания.
- и добавьте автоматический сброс выше.
это будет показано как COM/Последовательный порт загрузчика с режимом загрузки.
Если не сработало, я советую установить драйвер на Adafruit_Driver Windows только с помощью Wine или PlayOnLinux и удалить файлы udev. также проверьте еще раз свой список /dev/tty*
.
Надеюсь, это поможет.
Поэтому я перепробовал ВСЕ... Оказалось, что мой USB-кабель был более дешевым кабелем, в котором не было контактов для передачи данных. Стоит убедиться, что ваш кабель поддерживает передачу данных, подключив его к чему-то другому, чтобы убедиться, что он поддерживает передачу данных.
ttyACM*
также не появился на моем /dev/, но как только я сменил USB-порт, с которым работал, плата arduino начала мигать по-другому. Поэтому я снова проверил IDE и в разделе Инструменты
> порт
> Последовательный порт
увидел, что появился ttyACM0. Для меня это не имело смысла, но сработало.
В моей ситуации, когда я использую пользовательское ядро Linux, мне не хватало драйвера cdc_acm.
Эта отличная страница в Gentoo Wiki помогла мне найти его: https://wiki.gentoo.org/wiki/Arduino
- Первая настройка - отказ в доступе к usb-порту - ubuntu 14.04
- Ошибка «exec: «python»: исполняемый файл не найден в $ PATH. Ошибка компиляции для платы AI Thinker ESP32-CAM». в Arduino IDE 1.8.12
- Почему командная строка BOSSA не распознает Arduino Due?
- Arduino IDE «Инструменты> Последовательный порт» неактивен (Ubuntu)
- Соединение Bluetooth с HC-05 сопряжено, но не подключено (в Linux)
- Как отправить символы в SoftwareSerial Arduino с помощью командной строки Linux без хвоста -f?
- Не удается подключиться через /dev/ttyACM0 (Ubuntu 18.04)
- Arduino Uno R3 не распознается Arduino IDE в Ubuntu 21.04
какая плата? и что еще более важно, какой чип для USB?, @Juraj
@Juraj ATmega32U4 имеет встроенный USB., @H2ONaCl
попробуйте эти документы https://learn.adafruit.com/adafruit-feather-32u4-adalogger/faq, @abu-ahmed al-khatiri
@abu-ahmedal-khatiri вы должны опубликовать это в качестве ответа. Я не знаю, что это исправило, но эта ссылка предполагала, что может потребоваться двойной щелчок. Я не знаю, сколько кликов при двойном клике для этой платы, но в конце концов это сработало., @H2ONaCl
я помогу вам, но у меня нет Feather платы, чтобы попробовать эти документы, вы проверили свой список портов с типом " ll /dev/tty*", который выглядит как " ttyACM*
или
ttyUSB*`, @abu-ahmed al-khatiriпозвольте мне посмотреть, каков вывод
dmesg | grep udev
, @abu-ahmed al-khatiriвы пробовали
sudo systemctl restart ModemManager.service
и снова проверяетеsudo lsof | grep ACM
?, @abu-ahmed al-khatiri