Linux узнать порт arduino

Arch Linux

You are not logged in.

#1 2012-03-04 04:50:36

[SOLVED>How to find Arduino Serial Port

I’m having trouble finding the serial port being used by my arduino. The wiki suggests /dev/USB* or /dev/ACM*, but I see none of those. I’m also not sure what I would use to check everything.log. Thanks

EDIT: A reboot showed the port after the command dmesg. Logout did not seem to be sufficient.

Last edited by duke11235 (2012-03-04 05:42:37)

#2 2012-03-04 05:26:15

Re: [SOLVED>How to find Arduino Serial Port

Remove the cable, run dmesg. Then plug it in and run dmesg again. Should show you some output pertaining to where its located.

Linux ArchLinux 3.2.8-1-ARCH
#1 SMP PREEMPT Mon Feb 27 21:51:46 CET 2012 x86_64 AMD FX(tm)-8120 Eight-Core Processor AuthenticAMD GNU/Linux
8192MB DDR3 1300MHz | Asus m5a97 | GeForce GTX 550 Ti | 120 GB SSD

#3 2012-03-04 05:29:56

Re: [SOLVED>How to find Arduino Serial Port

Tried that, says new usb 3-1: new usb full-speed device number 12 using ohci_hcd. Does that relate to a certain tty in /dev? I’m not sure

#4 2012-03-04 06:22:24

Re: [SOLVED>How to find Arduino Serial Port

Can you post output from what you have been doing? dmesg, lsusb, etc etc. Does it say anything about the type of device?
example:

Is your system up to-date?

Linux ArchLinux 3.2.8-1-ARCH
#1 SMP PREEMPT Mon Feb 27 21:51:46 CET 2012 x86_64 AMD FX(tm)-8120 Eight-Core Processor AuthenticAMD GNU/Linux
8192MB DDR3 1300MHz | Asus m5a97 | GeForce GTX 550 Ti | 120 GB SSD

#5 2012-03-22 15:11:44

Re: [SOLVED>How to find Arduino Serial Port

@duke11235: the wiki suggests /dev/ttyACM*, you seem to have forgoten the tty part in your first post.

I’m getting this when typing lsusb:

It has no description as you can see, it is an empty line. I do not know if this is normal, I got my Arduino a few minutes ago so some things are new to me

Dmesg reports this:

Last edited by mandos (2012-03-22 16:40:55)

Источник

Error opening serial port (Linux)

Overview

When uploading a sketch you may get the following error

or, when opening the serial Monitor

Note: The number in ttyACM* may be different.

If this happens, start by ensuring that you are using the correct port:

  • Arduino IDE:Tools > Port > [select port]
  • Web Editor: Select port using the dropdown.

If the problem persists there may be an issue with permissions for the serial port. See below for step-by-step instructions on how to set the correct permissions.

How to set serial port permissions

Open Terminal and type

Press enter. Terminal will return something like

What we are interested in is the group name, which is probably called dialout .

Note: The number at the end of ttyACM may be different, or multiple entries might be returned.

Now we want to add your user to that group. Input the following command in the terminal, replacing with the group name from above, and with your username, both without brackets.

Читайте также:  Планшет windows для рукописного ввода

Press enter. Input password if prompted.

Lastly, for the new permissions to take effect, you need to log out and in to your user account.

You can verify the changes by typing

into the Terminal and pressing Enter. The group you added should appear in the list.

Источник

Монитор порта, отладка

Как мы с вами знаем из урока “О платформе“, на платах Ардуино стоит USB-TTL конвертер, позволяющий микроконтроллеру в текстовом режиме “консоли” общаться с компьютером по последовательному интерфейсу, Serial. На компьютере создаётся виртуальный COM порт, к которому можно подключиться при помощи программ-терминалов порта, и принимать-отправлять текстовые данные. Через этот же порт загружается прошивка, т.к. поддержка Serial является встроенной в микроконтроллер на “железном” уровне, и USB-TTL преобразователь подключен именно к этим выводам микроконтроллера. На плате Arduino Nano это кстати пины D0 и D1.

К этим же пинам можно подключаться при помощи отдельных плат “программаторов”, например на чипах CP2102 или том же CH340 с целью загрузки прошивки или просто общения с платой. В самой Arduino IDE тоже есть встроенная “консоль” – монитор порта, кнопка с иконкой лупы в правом верхнем углу программы. Нажав на эту кнопку мы откроем сам монитор порта, в котором будут настройки:

Если с отправкой, автопрокруткой, отметками времени и кнопкой “очистить вывод” всё понятно, то конец строки и скорость мы рассмотрим подробнее:

  • Конец строки: тут есть несколько вариантов на выбор, чуть позже вы поймёте, на что они влияют. Лучше поставить нет конца строки, так как это позволит избежать непонятных ошибок на первых этапах знакомства с Ардуино.
    • Нет конца строки – никаких дополнительных символов в конце введённых символов после нажатия на кнопку отправка/Enter
    • NL – символ переноса строки в конце отправленных данных
    • CR – символ возврата каретки в конце отправленных данных
    • NL+CR – и то и то
  • Скорость – тут на выбор нам даётся целый список скоростей, т.к. общение по Serial может осуществляться на разных скоростях, измеряемых в бод (baud), и если скорости приёма и отправки не совпадают – данные будут получены некорректно. По умолчанию скорость стоит 9600, её и оставим.
  • Очистить вывод – тут всё понятно, очищает вывод

Объект Serial

Начнём знакомство с одной из самых полезных штук Arduino-разработчика – Serial . Serial это объект класса Stream, позволяющий как просто принимать/отправлять данные через последовательный порт, так и наследует из класса Stream кучу интересных возможностей и фишек, давайте сразу их все рассмотрим, а потом перейдём к конкретным примерам.

Запустить связь по Serial на скорости speed (baud rate, бит в секунду). Скорость можно поставить любую, но есть несколько “стандартных”. Список скоростей для монитора порта Arduino IDE:

  • 300
  • 1200
  • 2400
  • 4800
  • 9600 чаще всего используется, можно назвать стандартной для большинства устройств с связью через TTL
  • 19200
  • 38400
  • 57600
  • 115200 тоже часто встречается
  • 230400
  • 250000
  • 500000
  • 1000000
  • 2000000

Отправляет в порт значение val – число или строку. В отличие от write выводит именно символы, т.е. отправив 88 вы получите 88: Serial.print(88); выведет 88. Также метод print/println имеет несколько настроек для разных данных, что делает его очень удобным инструментом отладки:

Читайте также:  Windows установка не требующая ключа

format позволяет настраивать вывод данных: BIN, OCT, DEC, HEX выведут число в соответствующей системе исчисления, а цифра после вывода float позволяет настраивать выводимое количество знаков после точки

Читает данные из буфера и ищет набор символов target (тип char), опционально можно указать длину length. Возвращает true, если находит указанные символы. Ожидает передачу по таймауту

Плоттер

Помимо монитора последовательного порта, в Arduino IDE есть плоттер – построитель графиков в реальном времени по данным из последовательного порта. Достаточно отправить значение при помощи команды Serial.println(значение) и открыть плоттер по последовательному соединению, например построим график значения с аналогового пина A0:

Плоттер поддерживает несколько линий графиков одновременно, для их отображения нужно соблюдать следующий протокол отправки данных: значение1 пробел_или_запятая значение2 пробел_или_запятая значение3 пробел_или_запятая значениеN перенос_строки, то есть значения выводятся в одну строку, одно за другим по порядку, разделяются пробелом или запятой, и в конце обязательно перенос строки. Давайте выведем несколько случайных величин:

Вывод значений происходит каждые 10 миллисекунд, а каждые 300 миллисекунд значения обновляются. Получаем вот такой график: В Arduino IDE с версии 1.8.10 добавили возможность подписать графики, для этого перед выводом нужно отправить названия в виде название 1, название 2, название n с переносом строки, и дальше просто выводить данные:

Использование пинов

Как я писал выше, аппаратный Serial имеет выводы на ноги микроконтроллера, для Nano/Uno/Mini это выводы D0 и D1. Можно ли работать с этими пинами, как с обычными цифровыми пинами? При отключенном Serial – можно, при включенном – нет. После вызова Serial.begin() ноги перестают функционировать как цифровые пины в ручном режиме, но после вызова Serial.end() можно снова ими пользоваться!

Отправка и парсинг

Рассмотрим самый классический пример для всех языков программирования: Hello World! Отправка данных в порт не должна вызывать трудностей и вопросов, потому что всё понятно/очевидно, да и чуть выше в описании метода print мы рассмотрели все варианты вывода. Отправка в порт позволяет узнать значение переменной в нужном месте программы, этот процесс называется отладка. Когда код работает не так, как нужно, начинаем смотреть, где какие переменные какие значения принимают. Или выводим текст из разных мест программы, чтобы наблюдать за правильностью (порядком) её работы. Давайте вспомним урок циклы и массивы и выведем в порт массив:

Вывод: 0 50 68 85 15 214 63 254 – элементы массива, разделённые пробелами! Проблемы возникают при попытке принять данные в порт. Дело в том, что метод read() читает один символ, даже если вы отправите длинное число – программа получит его по одной цифре, и составлять число из цифр придётся вручную. Проблема усугубляется тем, что read() читает именно символ, то есть код символа в таблице ASCII. Посмотрим вот такой пример, в котором в порт отправляются принятые в него данные (так называемое эхо):

Так как же принять именно цифру? Есть хитрость – вычитать из полученного кода символа код цифры 0, либо сам 0 в виде символа: ‘0’

Также для принятия одиночных чисел у нас есть готовый метод – parseInt() / parseFloat() – для целочисленных и рациональных чисел соответственно. Процесс приёма и расшифровки данных называется парсинг (parsing). Давайте примем в порт число 1234, используя готовый метод парсинга.

Читайте также:  Linux cli speed tester

Итак, мы используем конструкцию if (Serial.available()) <> чтобы опрашивать порт только в том случае, если в него что-то пришло. Отправив в порт число 1234 мы получим ответ ОК, отправив любое другое – error. Также вы заметите, что после отправки проходит секунда, прежде чем плата ответит. Эта секунда спрятана внутри метода parseInt, программа ждёт секунду после принятия данных, чтобы все данные успели прийти. Секунда это очень много, достаточно было ждать, скажем, 50 миллисекунд. Это можно сделать при помощи метода setTimeout() .

Теперь после отправки цифры программа будет ждать всего 50 мс, и сразу же вам ответит. Остальные алгоритмы отправки и парсинга, в том числе обмена разнотипными данными между Ардуинами и другими платами смотри в уроке общение по Serial.

Управляющие символы

Существуют так называемые управляющие символы, позволяющие форматировать вывод. Их около десятка, но вот самые полезные из них

  • \n – новая строка
  • \r – возврат каретки
  • \v – вертикальная табуляция
  • \t – горизонтальная табуляция

Также если для вывода вы захотите использовать одинарные или двойные кавычки, или обратный слэш \ – нужно выводить их при помощи соответствующего спецсимвола, иначе ваш вывод “поломается”, я думаю, не нужно объяснять, почему:

  • \» – двойные кавычки
  • \’ – апостроф
  • \\ – обратный слэш
  • \0 – нулевой символ
  • \? – знак вопроса

Как использовать? Просто писать в вывод. Например комбинация \r\n переведёт строку и вернёт курсор в левое положение:

Именно так кстати и работает функция println() , она просто добавляет вывод \r\n после print() =) Символы табуляции позволят удобно отправлять данные для последующей вставки в excel или другие таблицы. Например выведем несколько степеней двойки в виде таблицы, используя символ табуляции \t :

Результат скопируем и вставим в excel Удобно!

Видео

Источник

Приём данных от Arduino в Linux-консоли. Как?

Доброе время суток!

Есть Arduino, которая шлёт постоянный поток данных на компьютер c Linux. Данные идут через /dev/ttyACM0.
Вопрос: как читать данные от неё и сохранять их в файл serial_port.data?

не помогают. Сохраняют только обрывочные данные (2-5 символов, которые передавались во время запуска команды).

UPD: Полурешение.
Во-первых, установлена задержка передачи данных с Arduino через последовательный порт, чтобы данные шли не потоком символов, а порциями. Во-вторых, в одном терминале:

А в другом переодически выполняется

Частота выполнения cat и задержка в передаче данных от Arduino должны быть согласованы, таким образом плата посылает один пакет данных, он «запоминается» командой tail и направляется в файл командой cat. «Запомненное» командой tail очищается. И по новому кругу.

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

  • Вопрос задан более трёх лет назад
  • 22177 просмотров

Не забывайте про stty и настройку COM порта. У меня настройка идёт такой командой.
stty -F /dev/ttyACM0 cs8 9600 ignbrk -brkint -icrnl -imaxbel -opost -onlcr -isig -icanon -iexten -echo -echoe -echok -echoctl -echoke noflsh -ixon -crtscts raw

код для Arduino:

Демон, читающий каждые 3 секунды команды с Arduino и выводящий всё на консоль (на sh). Текст от Arduino попадает в переменную $LINE:

Таким образом, при запуске демона Arduino сама перезагружается и пишет в консоль, при подключении/отключении производится повторная настройка порта и всё продолжает работать дальше.

Источник

Оцените статью