Arduino Pro Micro, получить данные с контакта Tx?
У меня есть Sparkfun Arduino Pro Micro с ATmega32u4 и Модуль Bluetooth Roving Networks RN32
Теоретически я должен иметь возможность припаять Rx Bluetooth к Tx на Arduino и наоборот, и я должен получить последовательную связь через Bluetooth.
Конечно, нет. Тем не менее, в качестве первого вопроса: как заставить Arduino передавать данные через вывод Tx?
Я без проблем загрузил это в Arduino:
void setup(){
Serial.begin(9600);
}
void loop(){
Serial.print("HelloWurld");
}
Однако, когда я подключаю оскоп, я не вижу сигнала по линии Tx. Нада. Я вижу данные, поступающие через USB в COM-порт моего компьютера, но не через контакт Tx.
Как заставить Arduino выводить последовательные данные на вывод Tx?
@user3320919, 👍8
Обсуждение5 ответов
Лучший ответ:
Похоже, у вас есть плата в стиле «профессионально-микро», в которой USB-связь напрямую поступает от основного процессора ATmega32u4, а не генерируется в виде последовательных данных, а затем перенаправляется на отдельный USB-последовательный преобразователь, как на традиционных Arduino. Ваш вопрос мог бы быть решен намного быстрее, если бы вы четко указали тип используемой вами платы словами, а не только в виде ссылки на продукт (поэтому я отредактировал это в вашем вопросе).. р>
Согласно документации для официальной Arduino Pro Micro:
Последовательный: 0 (RX) и 1 (TX). Используется для приема (RX) и передачи (TX) последовательных данных TTL с использованием аппаратных возможностей последовательного интерфейса ATmega32U4. Обратите внимание, что в Micro класс Serial относится к связи USB (CDC); для последовательного интерфейса TTL на контактах 0 и 1 используйте класс Serial1.
Поэтому для генерирования вывода на аппаратном UART вам необходимо изменить все вхождения Serial
на Serial1
void setup(){
Serial1.begin(9600);
}
void loop(){
Serial1.print("HelloWurld");
}
Данные передачи будут поступать с контакта 21 ATmega32u4, который обозначен как «D1» (цифровой контакт 1) в заголовках. Если вы хотите исследовать это, это будет лучшее место для этого.
Если вы хотите передавать данные с другого контакта, который не подключен к UART ATmega32u4 (как подсказывает ваш пример с цифровым контактом 5), вы должны вместо этого использовать SoftwareSerial или аналогичная реализация для побитовой передачи последовательных данных из вывода ввода-вывода общего назначения.
Например (на основе этого примера):
SoftwareSerial mySerial(4, 5); // RX, TX
void setup(){
mySerial.begin(9600);
}
void loop(){
mySerial.print("HelloWurld");
}
Хорошо подмечено, Крис! +1, @Ricardo
о, мои дни... как новичок в ардуино, это различие между ATmeta32u4 и ATmega328 сбивает с толку... мне потребовалось три дня, чтобы понять... тот факт, что я пробовал тот же код в коде ATmega328 на 32u4, не помог. _Миллион благодарностей_ Крис Стрэттон., @sumitkm
Плата Bluetooth использует 3,3 В, а не 5 В в соответствии с техническое описание.
Поэтому вам нужно сдвинуть уровень напряжения между ним и платой Arduino (что составляет 5 В). Обратите внимание, что в спецификации показано, как это можно легко сделать с помощью двух резисторов (R1
и R2
в типовой схеме приложения, стр. 5).
Также на модуле bluetooth интерфейс RS232 имеет 4 контакта:
- UART_TX
- UART_RX
- UART_CTS
- UART_RTS
UART_CTS должен быть равен 0, чтобы устройство считывало входящие байты. Обычно это делается с помощью внутреннего подтягивающего резистора, но вы должны убедиться, что вы не подключили этот контакт к +V.
Наконец, убедитесь, что скорость передачи модуля правильно установлена на 9600 бод, как и в вашей программе.
Я в курсе всего этого, спасибо вам все равно. Однако моя проблема гораздо более фундаментальна. Мне нужно получить данные из контакта TX, чтобы я мог подключить к нему bluetooth. Если я не могу получить данные с контакта на плате Arduino, Bluetooth бесполезен. Как получить последовательные данные с платы arduino? Штыри USB отлично отправляют последовательные данные, но я не могу заставить другие контакты выводить данные. Нужно ли припаивать контакты USB для передачи данных в Bluetooth? Большое спасибо за любую помощь, я очень ценю это, @user3320919
Просто подключите последовательные контакты модуля Bluetooth к соответствующим контактам Pro Micro: TX к RX и RX к TX. Я надеюсь, что это может помочь кому-то.
Затем найдите такие данные:
void setup(){
Serial1.begin(9600); // Инициализация аппаратного последовательного порта на контактах 0 и 1 — Bluetooth
Serial.begin(9600); // Инициируем виртуальный последовательный порт — машина
Keyboard.begin(); // Инициализация HID — Клавиатура
}
void loop(){
if (Serial1.available() > 0) {
char myData = Serial1.read()
// Отправляем данные с Bluetooth/датчика на машину — виртуальный последовательный порт
Serial.println(myData);
// Эмулировать HID-устройство — клавиатура
if ( myData == 0x7F ) { // Обнаружение кода клавиши возврата Android
Keyboard.write(0xB2); // Преобразование полученного символа кода в код клавиши PC/Linux ascii для клавиши возврата. Это может меняться между различными ОС!
}
else {
Keyboard.write(myData);
}
}
}
Вы также можете попробовать библиотеку "SoftwareSerial". Таким образом, вы можете использовать практически любые контакты для последовательной связи. На самом деле у вас может быть пара последовательных портов.
Пожалуйста, прочитайте о библиотеке SoftwareSerial. У него есть некоторые ограничения.
Итак, я наткнулся на эту тему, имея аналогичную проблему, но с модулем HC-05. Поэтому, поскольку у меня слишком много свободного времени во время финалов (нет, нет), я решил создать небольшой репозиторий на github, который может когда-нибудь кому-нибудь помочь. https://github.com/Sackhorn/HC-05-Pro-Micro-Hookup
Код:
//Написано для pro micro
//Это оказалось полезным
//http://arduino.stackexchange.com/questions/1471/arduino-pro-micro-get-data-out-of-tx-pin
//https://forum.sparkfun.com/viewtopic.php?f=32&t=38889&sid=8178cdb38005ff33cc380a5da34fb583&start=15
void setup()
{
pinMode(9, OUTPUT);
digitalWrite(9, HIGH);
Serial.begin(9600);
Serial1.begin(38400);
}
void loop()
{
//Serial1 — это физические последовательные соединения на контактах TX и RX.
if (Serial1.available()) Serial.write(Serial1.read());
// Serial, насколько я понимаю, это виртуальное соединение с компьютером через USB
if (Serial.available()) Serial1.write(Serial.read());
}
Хорошее использование Serial и Serial1. Я разместил редактирование с вашим кодом и диаграммой., @Dave X
- Bluetooth-модуль HC-05 не принимает AT-команды
- как отправить данные в Adafruit Bluefruit Feather (32u4) через Bluetooth?
- Проблемы с последовательной связью от Arduino к Bluetooth HC-05
- Как прервать соединение HM10 Bluetooth?
- Arduino считывает состояние подключения устройства hc-05
- Arduino Nano 33 IOT — классический Bluetooth (последовательный)
- Плохо отформатированные символы с использованием Bluetooth-модуля JDY-30
- Какова самая высокая скорость передачи данных, которая может работать между Android-устройством и Ардуино, подключенным к HC05?
У вас есть питание?, @TheDoctor
И земля на прицел, подключенный к земле Arduino?, @TheDoctor
Да, на него подается +5 В, а прицел находится на контакте заземления Arduino. Как передать последовательные данные через контакт TX (digital0)? Я знаю, что это проблема с кодом, @user3320919
Ваш код выглядит нормально, @TheDoctor
Спасибо, но тогда мы оба не правы. Когда я помещаю этот код в Arduino, а затем проверяю вывод TX (цифровой 0), я вообще ничего не вижу, он просто плоский. Однако в моей программе последовательного порта на моей машине с Windows я вижу сообщение «helloWurld». Меня пока НЕ ЗАБОТИЛА программа serialport. Мне нужно, чтобы данные выходили из контакта TX, а НЕ USB. Имеет ли это смысл?, @user3320919
Вы пробовали пин 1?, @TheDoctor
Это контакт RX, и да, я пробовал каждый контакт, чтобы увидеть выходы. Все контакты на плате молчат, контакты на чипе слишком малы, чтобы их можно было прощупать, не говоря уже о пайке., @user3320919
У меня ничего не выходит из контакта TX. Сфера настроена просто отлично. Я могу без проблем перевести вывод TX с +5 на 0 в качестве проверки работоспособности. Переключение в циклическом вызове Arduino занимает около 2 мс. Вот код:
void setup(){ Серийный.начать(9600); pinMode(5,ВЫХОД); } недействительный цикл () { Serial.print("HelloWurld"); аналоговая запись (0,1); аналог записи (0,0); }
Это просто подливка для пульсации контакта TX. Под цифровым разъемом вы имеете в виду контакты на боковой стороне платы или контакты на самом чипе atmega? Большое спасибо за вашу помощь, я ценю это., @user3320919Ах, может быть, отсюда и путаница. Это НЕ стандартная UNO, это плата SparkFun, которая ведет себя как единое целое. Я тоже пытаюсь обратиться к SparkFun за помощью. На ваш комментарий: Вы имеете в виду линию TX чипа ATMEGA? Я пытаюсь понять, как я могу получать данные, выходящие из контакта TX, не видеть колебания 5 В, а затем также передавать данные через USB на мой компьютер. Извини, я правда просто не понимаю. Большое спасибо за Вашу помощь., @user3320919