Pregunta:
Arduino Pro Micro, ¿sacar datos del pin Tx?
user3320919
2014-05-09 03:08:00 UTC
view on stackexchange narkive permalink

Tengo un Sparkfun Arduino Pro Micro con un ATmega32u4 y un Módulo Bluetooth RN32 de Roving Networks

En teoría, debería poder suelde el Rx del Bluetooth al Tx en el arduino y viceversa y debería obtener comunicación en serie a través del Bluetooth.

Por supuesto que no. Sin embargo, como primera pregunta: ¿Cómo consigo que mi Arduino transmita datos a través del pin Tx?

Subí esto al Arduino sin problemas:

  void setup () {Serial.begin (9600);} void loop () {Serial.print (" HelloWurld ");}  

Sin embargo, cuando Enchufo mi o-scope, no veo ninguna señal en la línea Tx. Nada. Veo datos que llegan a través del USB al puerto COM de mi computadora, pero nada a través del pin Tx.

¿Cómo consigo que Arduino envíe datos en serie al pin Tx?

¿Lo tienes encendido?
¿Y el suelo del osciloscopio está conectado al suelo del Arduino?
Sí, tiene + 5v y el alcance está en el pin gnd de arduino. ¿Cómo envío datos en serie a través del pin TX (digital0)? Sé que es un problema de código
Tu código parece estar bien
Gracias, pero ambos estamos equivocados. Cuando pongo este código en el arduino y luego sondeo el pin TX (digital 0), no veo nada en absoluto, es plano. Sin embargo, en mi programa de puerto serie en mi máquina de ventanas, veo el mensaje `helloWurld`. NO ME IMPORTA por el programa de puerto serie por ahora. Necesito que los datos salgan del pin TX, NO del USB. ¿Tiene sentido?
¿Has probado el pin 1?
Ese es el pin RX, y sí, he probado cada pin para ver las salidas. Todos los pines de la placa son silenciosos, los pines del chip son demasiado pequeños para sondear, y mucho menos para soldar.
No sale nada del pin TX. El alcance está bien configurado. Puedo hacer que el pin TX pase de +5 a 0 sin problemas como verificación de cordura. Se necesitan aproximadamente 2 ms para cambiar la llamada al bucle de arduino. Aquí está el código: `void setup () {Serial.begin (9600); pinMode (5, SALIDA);} bucle vacío () {Serial.print ("HelloWurld"); analogWrite (0,1); analogWrite (0,0);} `Esto es solo una salsa para pulsar el pin TX. Por encabezado digital, ¿te refieres a los pines en el costado de la placa o los pines en el chip atmega? Muchas gracias por su ayuda, se lo agradezco.
Ah, puede que de aquí venga la confusión. Esta NO es una UNO estándar, esta es una placa SparkFun que se comporta como una. También estoy tratando de hablar con SparkFun para obtener ayuda. A tu comentario: ¿Te refieres entonces a la línea TX del chip ATMEGA? Estoy tratando de entender cómo puedo hacer que los datos salgan del pin TX, no ver la oscilación de 5V y luego hacer que el USB transmita datos a mi computadora. Lo siento, realmente no lo entiendo. Muchas gracias por su ayuda.
[! [ingrese la descripción de la imagen aquí] (http://i.stack.imgur.com/yftHW.jpg)] (http://i.stack.imgur.com/yftHW.jpg) Solo quería dejar el pinout completo. .
Cinco respuestas:
#1
+17
Chris Stratton
2014-05-10 01:33:33 UTC
view on stackexchange narkive permalink

Parece tener una placa de estilo "pro micro" en la que la comunicación USB proviene directamente del procesador principal ATmega32u4, en lugar de generarse como datos en serie y luego reenviarse a un convertidor USB-serie distinto como en los Arduinos tradicionales. Su pregunta podría haberse resuelto mucho más rápidamente si hubiera indicado claramente el tipo de tablero que estaba usando en palabras, en lugar de solo como un enlace de producto (así que lo edité en su pregunta) .

De acuerdo con la documentación para el Arduino Pro Micro oficial:

Serie: 0 (RX) y 1 (TX). Se utiliza para recibir (RX) y transmitir (TX) datos en serie TTL utilizando la capacidad de serie de hardware ATmega32U4. Tenga en cuenta que en el Micro, la clase Serie se refiere a la comunicación USB (CDC); para TTL serial en los pines 0 y 1, use la clase Serial1.

Por lo tanto, para generar salida en el hardware UART deberá cambiar todas las apariciones de Serial a Serial1

  void setup () {Serial1.begin (9600);} void loop () {Serial1.print ("HelloWurld");}  

Los datos de transmisión se obtendrán del pin 21 de ATmega32u4 que es "D1" (pin digital 1) en los encabezados. Si desea probarlo, ese sería el mejor lugar para hacerlo.

Si desea transmitir datos desde un pin diferente que no está conectado a la UART de ATmega32u4 (como su ejemplo con el pin digital 5 sugiere que podría), debe usar SoftwareSerial o una implementación similar para extraer los datos en serie de un pin de E / S de propósito general.

Por ejemplo (inspirado en este ejemplo):

  SoftwareSerial mySerial (4, 5); // RX, TXvoid setup () {mySerial.begin (9600);} void loop () {mySerial.print ("HelloWurld");}  
¡Bien visto, Chris! +1
#2
+5
jfpoilpret
2014-05-09 09:51:58 UTC
view on stackexchange narkive permalink

La placa bluetooth usa 3.3V , no 5V según la hoja de datos.

Por lo tanto, deberá cambiar el nivel de voltaje entre este y la placa Arduino (que es 5V ). Tenga en cuenta que la hoja de especificaciones muestra cómo esto se puede hacer fácilmente con 2 resistencias ( R1 y R2 en la hoja del circuito de aplicación típico, página 5).

Además, en el módulo bluetooth, la interfaz RS232 tiene 4 pines:

  • UART_TX
  • UART_RX
  • UART_CTS
  • UART_RTS

UART_CTS debe ser 0 para garantizar que el dispositivo lee los bytes entrantes. Normalmente esto se hace mediante una resistencia pulldown interna, pero debes asegurarte de que no conectaste ese pin a +V 0000-.

Finalmente, asegúrate de que la velocidad en baudios del módulo sea la adecuada configurado en 9600 baudios , lo mismo que en su programa.

Soy consciente de todo esto, gracias sigo igual. Sin embargo, mi problema es mucho más básico. Necesito sacar datos del pin TX para poder conectar el bluetooth a eso. Si no puedo sacar datos de un pin en la placa Arduino, el bluetooth es inútil. ¿Cómo obtengo datos en serie de la placa arduino? Los pines USB están enviando datos en serie sin problemas, pero no puedo obtener otros pines para enviar datos. ¿Necesito soldar los pines USB para obtener datos en el Bluetooth? Muchas gracias por cualquier ayuda, se lo agradezco muchísimo
#3
+3
DarkXDroid
2014-11-14 01:07:42 UTC
view on stackexchange narkive permalink

Simplemente conecte los pines seriales del módulo bluetooth a los pines Pro Micro correspondientes: TX a RX y RX a TX. Espero que esto pueda ayudar a alguien.

Luego busque datos como este:

  void setup () {Serial1.begin (9600); // Iniciar puerto serie de hardware en los pines 0 y 1 - Bluetooth Serial.begin (9600); // Iniciar puerto serie virtual - Machine Keyboard.begin (); // Init HID - Teclado} void loop () {if (Serial1.available () > 0) {char myData = Serial1.read () // Enviar datos desde Bluetooth / Sensor a la máquina - Puerto serie virtual Serial.println ( mis datos); // Emular dispositivo HID - Teclado if (myData == 0x7F) {// Detectar código de la tecla de retroceso de Android Keyboard.write (0xB2); // Convierta el código recibido char al código clave ascii de PC / Linux para la tecla de retroceso. ¡Esto puede cambiar entre diferentes sistemas operativos! } else {Keyboard.write (myData); }}}  
#4
+3
Sackhorn
2016-01-15 08:24:49 UTC
view on stackexchange narkive permalink

Así que me topé con este hilo mientras tenía un problema similar, pero con el módulo HC-05. Entonces, como tengo demasiado tiempo libre en mis manos durante las finales (no, no lo tengo), decidí crear un pequeño repositorio de github que podría ayudar a alguien en algún momento. https://github.com/Sackhorn/HC-05-Pro-Micro-Hookup

El código es:

  // Escrito para pro micro // Estos resultaron ser útiles //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 = 15void setup () {pinMode (9, OUTPUT); digitalWrite (9, ALTO); Serial.begin (9600); Serial1.begin (38400);} void loop () {// Serial1 son las conexiones seriales físicas en los pines TX y RX if (Serial1.available ()) Serial.write (Serial1.read ()); // Serial es, según tengo entendido, la conexión virtual con la computadora a través de USB if (Serial.available ()) Serial1.write (Serial.read ());}  

enter image description here

Buen uso de Serial y Serial1. Publiqué una edición con su código y diagrama.
#5
  0
TheSnarfster
2015-10-11 06:32:29 UTC
view on stackexchange narkive permalink

También puede probar la biblioteca " SoftwareSerial". De esa manera, puede usar casi cualquier pin que desee para comunicaciones en serie. De hecho, puede tener un par de puertos serie.

Sin embargo, lea la biblioteca SoftwareSerial. Tiene algunas restricciones.



Esta pregunta y respuesta fue traducida automáticamente del idioma inglés.El contenido original está disponible en stackexchange, a quien agradecemos la licencia cc by-sa 3.0 bajo la que se distribuye.
Loading...