Как открыть ком порт ардуино
Перейти к содержимому

Как открыть ком порт ардуино

Arduino IDE: Монитор порта

Приветствую всех, сегодня хочу рассказать вам о небольшой подпрограмме или утилите, кому как удобней, под названием «Монитор порта». Если вы уже знакомы с Arduino IDE то вы не раз с ней сталкивались и догадались о чем пойдет речь. Но не торопитесь уходить, вам точно будет что прочесть, так как мы пройдемся от основ до полного разбора ее работы.

И так, «Монитор порта» это небольшая подпрограмма Arduino IDE, предназначенная для приёма-передачи данных из-в Arduino. Ввиду того, что Arduino IDE не имеет никаких средств отладки скетчей, это единственное средство проверить все ли работает верно, и так как надо.

Состоит подпрограмма из одной формы, при запуске, Arduino IDE передает ей номер COM-порта, с которым она должна работать, после чего она пытается с ним соединиться и в случае успеха, начинает прослушивать и выводить на экран всю полученную информацию.

Саму форму «Монитора порта» можно разбить на три части: верхняя, центральная и нижняя.

  1. В верхней части расположено поле ввода, в которое пользователь может вписать те данные, которые он хочет отправить в Arduino. Это может быть как текст, так и цифры (подробнее о формате передачи я расскажу чуть ниже). По кнопке «Отправить» как вы уже догадались, подпрограмма отправляет введённые данные в COM-порт и далее в Arduino.
  2. В центральной же части расположено текстовое поле, в которое выводиться вся информация, полученная из COM-порта, т.е. то, что было отправлено из Arduino.
  3. В нижней части формы, расположены дополнительные настройки, а именно:
  • «Автопрокрутка» — Удобна в том случае, когда вы хотите видеть всегда свежую информацию, полученную из Arduino. Центральная часть автоматически пролистывается в самый низ поля.
  • «Постфикс» — Выпадающий список, в котором можно выбрать один из вариантов постфикса, т.е. когда вы нажимаете кнопку «Отправить» в верхней части формы, к данным которые вы ввели в поле, будут добавлены еще несколько байт, какие читайте ниже.
  • «Скорость» — Выпадающий список, в котором необходимо выбрать скорость передачи данных в бодах.

В целом, форма не сложная, элементов на ней мало, запутаться сложно. На этом с описанием мы закончим и начнем подробный разбор.

Передача данных из Arduino в «Монитор порта»

Начнем мы с Arduino.

Для того чтобы передать данные из Arduino в «Монитор порта» необходимо в функции setup() проинициализировать класс Serial вызвав его метод begin попутно передав скорость и настройки COM-порта.

  • Где скорость — это скорость передачи данных бод в секунду.
  • В настройках (не обязательный параметр) же указывается, сколько информационных бит в байте, а также количество стоповых бит и добавлять ли бит четности. По умолчанию если не передать настройки (а они нам не нужны в 99.9% случаев), класс Serial возьмёт стандартные настройки, а именно:
  1. Количество информационных бит в байте – 8.
  2. Количество стоповых бит – 1.
  3. Бит четности – Без бита четности.

Что такое стартовый бит, информационный бит, бит четности, почему скорость измеряется в бодах, я расскажу вам в другой статье, иначе переварить такой большой объём информации, а статья получиться не маленькая, будет не просто. Сейчас же мы будем пользоваться стандартными настройками, где скорость равна 9600 бод в секунду, а настройки Arduino будет выбирать автоматически.

Итого у нас получилось следующее:

После того как все готово, отправить данные можно используя методы print и println того же класса Serial.

Таким образом, в мониторе порта мы будем видеть строку, состоящую из двух «Hellow World!» каждую секунду (см. фото выше).

Класс Serial содержит и другие методы для работы с монитором порта, но, как правило, методов print и println достаточно в большинстве случаев.

Получение данных отправленных из «Монитора порта» в Arduino

Теперь мы попробуем получить команды, отправленные из монитора порта в Arduino и использовать их, например, для включения или выключения светодиода.

Поможет нам с этим все тот же класс Serial и его метод readString.

И так по команде «HIGH» мы будем включать светодиод, а по команде «LOW» будем выключать.

