I just had this problem with my Genuine Arduino Mega 2560 trying to connect to it from an Ubuntu 18.04.5 LTS machine using a locally compiled Arduino IDE version 1.8.16. I was able to fix it in my case, so posting here to share the tips.
Came across several other forum topics reporting the same symptoms (even though not all are Mega and not all on 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-doesnt-respond
- 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/
After troubleshooting for several hours I was able to reliably connect to my Mega. It turned out there were multiple problems that prevented it from working that had to be understood and solved, and when I realized what they were I could not believe my eyes.
The posters who suggested making sure that udev rules are configured to prevent the ModemManager from hogging the Mega device, thereby making it unavailable to the Arduino IDE were on the right track. So I checked my /etc/udev/rules.d/70-snap.core.rules
and indeed confirmed that there already was a rule for ModemManager to ignore devices with USB vendor ID 2341, which is the Genuine Arduino:
...
ATTRS{idVendor}=="2341", ENV{ID_MM_DEVICE_IGNORE}="1"
...
However, when I did a tail -f /var/log/syslog
and plugged in the Mega, I could not believe my eyes to see that ModemManager was still trying to talk to it:
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
It looks like the ModemManager was still trying to connect to it as a non-USB TTY device.
The problem was exacerbated in that the Arduino IDE was not handling this problem gracefully and kept hanging and trying to connect to the Mega even after I unplugged it from the USB. Nevertheless, I did a quick ps -ef | grep ModemManager
and then kill [PID]
, waited until the Arduino IDE stopped trying to connect to the disconnected Mega, then plugged it back in, specified the port via ‘Tools’ -> ‘Port’, and again attempted an upload, and it worked like a charm. (Conversely, had I just waited watching /var/log/syslog
for ModemManager to give up and free the device Arduino IDE might have also worked without me explicitly killing the ModemManager. That probably explains why it worked sporadically.)
So then I thought I solved all my problems and started bolting the Mega into my device. I tightened the connecting fasteners, and again could not believe my eyes that it stopped working again. Took the Mega back out, unbolted the whole board and now it worked, bolted it back in, and it stopped working. After several rounds, correlated the use of a brass standoff on the hole right next to the pin A6 as causing this problem. I surmise that the metal standoff was shorting out or somehow interfering with PCB traces that run very close to that hole. So stopped bolting in that hole, and the Mega started working fine assembled into my device.
So in my case, 2 problems were preventing the Mega from working and PC connecting to it via USB:
(1) ModemManager was hogging the device as soon as it was plugged in despite the udev USB rules. Solution — killed ModemManager (still need to look into modifying system config so that I don’t have to kill it each time).
(2) Hardware issue with the metal riser interfering with PCB traces near hole next to pin A6. Solution — stopped bolting in that hole.
Hope this is helpful.
Моя ОС — Ubuntu 18.04, и Arduino работал до сих пор.
Хотя есть несколько решений, ни одно из них мне не подходит.
Я следовал этим инструкциям на сайте Arduino.
Затем я попробовал это на Arduino Stack Exchange, который должен работать в тех случаях, когда первое решение не сработало. Ответ говорит, что мы должны создать несколько правил /etc/udev/ruled.d/
дорожка.
Но никто из них не работал для меня.
Я также проверил Arduino в Windows 10, чтобы увидеть, была ли это аппаратная проблема, но она работала нормально.
У кого-нибудь есть еще идеи как решить эту проблему?
ОБНОВИТЬ:
- Мое имя пользователя, sergio, является частью обеих групп (tty и dialout);
- Я вышел из системы и вернулся, как объясняет официальный учебник Arduino;
- В Arduino IDE правильные конфигурации: Arduino UNO и ttyACM0
-
Это вывод
ll /dev/ttyACM0
после запуска обучающих команд:crw-rw-rw- 1 root dialout 166, 0 Jul 15 05:41 /dev/ttyACM0
ОБНОВЛЕНИЕ 2:
Я создал скрипт для решения этой проблемы: https://github.com/sergiomafra/iniarduino
2018-07-15 12:11
12
ответов
Решение
Переустановите ваш arduino, установленный из программного центра Ubuntu:
sudo apt install --reinstall arduino
Переустановка необходима, так как ваш which avrdude
Команда согласно вашему комментарию ничего не возвращает, но должна быть /usr/bin/avrdude
, Проверьте еще раз:
which avrdude
Запустите вашу Arduino IDE после переустановки и закройте ее.
Проверьте вашу конфигурацию arduino. открыто /home/sergio/.arduino/preferences.txt
файл и проверьте там serial.port
вариант. Попробуйте изменить это на /dev/ttyACM0
, Откройте этот файл:
sudo nano /home/sergio/.arduino/preferences.txt
и применить соответствующие изменения, т.е. вариант должен выглядеть
serial.port=/dev/ttyACM0
Перезагрузите компьютер после этого.
Bob
15 июл ’18 в 14:33
2018-07-15 14:33
2018-07-15 14:33
У меня была похожая проблема, когда я пытался загрузить эскиз в Arduino. Проблема была связана с отсутствием разрешений на чтение / запись на последовательный порт. Мне удалось исправить с помощью следующей команды:
Чтобы подтвердить, что порт существует, введите следующее из корневого каталога.
ls /dev/ttyACM0
Чтобы установить разрешения на чтение / запись, введите следующее
sudo chmod a+rw /dev/ttyACM0
Adrian
22 янв ’19 в 06:13
2019-01-22 06:13
2019-01-22 06:13
Вот что сработало для меня:
- Удалите версию с Apt, она не работает должным образом (
sudo apt uninstall arduino; sudo apt autoremove
) - Установите версию с сайта Arduino
sudo apt install avrdude
так как тот, что на сайте не включает егоsudo usermod -a -G dialout [your_username]
так как тот с сайта не делает это автоматически
И теперь все снова работает!
Draconis
28 май ’19 в 18:36
2019-05-28 18:36
2019-05-28 18:36
Это помогло решить проблему «невозможно открыть последовательный порт» (введите свое имя пользователя Ubuntu вместо
$USER
) после загрузки Arduino из Ubuntu Software.
sudo usermod -a -G dialout $USER
sudo chmod a+rw /dev/ttyUSB0
18 сен ’20 в 07:10
2020-09-18 07:10
2020-09-18 07:10
В сочетании со всеми сообщениями, которые я прочитал, это то, что я сделал, чтобы решить эту проблему, следуя указаниям из этой темы.
В новом терминале я набрал следующее, как показано ниже.
Обратите внимание, что fourplus — это мое имя пользователя.
2019-03-10 02:14
У меня была такая же проблема, я попытался установить из Ubuntu Store 18.04 и попробовать любое решение здесь. У меня ничего не работало. Так я скачал последний
Я извлек и запустил следующую команду, чтобы установить его:
$ sudo ./install.sh
После установки я запустил сценарий, входящий в последнюю версию, выполнив следующее:
$./arduino-linux-setup.sh <имя_пользователя>
Как только сценарий будет завершен, он покажет вам сообщение «Пожалуйста, перебронируйте систему». Я не перезапускал, когда пробовал решения здесь, может быть это то, что должны попробовать следующие пользователи.
Важно: при установке программного обеспечения, выполнив следующие действия, вам необходимо перейти в программное обеспечение Ubuntu и дать разрешение на «доступ к USB-оборудованию напрямую».
titusfx
14 сен ’20 в 17:39
2020-09-14 17:39
2020-09-14 17:39
Ха Я новичок и сделал несколько ошибок)) Не делай так, как я.
- Во-первых, в моей книге было плохое изображение схемы подключения светодиода. Нашел новый и переподключил провода. Теперь они подключены правильно.
- Потом подключил арудино к компьютеру (это важно).
-
Затем я выполнил следующие команды:
- ls -l /dev / ttyACM0
- sudo usermod -a -G dialout [my_username]
- sudo chmod a+rw /dev / ttyACM0
Когда я искал плату в меню программы Arduino (Инструменты -> Плата), я не нашел «Arduino/Genuino Uno», просто там была «Arduino Uno» (думаю, все в порядке)
01 май ’20 в 22:09
2020-05-01 22:09
2020-05-01 22:09
Я вижу, что вопрос уже принят, но ни одно из решений не помогло мне, поэтому у меня есть другое решение. Я установил IDE arduino через установщик программного обеспечения Ubuntu. Что вам нужно сделать, так это.
- Перейдите в IDE arduino в магазине программного обеспечения Ubuntu
- нажмите разрешения
- установить доступ к USB-оборудованию непосредственно на
22 мар ’20 в 16:24
2020-03-22 16:24
2020-03-22 16:24
Для меня любой
chmod
а также
udev
правило не сработало.
Только принуждение
avrdude
для запуска с правами root:
$ sudo chmod u+s /opt/arduino/hardware/tools/avr/bin/avrdude
eadmaster
16 июн ’21 в 03:47
2021-06-16 03:47
2021-06-16 03:47
Обновление 2 OP для создания скрипта отлично решает проблему. Проверьте это на GitHub.
[email protected]:~/Downloads/iniarduino-master$ iniarduino
[sudo] password for vipulgupta2048:
Arduino connected!
Checking if 2048 is part of dialout and tty groups
2048 added to dialout group
2048 added to tty group
Password required to change permissions of /dev/ttyACM0
Permissions to /dev/ttyACM0 changed to a+rw
Reloading UDEV Rules
UDEV Rules reloaded without the need to restart
All Done!
2022-02-19 20:50
Для меня сработала смесь двух приведенных выше ответов: во-первых, я не смог найти avrdude, which avrdude
это мне ничего не дало. Итак, мне пришлось переустановить ардуино.
sudo aptinstall --reinstall arduino
Это установило avrdude, и я мог найти его в /usr/bin/avrdude
. Следующим шагом было установить разрешение на чтение / запись для последовательного порта:
sudo chmod a+rw /dev/ttyACM0
Затем я мог загрузить скетч на свой ардуино!
2020-07-03 13:14
У меня есть решение.
-
Найдите свой порт, к которому подключен Arduino (например, мой был
/dev/ttyUSB0
). Вы можете найти это в сообщении об ошибке в Arduino IDE. -
Откройте терминал (Ctrl+Alt+T).
-
В терминале запустите:
sudo chmod 777 /dev/ttyUSB0
Приведенная выше команда устанавливает необходимые разрешения.
11 дек ’19 в 13:22
2019-12-11 13:22
2019-12-11 13:22
If you use an Arduino IDE on Linux (e.g. Ubuntu, Linux Mint, etc.), you may get the following errors while trying to upload a sketch to the Arduino broad:
Caused by: processing.app.SerialException: Error touching serial port ‘/dev/ttyACM0’.
– and –
Caused by: jssc.SerialPortException: Port name – /dev/ttyACM0; Method name – openPort(); Exception type – Permission denied.
In this note i am showing how to permanently fix the “Permission denied” error on the serial port /dev/ttyACM0
while uploading the Arduino sketch.
Cool Tip: Add “Arduino Pro Micro” board to the Arduino IDE! Read more →
The /dev/ttyACM0
device has the group of dialout
:
$ stat /dev/ttyACM0
- sample output -
File: /dev/ttyACM0
Size: 0 Blocks: 0 IO Block: 4096 character special file
Device: 6h/6d Inode: 345 Links: 1 Device type: a6,0
Access: (0660/crw-rw----) Uid: ( 0/ root) Gid: ( 20/ dialout)
The members of the dialout
group have full and direct access to serial ports.
To permanently solve the issue with the permissions for /dev/ttyACM0
, all you need is to add your user to the dialout
group:
$ sudo usermod -a -G dialout <username>
Logout and then log back in for the group changes to take effect.
After that you should be able to upload your sketch to the Arduino broad connected to the serial port /dev/ttyACM0
without any “Permission denied” errors.
Cool Tip: Simulate keystrokes using the Arduino boards! Read more →
Was it useful? Share this post with the world!
I am trying to work with the (new) sparkfun razor IMU 9dof, I wrote a silple sktetch to calibrate the magnetometer:
#include <SparkFunMPU9250-DMP.h> // Include SparkFun MPU-9250-DMP library
#include <Wire.h> // Depending on your Arduino version, you may need to include Wire.h
MPU9250_DMP imu; // Create an instance of the MPU9250_DMP clas
void setup() {
Serial.begin(115200);
Serial.println(F("Adafruit 10 DOF Board AHRS Calibration Example")); Serial.println("");
if (imu.begin() != INV_SUCCESS){
while (1) {
Serial.println("Failed to initialize MPU-9250, loop forever");
}
}
imu.setGyroFSR(2000); // Set gyro to 2000 dps
imu.setAccelFSR(2); // Set accel to +/-2g
imu.setLPF(5); // Set LPF corner frequency to 5Hz
imu.setSampleRate(100); // Set sample rate to 10Hz
imu.setCompassSampleRate(100); // Set mag rate to 10Hz
}
void loop(void){
imu.update();
// Print the sensor data
Serial.print("Raw:");
Serial.print(imu.ax);
Serial.print(',');
Serial.print(imu.ay);
Serial.print(',');
Serial.print(imu.az);
Serial.print(',');
Serial.print(imu.gx);
Serial.print(',');
Serial.print(imu.gy);
Serial.print(',');
Serial.print(imu.gz);
Serial.print(',');
Serial.print(imu.mx);
Serial.print(',');
Serial.print(imu.my);
Serial.print(',');
Serial.print(imu.mz);
Serial.println();
delay(50);
}
To be sure the Arduino IDE can access to dev/ttcACM0, I did sudo chmod 666 /dev/ttyACM0
I can dowload successfully but when I want to open the terminal I got the following error:
Erreur d’ouverture du port série « /dev/ttyACM0 ». (Port busy) (see attached screenshot)
More over when I entered dmesg on the console, I can see the following messages:
[ 94.133923] usb 3-2: USB disconnect, device number 2
[ 94.133978] cdc_acm 3-2:1.1: urb 12 failed submission with -19
[ 94.135862] cdc_acm 3-2:1.1: urb 13 failed submission with -19
[ 94.136059] cdc_acm 3-2:1.1: urb 14 failed submission with -19
[ 94.136257] cdc_acm 3-2:1.1: urb 15 failed submission with -19
[ 94.136457] cdc_acm 3-2:1.1: urb 2 failed submission with -19
[ 94.136656] cdc_acm 3-2:1.1: urb 3 failed submission with -19
[ 94.136852] cdc_acm 3-2:1.1: urb 5 failed submission with -19
[ 94.137048] cdc_acm 3-2:1.1: urb 6 failed submission with -19
[ 94.138841] xhci_hcd 0000:03:00.0: WARN Cannot submit Set TR Deq Ptr
[ 94.138843] xhci_hcd 0000:03:00.0: A Set TR Deq Ptr command is pending.
[ 94.931853] usb 3-2: new full-speed USB device number 3 using xhci_hcd
[ 95.316578] usb 3-2: New USB device found, idVendor=1b4f, idProduct=9d0f
[ 95.316581] usb 3-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 95.316582] usb 3-2: Product: SFE 9DOF-D21
[ 95.316584] usb 3-2: Manufacturer: SparkFun
[ 95.320306] cdc_acm 3-2:1.0: ttyACM0: USB ACM device
[ 858.774849] usb 3-2: USB disconnect, device number 3
[ 904.529058] TCP: wlp1s0: Driver has suspect GRO implementation, TCP performance may be compromised.
Does anyone outhere experienced such issue?
Thank you for your help
Fabrice
Loading