Как настроить последовательный монитор Arduino для отладки кода. Как отправлять и получать данные через Serial порт. Какие функции библиотеки Serial наиболее полезны для работы с монитором порта. Как форматировать вывод в Serial Monitor для удобного чтения.
Что такое Serial Monitor в Arduino и зачем он нужен
Serial Monitor (монитор порта) — это встроенный инструмент Arduino IDE, который позволяет обмениваться текстовыми данными между компьютером и платой Arduino через USB-кабель. Он выполняет две основные функции:
- Отображает данные, отправленные с Arduino на компьютер
- Позволяет отправлять команды и данные с компьютера на Arduino
Монитор порта крайне полезен для:
- Отладки кода — вывода промежуточных значений переменных
- Визуализации показаний датчиков в реальном времени
- Удаленного управления Arduino путем отправки команд
- Обмена данными между Arduino и компьютерными программами
Как открыть Serial Monitor в Arduino IDE? Для этого нужно:
- Подключить Arduino к компьютеру по USB
- Открыть Arduino IDE
- Нажать кнопку «Serial Monitor» на панели инструментов (иконка в виде лупы)
- Или выбрать Tools -> Serial Monitor в меню
- Или использовать сочетание клавиш Ctrl+Shift+M
Настройка Serial Monitor для работы с Arduino
Для корректной работы Serial Monitor необходимо настроить несколько параметров:
Скорость передачи данных (Baud Rate)
Это скорость обмена данными между Arduino и компьютером. Она должна совпадать в коде и настройках монитора. Типичные значения:
- 9600 бод — стандартная скорость для большинства проектов
- 115200 бод — высокая скорость для быстрого обмена данными
В коде скорость задается функцией:
Serial.begin(9600);
В мониторе порта выбирается из выпадающего списка внизу окна.
Символ конца строки (Line Ending)
Определяет, какой символ будет добавляться в конце отправляемых строк:
- No line ending — без добавления
- Newline — перевод строки \n
- Carriage return — возврат каретки \r
- Both NL & CR — оба символа \r\n
Выберите вариант, соответствующий ожиданиям вашего кода на Arduino.
Основные функции для работы с Serial в Arduino
Библиотека Serial предоставляет набор функций для обмена данными через последовательный порт:
Инициализация Serial
Serial.begin(9600); // Задаем скорость обмена данными
Отправка данных на компьютер
Serial.print("Текст"); // Вывод без перевода строки
Serial.println("Текст с переводом строки");
Serial.write(байт); // Отправка одного байта
Получение данных с компьютера
if (Serial.available()) { // Есть данные для чтения
int data = Serial.read(); // Чтение одного байта
String str = Serial.readString(); // Чтение строки
}
Проверка соединения
while (!Serial) { ; // Ждем подключения Serial порта }
Форматирование вывода в Serial Monitor
Для удобного чтения данных в мониторе порта можно использовать различные приемы форматирования:
Табуляция и пробелы
Serial.print("Датчик 1:\t"); // Табуляция
Serial.print(val1);
Serial.print("\tДатчик 2:\t");
Serial.println(val2);
Числа с плавающей точкой
Serial.print(3.1415, 2); // Вывод числа pi с 2 знаками после запятой
Числа в разных системах счисления
Serial.print(78, BIN); // Двоичная
Serial.print(78, OCT); // Восьмеричная
Serial.print(78, DEC); // Десятичная (по умолчанию)
Serial.print(78, HEX); // Шестнадцатеричная
Отправка команд на Arduino через Serial Monitor
Serial Monitor можно использовать для удаленного управления Arduino. Для этого:
- В коде Arduino реализуйте обработку входящих команд:
void loop() {
if (Serial.available()) {
char cmd = Serial.read();
if (cmd == '1') {
digitalWrite(LED_PIN, HIGH);
}
else if (cmd == '0') {
digitalWrite(LED_PIN, LOW);
}
}
}
- В Serial Monitor введите команду (например, «1» или «0») и нажмите «Send»
Так можно отправлять короткие команды для управления устройствами, подключенными к Arduino.
Использование Serial Monitor для отладки
Serial Monitor — незаменимый инструмент при отладке кода Arduino. Вот несколько полезных приемов:
Вывод значений переменных
int sensorValue = analogRead(A0);
Serial.print("Значение датчика: ");
Serial.println(sensorValue);
Отслеживание выполнения кода
Serial.println("Начало setup()");
// ... код инициализации
Serial.println("Конец setup()");
void loop() {
Serial.println("Начало цикла");
// ... основной код
Serial.println("Конец цикла");
}
Вывод отладочной информации
#define DEBUG // Раскомментируйте для включения отладки #ifdef DEBUG #define DEBUG_PRINT(x) Serial.print(x) #define DEBUG_PRINTLN(x) Serial.println(x) #else #define DEBUG_PRINT(x) #define DEBUG_PRINTLN(x) #endif void loop() { DEBUG_PRINT("Отладочное сообщение"); // Обычный код }
Такой подход позволяет легко включать и отключать отладочные сообщения.
Типичные проблемы при работе с Serial Monitor
При использовании монитора порта могут возникать различные проблемы. Рассмотрим наиболее распространенные из них:
Нечитаемые символы в мониторе порта
Если вместо текста отображаются непонятные символы, проверьте:
- Совпадает ли скорость передачи данных (baud rate) в коде и настройках монитора.
- Правильно ли выбран порт в Arduino IDE.
- Не отправляете ли вы бинарные данные вместо текста.
Данные не отображаются в мониторе порта
Если монитор порта пустой, убедитесь что:
- В коде вызвана функция Serial.begin().
- Скетч успешно загружен на плату.
- Плата подключена к компьютеру и определяется системой.
Arduino не реагирует на отправляемые команды
Если устройство не отвечает на команды из монитора порта:
- Проверьте, вызывается ли Serial.available() в loop().
- Убедитесь, что команды отправляются в правильном формате.
- Проверьте настройку Line Ending в мониторе порта.
Альтернативы стандартному Serial Monitor
Хотя встроенный монитор порта Arduino IDE вполне функционален, существуют альтернативные инструменты с расширенными возможностями:
PuTTY
Многофункциональный терминал, позволяющий подключаться к Serial портам. Преимущества:
- Возможность сохранения сессий
- Гибкая настройка отображения данных
- Поддержка различных протоколов (Telnet, SSH)
Realterm
Терминальная программа, специально разработанная для захвата, контроля и отладки потоков данных. Особенности:
- Отображение данных в различных форматах (HEX, ASCII)
- Возможность отправки файлов через Serial порт
- Расширенные возможности логирования
Serial Port Monitor
Продвинутый инструмент для мониторинга и анализа Serial коммуникаций. Возможности:
- Одновременный мониторинг нескольких портов
- Визуализация данных в виде графиков
- Эмуляция устройств
Эти инструменты могут быть полезны при работе над сложными проектами, требующими глубокого анализа обмена данными.
Учебное пособие по последовательному монитору Arduino
— Pi My Life Up
В этом руководстве я расскажу о том, как настроить последовательный монитор Arduino, чтобы вы могли отлаживать и взаимодействовать с программой, работающей на Arduino.
Это руководство довольно простое, но поначалу может показаться немного запутанным, особенно если вы новичок в программировании и Arduino.
В рамках этого руководства мы построим простую схему, чтобы продемонстрировать, как вы можете получать и отправлять команды через последовательный монитор.
Очень важно научиться пользоваться монитором последовательного порта, так как он понадобится вам для отладки кода и схем.
Оборудование
Оборудование, которое я использую в этом простом последовательном мониторе Arduino, указано ниже.
Рекомендуется
Вы можете легко научиться всему, не используя пример схемы, но я считаю, что это часто лучший способ понять, как все работает.
Видео
Если вы хотите посмотреть мое видео о процессе настройки последовательного монитора, то обязательно посмотрите его ниже.
Я прохожу все шаги, чтобы настроить схему, код, а также правильно открыть и использовать окно монитора.
Вы можете ознакомиться с полным письменным руководством прямо под видео.
Adblock удаляет видео? Поддержите нас, подписавшись на наш сервис без рекламы.
Схема для примера
Схема, которую мы создадим для этого урока, очень проста и будет состоять из светодиода, которым мы сможем управлять с последовательного монитора. Это просто для того, чтобы показать как отправку, так и получение данных через монитор.
Чтобы настроить схему, выполните следующие действия. Если у вас возникли проблемы, обратитесь к электрической схеме.
1. Просто подключите положительный вывод красного светодиода к контакту 2.
2. Затем подключите 100-омный резистор от отрицательного вывода к заземляющей шине Arduino.
Последовательный монитор Arduino Код
Код, который мы будем использовать, прост, его цель — показать основы того, как вы можете использовать последовательный монитор Arduino для просмотра и отправки данных.
Я объясню каждую из строк кода, которые мы используем, и то, как вы можете использовать их в своем следующем проекте для отладки или взаимодействия с Arduino.
Если вы просто хотите сразу загрузить код, вы можете загрузить его с нашего зеркала загрузки или с нашего GitHub.
Для начала мы инициализируем целочисленную переменную для нашего светодиода, это номер вывода, ведущего к светодиоду. Мы также инициализируем переменную с именем count, в ней будет храниться количество времени, в течение которого светодиод включен или выключен.
В функции настройки мы сначала устанавливаем красный светодиод в качестве выхода, чтобы мы могли включать и выключать его.
Затем мы вызываем функцию serial.begin
со значением параметра 9600. Значение, которое мы устанавливаем, известно как скорость передачи в битах в секунду ( бод ).
Скорость передачи данных может быть установлена на несколько разных скоростей, но мы будем использовать 9600, так как это значение по умолчанию, и оно будет работать с большинством устройств без каких-либо проблем. Очень важно вызвать эту функцию. В противном случае вы не сможете общаться с Arduino.
Далее ждем инициализации последовательного интерфейса и подключения к компьютеру. Затем мы вызываем функцию Serial.println(). Эта функция позволяет нам печатать строку в последовательный монитор Arduino. Вы заметите, что это напечатает текст, а затем начнется с новой строки для следующего ввода или вывода.
Наконец, у нас есть цикл, он будет постоянно повторяться до тех пор, пока не будет загружена новая программа или пока Arduino не выключится.
Внутри функции цикла у нас есть оператор if, который проверяет, есть ли данные, ожидающие в последовательном буфере; Серийный.доступный
“. Проще говоря, мы проверяем, отправили ли мы ему команду. Если есть данные, мы вводим оператор if.
Затем мы создаем переменную с именем « ch
» и вызываем « Serial.read()
», которая получит данные, ожидающие в данный момент в последовательном буфере. Имейте в виду, что эта функция получит только первый байт данных, поступающих на Arduino. Если вы хотите получить всю строку, вам нужно будет использовать что-то вроде «Серийный.readString
«.
Если байт данных равен y
или n
, мы вводим соответствующий оператор if. Здесь вы заметите, что мы меняем выход светодиодного контакта на высокий или низкий уровень. Затем мы распечатываем серию утверждений.
Здесь следует обратить внимание на две вещи. « Serial.println
» распечатает данные и перейдет на новую строку, а « Serial.print
» распечатает данные, но останется на той же строке при выводе.
Вы также заметите, что можете печатать переменные, такие как count пример в коде ниже. Это позволит вам отлаживать значения, когда дело доходит до обработки данных.
Наконец, я задерживаю на секунду и добавляю 1 к счету. Этот код просто показывает вам пример добавления данных в переменную, а затем их печати через последовательный вывод.
Когда вы закончите, вы сможете развернуть код на Arduino. В следующей части я покажу вам, как подключать, получать и отправлять данные в Arduino.
Подключение, получение и отправка данных в Arduino
Теперь, когда код загружен в Arduino, нам нужно открыть последовательный монитор Arduino. Это довольно просто, и есть только несколько вариантов, которые мне нужно будет объяснить.
Чтобы открыть последовательный монитор, перейдите к инструментам и выберите последовательный монитор. В качестве альтернативы, CTRL + SHIFT + M также вызовет то же окно. Убедитесь, что вы подключены к Arduino, иначе окно не откроется.
Теперь у вас должно открыться окно, похожее на показанное ниже.
В верхней части этого экрана должна быть область ввода. Здесь вы можете ввести и отправить текст в Arduino. Чтобы отправить текст, который вы набрали, просто нажмите кнопку отправки.
Ниже находится окно вывода, здесь будут отображаться все данные, которые нам присылают. Если вы используете приведенный выше пример кода, вы сможете увидеть текст, который находится в функциях « Serial.println
».
В нижней части экрана у нас есть три разных варианта .
- Первый не требует пояснений, автоматическая прокрутка отключает и включает автоматическую прокрутку поля вывода.
- Во-вторых, у нас есть опция окончания строки. Вы можете настроить монитор на автоматическое добавление строки, заканчивающейся после того, что вы вводите/отправляете в Arduino.
- В-третьих, у нас есть скорость передачи данных, о которой я говорил выше. Убедитесь, что это соответствует тому, что вы установили в коде. Если он отличается от выходного текста, он будет выглядеть как тарабарщина. Если вы получаете ерунду, то это, вероятно, причина этого.
Это в основном все, что вам нужно знать, чтобы понять основы последовательного монитора. Есть еще несколько вещей, о которых вы можете узнать, таких как использование строк через последовательный интерфейс и многое другое, но это, вероятно, все, что вам нужно знать на данный момент.
Я надеюсь, что теперь вы понимаете, как правильно использовать монитор последовательного порта Arduino, и он поможет вам в будущих проектах Arduino. Если вы хотите что-то добавить к этому уроку, обязательно оставьте комментарий ниже.
Использование последовательного монитора — Arduino to Go
Использование последовательного монитора
Серийный монитор — это функция Arduino IDE, которая показывает нам информацию, отправленную с Arduino. Это полезно для отладки и для изучения того, какие значения выдает датчик или переменный резистор. Чтобы открыть Serial Monitor, нажмите кнопку в верхней части Arduino IDE.
Когда мы открываем последовательный монитор, мы видим окно, в котором отображаются ответы от Arduino. и раскрывающееся меню, которое управляет скоростью передачи данных или скоростью передачи данных между нашим компьютером и Arduino. Как мы уже говорили, скорость передачи — это скорость связи, которую компьютер и Arduino используют для общения друг с другом. По умолчанию скорость передачи вашего последовательного монитора будет установлена на 9600, что соответствует значению, которое мы установили в функции serial.begin() в нашем коде настройки, поэтому вам не нужно вносить какие-либо коррективы.
Arduino и компьютер должны использовать одинаковую скорость передачи данных: значение, установленное в Serial.begin()
Вот как выглядит окно последовательного монитора при запуске этого скетча:
Теперь, когда мы понимаем где найти наш последовательный монитор, мы можем говорить о нашем использовании серийного номера в коде цикла.
Глядя на серийный код
Библиотека Serial имеет 2 функции для отправки информации на наш компьютер: Serial.print() и Serial.println() . Наш скетч использует обе эти функции для форматирования информации на экране компьютера. Серийный код в нашем цикле включает в себя следующие четыре строки:
Все четыре из этих строк кода вместе печатают одну строку в последовательном мониторе, которая включает слова «датчик =», значение нашего датчика, вкладку, текст «output =» и отображаемое значение. Вот пример строки вывода, которую этот код будет отображать в последовательном мониторе.
Отправка слов на последовательный монитор: Строки
Если мы посмотрим на первую строку serial.print, мы увидим слова и кавычки вокруг них. Чтобы отправить слова на наш последовательный монитор, мы используем так называемую строку .
Строка — это представление текста в языке программирования. Любые буквы, цифры или другие буквенно-цифровые символы (включая пробелы и знаки препинания) в нашем коде представлены строками.
Зачем нужны строки? Компьютеры обычно работают только со значением чисел. Иногда вам нужно использовать текст в своем коде, чтобы передавать текстовую информацию или придавать контекст другим данным. Мы увидим, как это работает, когда более внимательно рассмотрим наш код на следующих нескольких страницах.
Как мы используем строки в нашем коде? Мы помещаем кавычек вокруг строки, чтобы идентифицировать ее. Кавычки заключают в себя полную группу символов, включая все буквы, пробелы и знаки препинания.
В нашем коде текст представлен строками. Любой буквенно-цифровой символ, включая пробелы и знаки препинания, представлен строками.
Вывод на последовательный монитор
Теперь более подробно рассмотрим, как каждая строка кода выводится на последовательный монитор. Мы знаем, что любой текст внутри кавычек является строкой и будет представлен как текст. Мы также видим ссылки на наши переменные в коде. Давайте посмотрим, как они работают вместе с Serial.print() 9.0003
Все, что заключено в кавычки, будет напечатано на последовательном мониторе, включая пробелы и знаки пунктуации. вторая строка serial.print() выведет числовое значение переменной sensorValue . Без кавычек Arduino выведет числовое значение, хранящееся в переменной, а не имя переменная
В третьей строке кода последовательного цикла снова используются кавычки, поэтому мы знаем, что собираемся напечатать строку . Однако у нас также есть новый символ: что означает это « \t »? \t сообщает монитору последовательного порта Arduino включить в распечатываемый вывод табуляцию, набор пробелов.
Четвертая строка выводит значение нашей переменной outputValue . Но вместо Serial.print() мы используем Serial.println() , который напечатает разрыв строки. Мы рассмотрим это более подробно на следующей странице.
Помните, что значения для sensorValue и outputValue, которые вы видите на мониторе последовательного порта, будут выглядеть иначе, чем на этом снимке экрана, и будут меняться при повороте потенциометра.
Мы видели, что наша последняя строка последовательного кода использует Serial.println(), а не Serial.print(). Мы узнали, что Serial.println() автоматически добавляет разрыв строки; как это влияет на то, как наш код отображается в мониторе Serial?
Разрыв строки означает, что в следующий раз, когда мы будем печатать что-либо в мониторе последовательного порта (включая следующий раз через код цикла), напечатанная информация о последовательном порте появится на новой строке.
Единственная разница между Serial. print() и Serial.println() заключается в разрыве строки, который упрощает чтение информации в последовательном мониторе.
Serial.println() содержит разрыв строки, что облегчает чтение информации о серийном номере потенциометр.
И поскольку этот код зациклен, строки будут появляться снова и снова. Значения переменных изменятся, если мы повернем потенциометр.
Что означают эти значения и как они соотносятся с шкалами чисел, которые мы рассматривали ранее? Датчик — это значение, полученное путем считывания напряжения (0-5) на контакте A0 и установки его в диапазоне от 0 до 1023 с помощью функции AnalogRead(). output — это значение датчика, преобразованное функцией map() в диапазон от 0 до 255 для использования на выводе 9.
последняя строка кода цикла: delay()
Вот последний шаг в нашем скетче:
5. Подождите некоторое время (2 миллисекунды) перед нашим следующим чтением
Это достигается с помощью одной строки кода, включая функцию delay(), которую мы видели в предыдущих главах.
короткая задержка в конце скетча обеспечивает бесперебойную работу нашего кода и точность показаний датчиков. Существует ограничение на то, сколько точных показаний датчика можно снимать каждую секунду, поэтому задержка помогает разнести наши показания датчика на достаточное время, чтобы поддерживать хорошие показания.
Резюме ATG6_AnalogSerial
Как мы видели, наш код контура считывает аналоговое значение с аналогового входа, масштабирует это значение до меньшего числа, записывает аналоговое значение на вывод PWM и распечатывает результаты со всех этих шагов на наш последовательный монитор, чтобы мы могли видеть, как изменяется значение.
Значение аналогового выхода — любое число от 0 В (выкл.) до 5 В (полностью вкл.) — изменяет яркость нашего светодиода. В промежуточной точке, такой как 3,5 В, светодиод будет менее ярким, чем при 5 В. Что еще мы можем модулировать таким образом? Затем мы подключим динамик и изменим ноты, которые будут звучать более динамично, чем в главе 5.
Вопросы?
В: Существуют ли в библиотеке Serial другие функции, кроме Serial.begin(), Serial.print() и Serial.println()?
A: Да, их довольно много, включая Serial.write() и Serial.read(), которые также используются для связи с нашим компьютером. Мы увидим, как они работают позже.
В: Зачем нам использовать специальный символ «\t» для создания вкладки? Есть ли другие специальные символы, которые мне нужно знать?
A: Использование «\t» значительно упрощает чтение вывода в нашем последовательном мониторе, это единственная причина, по которой мы его используем. Есть много специальных символов: иногда может пригодиться «\n», который создает новую строку. Это форматирует текст аналогично использованию Serial.println(), добавляет разрыв строки
В: Я уже слышал о строках, это способ описания текста в других языках программирования, верно?
A: Да, буквенно-цифровые символы, включая пробелы и знаки пунктуации, во многих языках программирования называются строками.