Для того чтобы отправить команду, необходимо в поле расположенном в верхней части формы набрать текст, и нажать кнопку «Отправить». Получать команды мы будем при помощи упомянутого метода readString.

Итого у Вас должно получиться следующее.

Вот так, без особых мучений можно создать N-е количество команд и обрабатывать их в Arduino.

Ну а далее о формате передачи данных.

Формат передачи данных

Напоследок, мы поговорим о том, в каком же виде происходит обмен информацией между «Монитором порта» и Arduino. Не смотря на то, какие данные вы передаете из Arduino в монитор порта, все они конвертируются в строку формата ASCII (см. таблицу), то же самое происходит и при отправке данных из монитора порта в Arduino. Т.е. отправив число десять, вы на самом деле отправляете не число, а строку, состоящую из двух символов, символ единицы и символ нуля.

К примеру, отправив один байт равный 128, на самом деле монитор порта получит три байта.

  • Байт 49 – Символ единицы в кодировке ASCII.
  • Байт 50 – Символ двойки.
  • Байт 56 – Символ восьмерки.

При выполнении метода println мы получим и вовсе 5 байт. Где первые три будут описанные выше, а два дополнительных это байт CR (13) и LF(10), означающие перевод на новую строку.

Посмотрев таблицу символов ASCII, многие заметят, что в ней присутствует символы только латиницы, в следствии чего отправив к примеру "Привет мир!", в мониторе порта мы получим какие то кракозябры. Пользуясь случаем хочу прорекламировать альтернативный монитор порта, написанный авторами портала, который понимает не только надписи на Русском, но и на других языках.

И вот теперь прочтя все, что я тут написал, наконец, можно рассказать что такое «Постфикс», выпадающий список в нижней части монитора порта.

Постфикс это байт или байты, в зависимости от того какой пункт вы выбрали, которые будут добавлены к данным которые вы ввели в поле для отправки.

Например, написав в поле для отправки число 128 и нажав на кнопку «Отправить» мы получим следующее:

  • В постфиксе выбрано «Нет конца строки» — Монитор порта отправит только то что было введено в поле для отправки, не добавляя ничего.
  • В постфиксе выбрано «NL (Новая строка)» — Монитор порта отправит то, что было введено в поле для отправки, и добавит байт LF (10).
  • В постфиксе выбрано «CR (Возврат каретки)» — Монитор порта отправит то, что было введено в поле для отправки, и добавит байт CR (10).
  • В постфиксе выбрано «NL & CR» — Монитор порта отправит то, что было введено в поле для отправки, и добавит два байт CR (13) и LF (10).

На этом все. Пишите в комментариях, что вам не понятно, и в новых статьях мы попробуем расписать это более подробно.

Ну а следующая статья будет о том, как написать свой монитор порта на Delphi.

Последовательный порт. Урок 5. Ардуино

Последовательный порт

Привет! Мы уже начали писать довольно объемные программы на ардуино. А когда программа сложнее чем «hello world» в ней могут появляться ошибки. И, наверняка, вы уже думали, что было бы неплохо следить за состоянием переменных, счетчиков и массивов в процессе выполнения программы. В этом нам поможет запись данных в последовательный порт.

В прошлый раз мы говорили про широтно-импульсную модуляцию или шим. Это довольно важная тема для ардуино. Поэтому, если вы уже забыли или пропустили предыдущий урок, пожалуйста, посмотрите его.

Во всех программах, которые мы уже написали, мы использовали массивы и переменные, которые изменяли свои значения в ходе выполнения программы. В процессе отладки такой программы очень важно иметь возможность проверить состояние переменных, счетчиков или значений элементов массива.

Поэтому сегодня посмотрим каким образом программа на ардуино может записывать данные в последовательный порт, и как использовать эти данные.

Для того, чтобы выполнить этот урок нам понадобиться.

  • Ардуино UNO
  • Макетная плата
  • Перемычки
  • 4 Резистора номиналом 220 Ом
  • 4 Светодиода 5 мм
  • Резистор номиналом 10 кОм
  • Кнопка
  • Кабель USB

