Изо всех сил пытаясь понять, как Bluetooth serial связан с USB на Arduino
Недавно я приобрел модуль Bluetooth для подключения к моему Arduino Uno, но я пытаюсь провести параллели со стандартным методом связи, с которым я знаком, который, кажется, просто напрямую считывает или записывает данные на датчики с помощью таких методов, как digitalRead и digitalWrite соответственно. Кроме того, однако, похоже, что также можно подключиться к последовательной консоли через класс Serial. Они имеют смысл, и я использовал оба по отдельности (последовательную консоль, просматриваемую встроенным последовательным окном в Arduino IDE, и последовательную запись, выполняемую через
Serial.print/println()
).
Однако в модуле Bluetooth, который я купил (HW-10), есть распиновки, которые подключаются к портам TX/RX, которые я в настоящее время оставил не подключенными, так как я не использую модуль Bluetooth или любой другой последовательный модуль. Мой вопрос заключается в том, как только я подключу их, полностью ли это заменит соединение через USB, которое в настоящее время используется для взаимодействия с Uno?
Если это так, то у меня был набор конкретных функций для того, чтобы они были "заменены" подключением модуля через 4 вывода (TX, RX, VCC, GND):
1. Serial: Могу ли я писать и получать доступ к последовательному монитору через IDE, подключившись к 9600 бод, как в коде, так и в последовательном мониторе
2. Контакты: Позволяют ли эти соединения также записывать и считывать сигналы со всех контактов, включая аналоговые и цифровые
3. Отправка кода: Могу ли я по-прежнему отправлять код через Bluetooth без необходимости подключения USB?
Извиняюсь, если этот вопрос кажется действительно очевидным или конкретным, я запутался, так как прочитал кучу формулировок, говорящих о том, что модуль Bluetooth использует "последовательное соединение", когда я понимал только последовательную функциональность как метод вывода текста, а не управления Arduino. Заранее спасибо за помощь!
@Daneolog, 👍0
Обсуждение1 ответ
Лучший ответ:
На самом деле я не знаю что такое UART
UART (Universal Asynchronous Receiver Transmitter) - это технический термин для обозначения коммуникационного интерфейса, который в Arduino speak называется последовательным. Его часто называют UART, потому что это более точно, поскольку существует множество различных коммуникационных протоколов, которые также работают последовательно (то есть передают биты данных один за другим в отличие от параллельных, где несколько битов передаются одновременно), таких как I2C, SPI или USB. Все последовательные протоколы, но совершенно отличные от
последовательного интерфейса Arduino
. Да, это немного сбивает с толку. Я предполагаю, что термин Arduino Serial
был придуман для того, чтобы сделать кривую обучения менее крутой для начинающих (скрытие сложности, к сожалению, также может привести к путанице).
Таким образом, UART-это то же самое, что и последовательный
интерфейс Arduino.
как только я их подключу, полностью ли это заменит соединение через USB, которое в настоящее время используется для взаимодействия с Uno?
Здесь хорошо бы знать, как работает USB-связь на Uno. Микроконтроллер на Uno (Atmega328p) не имеет собственного USB-интерфейса. Поэтому он не может говорить с самим USB. Для этого на плате есть дополнительный микроконтроллер (я думаю, Atmega32u4). Этот контроллер имеет собственный интерфейс USB и действует как мост USB to Serial
(он создает виртуальный последовательный интерфейс на ПК и переводит его между своим физическим интерфейсом Serial
/UART). Atmega328p (который вы программируете своим кодом) имеет свои контакты RX и TX, подключенные к контактам RX и TX на Atmega32u4, которые затем могут транслироваться между протоколом Serial
/UART и протоколом USB. Таким образом, Atmega328p ничего не знает о USB. Я просто разговариваю через Serial
/UART с Atmega32u4. На самом деле он также ничего не знает о bluetooth. Большинство модулей bluetooth для Arduino также являются просто bluetooth -последовательными
мостами
Теперь вам нужно знать, что Serial
/UART предназначен для соединений один-к-одному. С несколькими устройствами вы можете получить проблемы, когда несколько устройств пытаются отправить данные одновременно. В этом случае (BT module RX to Arduino TX и наоборот) вы получите искаженные данные, если попытаетесь одновременно отправить данные с bluetooth и USB на Arduino. Сигналы будут перекрываться на выводе Arduino RX, искажая данные.
Это означает, что вы не хотите отправлять с обоих интерфейсов. На самом деле это самый простой способ просто использовать один последовательный
/UART интерфейс только для одного устройства. Если вы оставите Последовательный монитор (или любую другую программу последовательной связи) закрытым на ПК, КОМПЬЮТЕР не будет вмешиваться в коммуникацию. Хотя вам нужно отключить модуль Bluetooth, когда вы пишете свою программу на Arduino, так как это делается через последовательный
порт, и вы не хотите, чтобы он вмешивался в данные.
Таким образом, в результате модуль Bluetooth не будет "заменять" соединение через USB. Он будет добавлен, и ваша обязанность-предотвратить повреждение данных.
- Serial: Могу ли я писать и получать доступ к последовательному монитору через IDE, подключаясь к 9600 бодам, как в коде, так и в последовательном мониторе
- Да. Вам не нужно обязательно использовать 9600 бод. Единственное требование заключается в том, что вы используете один и тот же номер бода как в скетче, так и в последовательном мониторе. Это число просто представляет скорость, с которой передаются данные. И отправитель, и получатель должны договориться об одной и той же скорости связи, иначе получатель не сможет считывать данные. Представьте, что кто-то говорит с вами, но говорит в два раза быстрее, чем вы способны понимать слова. Вы не сможете многое понять, потому что говорящий слишком быстр. Либо вам нужно будет изменить скорость своего слуха/понимания, либо отправителю нужно будет изменить скорость своей речи, чтобы они совпали.
9600 бод-это всего лишь одна из стандартных скоростей передачи, хотя и одна из самых низких. Если вам нужно, чтобы он был быстрее (возможно, потому, что вы отправляете много данных в быстрой последовательности), вы можете использовать более высокую скорость передачи.
- Контакты: Позволяют ли эти соединения также записывать и считывать сигналы со всех контактов, включая аналоговые и цифровые
Это зависит от вас. Serial
/UART-это просто коммуникационный интерфейс. Как он будет использоваться, зависит только от вас. Вы уже видели, что он часто используется для вывода текста для чтения пользователем через последовательный
интерфейс, часто используется как способ отладки кода путем отправки определенного текста в определенные места кода. Поскольку это соединение работает в обоих направлениях, вы также можете запрограммировать Arduino на прием команд через Serial
/UART, а затем действовать в соответствии с ними.
Здесь вступает в действие накладывающийся коммуникационный протокол. Serial
/UART просто передает серию байтов по своим двум линиям. Ему все равно, что означают эти байты. Это может быть текст (например, закодированный по стандарту ASCII, как это делает последовательный монитор), а может быть просто некоторые двоичные данные. Также нет понятия "сообщения". Существуют только отдельные байты, и вы не можете контролировать, когда именно они будут отправлены. Таким образом, чтобы осмысленно использовать Serial
/UART, вам нужно использовать дополнительный коммуникационный протокол поверх Serial
/UART, который понимает получатель.
Когда вы отправляете текст на последовательный монитор, вы являетесь получателем. Таким образом, вы отправляете текст (потому что вы можете понимать текст), и естественный способ для людей различать отдельные сообщения-это использовать символ-разделитель. В обычном тексте это может быть точка, хотя в этом поле переход на новую строку несколько эволюционировал до стандарта (поэтому символом-разделителем является символ новой строки '\n'
). Если вы читаете символ разделителя (либо сами на последовательном мониторе, либо Arduino в вашей программе), это означает конец сообщения. Вы также можете использовать этот текстовый подход в своей программе Arduino (и я бы сказал, что это самый простой способ). Хотя тебе это и не нужно. Вы также можете использовать на нем любой двоичный протокол (или даже изобрести свой собственный протокол).
Я бы посоветовал вам взглянуть на примеры в Arduino IDE, которые включают последовательный
порт, и, возможно, попробовать некоторые учебные пособия в Интернете. Их существует очень много.
- Отправка кода: Могу ли я по-прежнему отправлять код через Bluetooth без необходимости подключения USB?
Для работы Serial /UART вам не нужно USB-соединение
. На самом деле Atmega328p, который вы программируете на Uno, вообще не заботится о USB-соединении. Он знает только серийный
номер /UART.
Я надеюсь, что это дало вам хороший обзор по этой теме. Когда вы поймете эти основные понятия, вы сможете понять учебные пособия и примеры в Интернете.
так что извините за поздний ответ, это очень помогает, и я полностью лучше понимаю это. На самом деле я зациклился на той проблеме с последовательным подключением, о которой вы упомянули, и объяснении того, что модуль Bluetooth является последовательным мостом bluetooth, а не USB-последовательным мостом, который делает Atmega32u4; это действительно помогло. из того, что я понимаю, похоже, что вы говорите, что было бы неплохо сделать все одним способом (отправка кода, изменение двоичных данных и т. Д.), Чтобы предотвратить повреждение данных путем отправки как через USB, так и через Bluetooth, верно?, @Daneolog
- Как узнать частоту дискретизации?
- Что такое Serial.begin(9600)?
- Использовать все контакты как цифровые входы/выходы
- Float печатается только 2 десятичных знака после запятой
- Arduino как USB HID
- Serial1' was not declared in this scope
- Очень простая операция Arduino Uno Serial.readString()
- AT-команда не отвечает на последовательный монитор
Как правило, вы хотели бы использовать модуль BT, подключив его к отдельному UART. Но так как у UNO есть только 1 УАРТ, вы не можете этого сделать. Однако вы МОЖЕТЕ использовать программное обеспечение, которое позволяет использовать программное обеспечение на основе UART на обычных цифровых выводах ввода-вывода. По-видимому, все же можно программировать по Bluetooth. https://create.arduino.cc/projecthub/mansurkamsur/upload-sketch-arduino-over-bluetooth-using-android-f1ce55, @tavis
хм, я на самом деле не знаю, что такое UART; означает ли это, что я не могу изменить состояние контактов? как насчет серийного и отправляющего кода, @Daneolog