Не работает монитор порта ардуино

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

Как мы с вами знаем из урока “О платформе“, на платах Ардуино стоит 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 имеет несколько настроек для разных данных, что делает его очень удобным инструментом отладки:

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, используя готовый метод парсинга.

Итак, мы используем конструкцию 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.ru

Проблема с монитором порта

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

Подскажите пожалуйста разбираюсь с АТ командами! сталкнулся с такой ситуацией ввожу в монитор порта команды? но реакции никакой нет в чем может быть проблема?

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

Подскажите пожалуйста разбираюсь с АТ командами! сталкнулся с такой ситуацией ввожу в монитор порта команды? но реакции никакой нет в чем может быть проблема?

В железе — Вы не показываете что сделали.

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

Подскажите пожалуйста разбираюсь с АТ командами! сталкнулся с такой ситуацией ввожу в монитор порта команды? но реакции никакой нет в чем может быть проблема?

В железе — Вы не показываете что сделали.

На данный момент пытаюсь научиться отправлять показания датчиков в веб апи. Имеется ардуино уно и шилд
https://ru.aliexpress.com/item/Keyestudio-ESP8266-Wifi/32669496899.html.
Соответственно его вставил в плату ардуино.

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

Изумительный ответ. Ну чего после него можно посоветовать? Подключится через 8-9 пин с UART и посмотреть — а Ваша херня вообще работает?

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

Изумительный ответ. Ну чего после него можно посоветовать? Подключится через 8-9 пин с UART и посмотреть — а Ваша херня вообще работает?

Да если бы разбирался, написал подробнее, а так как только начал изучать как это все работает написал «изумительно». А если серьезно заказал эту «хрень» думал вставлю и «забуду», но не тут то было. вставил ничего не получается и совсем не понятно.
Уже начинаю сомневаться во всем поэтому прошу уточнить правильно ли я понял. Для того что бы проверить работу мне нужно проводами соединить питание, землю и 8,9 порты ардуино соответственно с портами rx/tx на шилде?

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

Ничерта Вы не поняли. Если бы следовали советам и сходили на сайт производителя шилда, то давно поняли для чего там два переключателя и почему ничего не работает.

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

Да был я на сайте производителя. Там написанно, что переключатель используется для переключения работы сериал. Только вот не понятно как с ним работать: когда опускаю оба переключателя скетч загружается на плату ардуино. Поднимаю не загружается и вообще связи с платой нет, не с esp 8266 не с уно.

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

Всё правильно. Так шилд сконструирован. Serial Atmega328 переключателями соединен с ESP. Все другие коммуникации необходимо осуществлять проводками прямо на шилде.

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

Все другие коммуникации необходимо осуществлять проводками прямо на шилде.

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

Соединить с чем?

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

На шилде TX и RX соединить с 8и 9 портом? Правильно?

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

У вас на шилде переключателями можно соединить аппаратные Сериалы ЕСП и Уно друг с другом, либо любой из них — с внешним разъемом. Но аппаратный Сериал на Уно — это пины 0 и 1. А вы используете СофтСериал на ногах 8 и 9 -на шилде эти ноги ни к чему не подключены, значит соединять их с ЕСП вы должны сами.

И еще — имейте в виду, что СофтСериал на Уно при скорости 115200 не работает, ставьте там 9600 или 19200, не больше.

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

Соединение пинов RX и TX с D8 и D9 ничего не даст.

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

Соединение пинов RX и TX с D8 и D9 ничего не даст.

почему? что-то туплю с утра.

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

На шилде всё подписано и разделено. На стороне ESP RX/TX называются иначе.

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

На шилде всё подписано и разделено. На стороне ESP RX/TX называются иначе.

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

Это более лучшая гипотеза. Проверить бы её, но. Уровни TTL могут не совпасть и ESP будет сожжено.

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

Ох, епрст:)) знал бы непробовал:))) А так большое спасибо, заработало!

На будущее, что такое в данном контексте TTL? Просто у меня сразу ассоциации Time to live но врядли здесь данный контекст!

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

Обменистратор что ли?

Обратите внимание на кол-во деталей около переключатлей. Впрочем, есть шанс, что на RX0/TX0 заведены дорожки с согласователя (т.е. из района переключателя). Чтобы это узнать — нужна схема или мультиметр. В противном случае ESP-шка оттопырится в любой момент.

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

Обменистратор что ли?

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

Роутинг от RX0/TX0 на ESP проверь. Должен через фаервол транзисторный идти. Иначе 5V от ардуины навсегда положат ESP-шку.

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

Обратите внимание на кол-во деталей около переключатлей. Впрочем, есть шанс, что на RX0/TX0 заведены дорожки с согласователя (т.е. из района переключателя). Чтобы это узнать — нужна схема или мультиметр. В противном случае ESP-шка оттопырится в любой момент.

Нашел вот такое описание. Вроде нигде нет указания, мощности

UART: connecting arduino serial communication(5V, GND, RX, TX)
IIC: connecting arduino IIC communication(5V, GND, SDA, SCL)


UART: connecting ESP8266 serial communication(3.3V, GND, RX, TX)
OTH
3V3: 3.3V power output
G: GND
EN: ESP8266 EN
AD: ESP8266 AD

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

Роутинг от RX0/TX0 на ESP проверь. Должен через фаервол транзисторный идти. Иначе 5V от ардуины навсегда положат ESP-шку.

Вооо так то понятнее:)))))

Роутинг от RX0/TX0 на ESP проверь. Должен через фаервол транзисторный идти. Иначе 5V от ардуины навсегда положат ESP-шку.

Придется искать мультиметр, надеялся всетаки найти схемы:((

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

Это более лучшая гипотеза. Проверить бы её, но. Уровни TTL могут не совпасть и ESP будет сожжено.

Всетаки разные уровни! На выходе RX/TX 5 показывает, RX0/TX0 3.3. Хорошо что не сгорела ESP, но больше желания проверять нет:)))

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

У меня китайский Arduino UNO R3 CH340G MEGA328P чип 16 МГц ATMEGA328P-AU с датчиком перепада давления MPX7002DP. Задача вывести на плоттер график изменения давления.

Все работало устойчиво без существенных помех. Решил дополнительно применить внутреннее опорное напряжение 1.1в., и добавил в скетч функцию analogReference(INTERNAL).Скетч проверен на ошибки, но не заработал и привел к глюку в Ардуино .На мониторе порта прослеживается неизвестный сигнал при отключенном датчике, а плоттер выдает две непонятные синусоиды низкой частоты. При подключении датчика его сигнал просто накладывается на эти помехи.

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

При отключённом пине Вы имеете наводку (помеху) и она ничего не значит.

Источник

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