Как установить последовательный порт в arduino ide

ESP32: Простой скетч в Arduino IDE

Цель этого урока — объяснить, как написать простой скетч «Hello World» для ESP32, используя ядро Arduino. Это очень простое введение, поэтому данное руководство будет просто состоять из вывода сообщения в последовательный порт Arduino IDE.

Для работы с ESP32 в среде Arduino IDE необходимо установить дополнительные библиотеки. Это можно сделать через «Менеджер плат». Подробнее читайте тут.

Код ESP32 Hello World.

Код этого урока очень прост, особенно если у вас есть опыт работы с Arduino или ESP8266.

В функции настройки Arduino мы начинаем с открытия последовательного соединения со скоростью передачи 115200 бод. Для этого просто вызываем метод begin объекта Serial и передаем в качестве входных данных указанную скорость передачи.

Затем в функции цикла вызываем метод println, чтобы напечатать сообщение «Hello World» с новой строки. После этого делаем небольшую задержку в 2 секунды (2000 миллисекунд), используя функцию delay().

Загрузка кода в ESP32.

Для работы будем использовать отладочную плату DOIT ESP32 DEVKIT V1.

Для работы будем использовать отладочную плату DOIT ESP32 DEVKIT V1.

Подключите плату ESP32 к компьютеру. Открываем Arduino IDE и выполним следующие действия:

1. Выбираем плату в меню «Инструменты > Плата (в моем случае это DOIT ESP32 DEVKIT V1 )».

Плата (в моем случае это DOIT ESP32 DEVKIT V1 )

2. Затем выбираем порт (если вы не видите COM-порт в Arduino IDE, вам необходимо установить драйверы CP210x USB to UART Bridge VCP).

3. Нажимаем кнопку Загрузить в Arduino IDE. Подождите несколько секунд, пока код компилируется и загружается на вашу плату.

Нажимаем кнопку Загрузить в Arduino IDE

Внимание! Если у вас бежит строка с повторяющимися точками и линиями. Нажмите кнопку Boot на плате и удерживайте ее пока не побегут проценты загрузки. После чего кнопку можно отпустить.

4. Откройте последовательный монитор Arduino IDE со скоростью передачи данных 115200.

Как видно на рисунке ниже, получаем правильный вывод «Hello World» в последовательный порт. Не забудьте использовать правильную скорость передачи данных, определенную в коде, как показано на рисунке.

правильный вывод «Hello World» в последовательный порт

Понравился Урок ESP32: Простой скетч в Arduino IDE ? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Программирование Arduino — Последовательная передача данных

Arduino/Freeduino имеет встроенный контроллер для последовательной передачи данных, который может использоваться как для связи между Arduino/Freeduino устройствами, так и для связи с компьютером. На компьютере соответствующее соединение представлено либо обычным COM-портом (в случае Arduino Single-Sided Serial Board), либо USB COM-портом, который появляется в системе после установки необходимого драйвера.

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

Serial.begin(long);

Описание:
Устанавливает скорость передачи информации COM порта битах в секунду для последовательной передачи данных. Для того чтобы поддерживать связь с компьютером, используйте одну из этих нормированных скоростей: 300, 1200, 2400, 4800, 9600, 14400, 19200, 38400, 57600, или 115200. Также Вы можете определить другие скорости при связи с другим микроконтроллером по портам 0 и 1.

Параметры:
скорость_передачи: скорость потока данных в битах в секунду.

Serial.available(void);

Описание:
Принимаемые по последовательному порту байты попадают в буфер микроконтроллера, откуда Ваша программа может их считать. Функция возвращает количество накопленных в буфере байт. Последовательный буфер может хранить до 128 байт.

Возвращаемое значение:
Возвращает значение типа uint8_t (typedef uint8_t byte;) – количество байт, доступных для чтения, в последовательном буфере, или 0, если ничего не доступно.

Serial.read(void);
Вызов:

Описание:
Считывает следующий байт из буфера последовательного порта.

Возвращаемое значение:
Первый доступный байт входящих данных с последовательного порта, или -1 если нет входящих данных.

Serial.write(uint8_t c)

Описание:
Записывает данные в последовательный порт. Данные посылаются как байт или последовательность байт; для отправки символьной информации следует использовать функцию print().

Параметры:
val: переменная для передачи, как единственный байт
str: строка для передачи, как последовательность байт
buf: массив для передачи, как последовательность байт
len: длина массива

Serial.flush(void)

Описание:
Очищает входной буфер последовательного порта. Находящиеся в буфере данные теряются, и дальнейшие вызовы Serial.read() или Serial.available() будут иметь смысл для данных, полученных после вызова Serial.flush().

Функции print наследуются классом HardwareSerial от класса Print (\hardware\cores\arduino\ Print.h)

Описание:
Вывод данных на последовательный порт.

Параметры:
Функция имеет несколько форм вызова в зависимости от типа и формата выводимых данных.
Примеры:

Вывод в монитор порта через Serial print, println, write

Serial.print() и Serial.println() – это основные функции Arduino для передачи информации от платы ардуино к компьютеру через последовательный порт. На самых популярных платах Arduino Uno, Mega, Nano нет встроенного дисплея, поэтому взаимодействие с помощью монитора порта Arduino IDE является самым простым и доступным способом получения информации во время работы скетча. В этой статье мы научимся использовать методы класса Serial для отладки программ и взаимодействия с другими устройствами через UART и последовательный порт.

Функция print() библиотеки Serial