Мы уже использовали все эти детали в предыдущем уроке, и сегодня будем использовать ту же схему подключения деталей, но изменим код программы. В уроке про написание собственной функции мы подключали кнопку к нескольким светодиодам. Тот урок можно посмотреть здесь.

Соберем схему еще раз и откроем скетч с программой.

Принципиальная схема подключения светодиодов и кнопки

Serial.begin и Serial.print()

Функция serial.begin() открывает последовательное соединение и принимает на вход скорость передачи данных в бит/c (бод). Чтобы использовать последовательный порт, добавим эту функцию в блок setup()

Теперь мы сможем вывести необходимую информацию в последовательный порт с помощью команды serial.print() или serial.println()

Добавим вывод счетчика i в нашей функции LedON(). Это значит, что при нажатии на кнопку мы будем видеть значение переменной i.

Загрузим программу в ардуино, откроем монитор последовательного порта и попробуем нажимать на кнопку. Открыть монитор можно кликом по его иконке в правом верхнем углу или комбинацией клавиш Ctrl+Shift+M.

Вывод в последовательный порт

Мы видим, что при каждом нажатии, переменная i увеличивается и выводится в монитор порта. Когда i равно 4, все светодиоды выключены, а когда 5, счетчик сбрасывается на 0.

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

Это было довольно просто, правда? Давайте немного изменим программу и рассмотрим еще одну полезную управляющую конструкцию.

Switch Case

Эта конструкция похожа на if else. Но, использовать ее намного удобнее, когда у вас есть много вариантов выполнения программы. Работает это так. Переменная, которая приходит на вход switch() сравнивается с вариантами в case и выполняется тот кусок кода, который отвечает условию.

Заменим условные операторы в нашей функции на switch case таким образом.

Теперь переменная i сравнивается с каждым вариантом case и срабатывает та часть кода, которая подходит под условие.

Также мы немного изменили логику функции, и теперь зажигается столько светодиодов, сколько раз была нажата кнопка, попробуйте.

Полный текст программы

Заключение

В этом уроке мы рассмотрели как мы можем использовать последовательный порт для вывода отладочной информации нашей программы. И познакомились с новой управляющей конструкцией switch case. Теперь мы готовы писать по-настоящему сложные программы и создавать настоящие проекты на ардуино. В следующий раз поговорим про получение данных с внешних датчиков на ардуино.

Arduino & RS-232 Protocol

In this tutorial you will learn how to communicate with a computer using a MAX3323 single channel RS-232 driver/receiver and a software serial connection on the Arduino. A general purpose software serial tutorial can be found here.

  • Computer with a terminal program installed (ie. HyperTerminal or RealTerm on the PC, Zterm on Mac)
  • Serial-Breadboard cable
  • MAX3323 chip (or similar)
  • 4 1uf capacitors
  • Solderless breadboard
  • Hookup wire
  • Arduino Microcontroller Module
  • Light emitting Diode (LED) — optional, for debugging

Prepare the Breadboard

Insert the MAX3323 chip in the breadboard. Connect 5V power and ground from the breadboard to 5V power and ground from the microcontroller. Connect pin 15 on the MAX233 chip to ground and pins 16 and 14 — 11 to 5V. If you are using an LED connect it between pin 13 and ground.

+5v wires are red, GND wires are black

+5v wires are red, GND wires are black

Connect a 1uF capacitor across pins 1 and 3, another across pins 4 and 5, another between pin 2 and ground, and the last between pin 6 and ground. If you are using polarized capacitors make sure the negative pins connect to the negative sides (pins 3 and 5 and ground).

+5v wires are red, GND wires are black

+5v wires are red, GND wires are black

Determine which Arduino pins you want to use for your transmit (TX) and receive (RX) lines. In this tutorial we will be using Arduino pin 6 for receiving and pin 7 for transmitting. Connect your TX pin (7) to MAX3323 pin 10 (T1IN). Connect your RX pin (6) to MAX3323 pin 9 (R1OUT).

TX wire Green, RX wire Blue, +5v wires are red, GND wires are black

TX wire Green, RX wire Blue, +5v wires are red, GND wires are black

Cables

If you do not have one already, you need to make a cable to connect from the serial port (or USB-serial adapter) on your computer and the breadboard. To do this, pick up a female DB9 connector from radioshack. Pick three different colors of wire, one for TX, one for RX, and one for ground. Solder your TX wire to pin 2 of the DB9 connector, RX wire to pin 3 and Ground to pin 5.

ser con top

Connect pins 1 and 6 to pin 4 and pin 7 to pin 8. Heatshrink the wire connections to avoid accidental shorts.

ser con bottom

Enclose the connector in a backshell to further protect the signal and enable easy unplugging from your serial port.

ser con shell

Connect the TX line from your computer to pin 8 (R1IN) on the MAX233 and the RX line to pin 7 (T1OUT). Connect the ground line from your computer to ground on the breadboard.

MAX3323 cable2

TX wires Green, RX wires Blue, +5v wires are red, GND wires are black

Program the Arduino

Now we will write the code to enable serial data communication. This program will simply wait for a character to arrive in the serial receiving port and then spit it back out in uppercase out the transmit port. This is a good general purpose serial debugging program and you should be able to extrapolate from this example to cover all your basic serial needs. Upload the following code into the Arduino microcontroller module:

Open up your serial terminal program and set it to 9600 baud, 8 data bits, 1 stop bit, no parity, no hardware flow control. Press the reset button on the arduino board. The word "hi" should appear in the terminal window followed by an advancement to the next line. Here is a shot of what it should look like in Hyperterminal, the free pre-installed windows terminal application.

hyperterm hi

Now, try typing a lowercase character into the terminal window. You should see the letter you typed return to you in uppercase.

hyperterm abc

If this works, congratulations! Your serial connection is working as planned. You can now use your new serial/computer connection to print debugging statements from your code, and to send commands to your microcontroller.

code and tutorial by Heather Dewey-Hagborg, photos by Thomas Dexter

Arduino и Processing. Как управлять микроконтроллером по COM порту. Двустороннее общение

Всем привет! В интернете бытует заблуждение, что для управления компьютером при помощи самодельной электроники нужны только специальные платы, которые могут распознаваться как USB HID устройства. А касаемо Arduino все только и говорят о Arduino Leanardo. Такие популярные библиотеки как Keyboard и Mouse, которые позволяют создавать эмуляцию работы мыши или клавиатуры посредством микроконтроллера предназначены только для пары плат Arduino, Leonardo в их числе.

Я расскажу о том, как наладить связь любого микроконтроллера Arduino (для примера взята Arduino Uno) и своей программы на Processing. Добавив ко всему прочему знания о Java, на котором основывается Processing, можно будет дописать проект под управление всем компьютером, а не только собственным приложением. Тема управления компьютером программой на Java не есть чем то секретным, погуглите и все найдете, уверяю вас.

Скачиваем среды для разработки (IDE)

Существует много интегрированных сред разработки для программирования микроконтроллеров на чистом Си. Из них можно отметить самые удобные: Atollic, Eclipse, Keil.

Однако для простоты и доступности данного руководства я буду использовать редактор Arduino IDE и писать на Ардуино Си. Скачать такой редактор можно с официального сайта Arduino.

Среду разработки для программирования на Procrssing так же можно скачать с официального сайта.

Стоит отметить, приличия ради, что данные IDE очень похожи, потому что написаны на одном движке. И когда создавался Arduino основатели старались как можно больше упростить свой редактор кода, как это и было сделано в Processing редакторе.

Arduino. Собираем схему и пишем код

В данном примере я буду использовать Arduino Uno. К ней будет подключена кнопка, потенциометр и светодиод. Соответственно я могу выдавать логический 0 или 1. Читать логический 0 или 1. И проводить Аналого-цифровое преобразование(ADC или АЦП), получая числа от 0 до 1023 (в Arduino Uno 10-ми разрядный АЦП) в зависимости от положения потенциометра. Большего для примера и не нужно, так как это основные функции, которые может делать микроконтроллер.

На схеме светодиод анодом подключен к 5V через ограничивающий резистор ( минимум 220 Ом, желательно 500 Ом), катодом к пину D11. Кнопка замыкает землю и пин D2. Потенциометр меняет потенциал на пине A1.