Функция print является одной из самых часто встречающихся в скетчах ардуино. Она принимает на вход текст или цифры и затем передает их через открытый последовательный порт в формате ASCII. Примеры:

  • Serial.print(“Hello, ArduinoMaster”) – на экране монитор порта мы увидим надпись Hello,ArduinoMaster
  • Serial.print(12) – число будет автоматически преобразовано и выведено как текст: 12
  • Serial.print(2.9) – это число тоже будет преобразовано в текст: 12.9
  • Serial.print(65) – в данном случае 65 передается как int и будет сконвертировано в строку “65”, которая и будет отправлена в последовательный порт.

Т.к. функция является членом класса Serial, мы должны использовать название класса и символ точки “.” в ее синтаксисе . Класс Serial объявляется в библиотеке Serial, но нам не нужно подключать эту библиотеку отдельно, она является внутренней библиотекой ардуино и подключается автоматически. Функция не возвращает значение, поэтому ее нельзя использовать для форматирования и последующего использования в скетче. Для этих целей больше подойдут методы класса String.

Перед использованием функции необходимо предварительно открыть работу с последовательным портом, используя функцию begin(). Подробную информацию по функции Serial.begin вы можете найти в отдельной статье на нашем сайте.

Естественно, мы можем передавать в качестве параметров для функции print() не константы, а переменные определенных типов. Например, так:

String stringForPrinting = “Hello from Arduino”;
Serial.print (stringForPrinting);

Текст, передаваемый с помощью print() обязательно завершается символом конца строки “\0”, что является стандартом для C++ и Ардуино.

Функция println и отличия от print

Если вы попробовали использовать функцию print(), то уже обратили внимание, что вся информация в мониторе порта выводится в одной строке. Если же мы хотим вывести текст в новых строках, то должны использовать близкого родственника функции – println() .

Метод println () класса Serial выполняет ту же функцию, что и print() – он выводит в последовательный порт ASCII-текст. Аргументы у методов тоже совпадают – мы передаем текст или число с возможным вторым аргументом, определяющим формат. Отличие же println заключается в принудительном добавлении в конце передающейся строки символа новой строки “\r” (ASCII код 13). Суффикс ln обозначает сокращенное слово line (строка). Используя println, мы можем быть уверены, что следующая (но не текущая) строка будет выведена с новой строки.

Например, следующие команды выведут три строки текста, каждое предложение в новой строке.

Serial.println(“Line number 1”);
Serial.println(“Line number 2”);
Serial.println(“Line number 3”);

При формировании строки мы также можем использовать следующие специальные символы: “\0”, “\r”, “\t” (символ табуляции). Табулирование позволяет печатать на экране что-то типа таблицы значений:

Форматирование и конвертация строк

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

Варианты значений констант для форматирования:

  • DEC – обычное число в десятичной системе исчисления
  • BIN – преобразует в двоичный код и выведет строку, содержащую только символы 0 и 1
  • OCT – преобразует в восьмеричную систему исчисления
  • HEX – преобразует в шестнадцатеричную систему
  • Цифра от 0 до 9 – используется, если первый аргумент – вещественное число с плавающей запятой. Форма указывает количество знаков после запятой, которые останутся при выводе. Само число при этом будет округлено.

В старых версиях ардуино можно было использовать еще один параметр BYTE. Начиная с версии 1.0 эта константа не поддерживается и компилятор выдаст вам ошибку «Ключевое слово ‘BYTE’ больше не поддерживается». Для вывода ASCII символа по его коду нужно использовать метод write().

Функция write() библиотеки Serial

Если мы хотим передать в монитор порта не ASCII код числа, а само число, то у нас есть возможность это сделать с помощью функции write().

  • Serial.write(65); – В данном случае на экране мы увидим символ A, так как 65 – это символ A в ASCII. Используя функцию write, мы отправляем число 65 монитору порта в виде… числа 65, а не текста “65”, как в случае функции print(). При выводе на экран уже сам монитор порта будет конвертировать его в соответствие с таблице ASCII. В данном случае, таким символом является латинская буква A.
  • Serial.print(65); – А теперь мы увидим на экране 65, т.к. в монитор придет уже строка, а не цифра. Каждая цифра исходного числа 65 будет предварительно сконвертирована в ASCII код и монитор порта увидит сроку «65», а не число. Этим и отличаются друг от друга функции print и write.

Проблемы с несколькими аргументами в Serial.print

Проблема при объединении текста и чисел и выводе в print в одной строке

Часто для отладки программы требуется вывести несколько значений, снабдив их каким-то комментарием. Например, такой текст: «Sensor’s value is: 15». Если вы просто используете такой код:

Serial.print(“Sensor’s value is: 15”);

,то все отобразится правильно. Но если вы попытаетесь вместо подстроки «15» вставить реальное показание датчика, объединив строку и числовое значение, то увидите, что строка выводится некорректно.

Serial.print(“Sensor’s value is: ” + analogRead (A0));

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

Для решения этой проблемы вы можете использовать два способа:

Первый вариант. Объявить предварительно переменную типа String, инициализировать ее константой-строкой и использовать в аргументе print. Такой вот пример будет работать:

String str = “Sensor’s value is: “;

Второй, более предпочтительный и удобный вариант: использование функции print несколько раз:

Serial.print(“Sensor’s value is: “);

Более подробно прочитать об особенностях работы со строками при выводе информации в монитор порта можно на официальной странице Ардуино.

Проблема объединения нескольких строк в аргументе функции print

Попробуйте загрузить скетч с таким фрагментом:

Serial.print(“Sensor’s value is: ” + analogRead (A0) + “15 cm”);

В данном случае ошибка возникнет уже на стадии компиляции программы: оператор «+» не может использовать больше, чем два аргумента. Вам придется разбить одно действие на несколько составляющих, создав предварительно готовые «заготовки» строк.

Пример скетча для print и println

В завершении давайте рассмотрим реальный скетч, в котором мы используем монитор порта Arduino IDE для вывода отладочной информации с платы контроллера.

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

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