Задача микроконтроллера следующая: Если по последовательному интерфейсу (Serial COM port) приходит сообщение «LED — H» — засветить светодиод. Если приходит сообщение «LED — L» — затушить светодиод. Каждые 250мс отправлять сообщение в последовательный порт (в данном случае на экран компьютера) сообщение «Pot — » и число, полученное аналоговым чтением пина A1. При нажатии кнопки единожды отсылать сообщение «Button is pressed!».

Вот мое предложение решения данной задачи (не пример для подражания):

Комментарий: Светодиод подключен анодом к питаю. Это инвертирует логику состояния светодиода и больше никакой пользы не приносит. Кнопка не обвязана подтягивающим резистором из соображений экономии, так как в Arduino Uno имеются встроенные подтягивающие резисторы, которые включаются в схему при инициализации пина в режим INPUT_PULLUP.
Так же в прошивке сообщения о значении снятого с потенциометра отсылаются только после первого нажатия на кнопку!

Что бы залить прошивку в плату не забывайте выбрать порт и плату.

Если вы не знаете какой COM порт у вас отведен для платы Arduino, то на Windows заходим в
Панель управления -> Диспетчер устройств и нажимаем на вкладку «Порты COM»

Если у вас COM порт не подписан как у меня — всегда можно отсоединить Arduino и посмотреть который порт пропадет. А вот если никакой не пропал и Ардуина вовсе не распознается компьютером — значит пора поискать решение в интернете. Но начните с обновления драйверов или смены платы.

Когда все получится — попробуйте открыть монитор порта и ввести «Led — H», «Led — L», по нажимайте на кнопку, покрутите потенциометр и смотрите на экран, все ли правильно выводится.

Наигрались — поменяйте слегка код.

Замените последнюю строку кодом из комментария.

Теперь значения с потенциометра не будут выглядеть читабельными, но такой маневр требуется для программы на Processing.

Processing. Пишем программу, которая взаимодействует с микроконтроллером

Суть связи программы на Processing и микроконтроллера очень проста. Для этого языка программирования существует библиотека Serial, которая позволяет принимать сообщения, отправленные как Serial.write(); , а так же позволяет отправлять сообщения как Serial.print(); . Важно отметить, что при подобной отправке сообщения оно будет записано в буфер порта, а значит будет прочитано микроконтроллером. Так что нам осталось только подключиться к нужному Serial порту и принимать/отправлять на него сообщения.

Следующая программа подключит библиотеку Serial и напишет в консоли редактора список всех COM портов, к которым можно подключиться.

Когда вы напишете код в редактор и нажмете на кнопку «Пуск» (стрелочка 1 на картинке), то появится окно приложения(2) и в консоли(3) выведется список COM портов.

У меня только один такой COM порт и в листе, как в массиве, он будет находиться под номером 0. Из этих соображений объекту класса Serial: Serial port; при его создании будет указан именно первый элемент списка портов port = new Serial(this, Serial.list()[0], 9600);

Залейте в Ардуину нашу последнюю прошивку с изменением. После чего напишите вот эту программу и запустите ее. В ней Каждые 500 миллисекунд отправляется сообщение в COM порт потушить или зажечь светодиод. И если все у вас сделано правильно, то после запуска приложения светодиод должен мигать.

Или вот другой пример. Светодиод будет менять свое состояние после любого нажатия на окно приложения (размеры которого 800х800px) кнопкой мыши.

Processing. Пример многофункционального приложения

Данное элементарное приложение симулирует «полет в космосе», если это можно так назвать. Значение с потенциометра изменяет скорость полета, нажатие на кнопку меняет направление полета. А любое нажатие кнопки мыши на окно приложения — меняет состояние светодиода (да, ничего оригинальнее я не придумал).

Мой код далек от совершенства, не принимайте его как хороший пример. Это просто пример, который работает. Вот, собственно, он.

Заключение

Думаю, нужно написать, что идею последней программы я подцепил у одного программиста — Daniel Shiffman, который снимает ролики, понятные даже детям, о программировании на Processing (решено более 140 визуальных задач).

Когда я пытался сам разобраться в том что и как нужно делать для связи Processing и Arduino мне очень помогли вот эти сайты:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *