Arduino: uso Serial y Software Serial con módulo bluetooth
Mi propósito es usar Arduino para establecer la comunicación entre un PC y un dispositivo Android usando un módulo bluetooth HC-05.
Utilizo la comunicación USB entre el PC y el Arduino (Serial Monitor) y un SoftwareSerial para conectar al HC-05.
- Cómo hacer que Android y Arduino se comuniquen sin un módulo inalámbrico
- Android Bluetooth - No se puede conectar
- Bluetooth SPP entre Android y otras preguntas de dispositivos, UUID y PIN
- Delphi XE5 Serial Port en Android
- Arduino Mega recibe los datos correctos a través de la Serie 0 pero no la Serie 1-3
Mi problema es que la comunicación funciona bien de BT a la PC, pero no funciona como se esperaba en la otra forma. Al enviar desde el PC a BT todos los caracteres enviados son recibidos por el dispositivo BT solamente cuando cierro el Monitor Serial en el PC o cuando reinicio el Arduino.
He excluido un problema con el módulo BT o la aplicación de Android, porque si en Arduino implemento un código "ECHO" (escribe en Android y el envío en Android) todo funciona bien.
Con el código Arduino publicado abajo el comportamiento esperado es: Arduino reset-> Hola palabra enviada, Serial monitor abierto-> nada sucede, carácter escrito en el monitor en serie-> carácter recibido en BT, carácter escrito en BT-> carácter recibido en Serial Monitor , Monitor serie cerrado-> no pasa nada.
El comportamiento real es: Arduino reset-> Hola palabra enviada, Serial monitor abierto-> 2 Hola palabra en BT y 1 ("buenas noches") en la PC, carácter escrito en el monitor serie-> nada, carácter escrito en BT-> carácter recibido En el monitor en serie, el monitor en serie cerrado-> carácter (s) anterior (es) en el monitor en serie recibido + Hello Word.
¿Como puedo solucionar este problema?
Código:
#include <SoftwareSerial.h> SoftwareSerial mySerial(2, 3); // RX, TX int a=0; char c; char d; void setup() { Serial.begin(9600); Serial.println("Goodnight moon!"); mySerial.begin(9600); mySerial.println("Hello, world?"); } void loop() { delay(10); if (Serial.available()) { c=Serial.read(); delay(10); Serial.write(c); } delay(10); if (mySerial.available()) { d=mySerial.read(); delay(10); mySerial.write(d); } }
- ¿Anular la tecla de eliminación en Android?
- Android RS232 a través de la toma de auriculares?
- Comunicación con dispositivo USB serie en Android
- Android Bluetooth Serial / RFCOMM / SPP, ¿Cómo cambiar el BAUD RATE?
- Comunicación en serie con Windows Phone 8
- Utilice una impresora bluetooth portátil con android
- Detectar puertos serie instalados en dispositivos Android
Este código funciona para mí en un Arduino Mini Pro (debe ser el mismo que UNO) con un HC-05. Tengo el HC-05 emparejado con mi computadora portátil. Utilizando HyperTerminal en el puerto COM asociado con el HC-05 y la consola serie Arduino, puedo enviar mensajes bidireccionalmente. Las sentencias Serial.println aparecen en la ventana de Hyperterminal como deberían.
#include <SoftwareSerial.h> #define rxPin 8 #define txPin 7 SoftwareSerial mySerial(rxPin, txPin); // RX, TX char myChar ; void setup() { Serial.begin(9600); Serial.println("Goodnight moon!"); mySerial.begin(9600); mySerial.println("Hello, world?"); } void loop(){ while(mySerial.available()){ myChar = mySerial.read(); Serial.print(myChar); } while(Serial.available()){ myChar = Serial.read(); mySerial.print(myChar); } }
He implementado una comunicación serial entre Arduino Uno y PC y este era mi código, espero que pueda ayudar:
int data; char character; int start_flag = 0; void setup() { Serial.begin(921600); pinMode(2, OUTPUT); } void loop() { if(Serial.available() > 0){ character = (char) Serial.read(); if(character == 's') { start_flag = 1; } if(character == 't') { start_flag = 0; } } if (start_flag == 1) { Serial.print(data); //data that was acquired by internal ADC } }
Podrías intentar esto . Se trata del código más simple que puedes usar al probar la comunicación Arduino bluetooth <-> C #. Nota: el código se ha probado conectando el PIN1 (TX) <-> MÓDULO RX, PIN2 (RX) <-> MÓDULO TX y dividiendo el PIN1 (TX) 5V a 2,5V antes de alimentarlo al módulo.
Espero que esto ayude a todos los que están intentando esto!
Utilice esta configuración en serie. Con este código puedo recibir y enviar la fecha al bluetooth del monitor serial
void setup(){ Serial.begin(9600); // Begin the serial monitor at 9600bps bluetooth.begin(115200); // The Bluetooth Mate defaults to 115200bps bluetooth.print("$"); // Print three times individually bluetooth.print("$"); bluetooth.print("$"); // Enter command mode delay(100); // Short delay, wait for the Mate to send back CMD bluetooth.println("U,9600,N"); // Temporarily Change the baudrate to 9600, no parity // 115200 can be too fast at times for NewSoftSerial to relay the data reliably bluetooth.begin(9600); // Start bluetooth serial at 9600 pinMode(led, OUTPUT); pinMode(buttonPin1, INPUT); pinMode(buttonPin2, INPUT); }
Para obtener más información, visite http://www.circuitmagic.com/arduino/arduino-and-bluetooth-hc-06-to-control-the-led-with-android-device/
Recomiendo usar esta aplicación para realizar pruebas:
https://play.google.com/store/apps/details?id=com.vagoscorp.virtualterminal
Le permite ver y enviar bytes como bytes (número de 0b00000000 a 0b11111111 (0 a 255 en decimal)) para que pueda hacer un simple firmware de eco para probar si su velocidad de transmisión es correcta y con ese trabajo, comience a enviar comandos para encender / Apagado algunos LEDs
Este es un ejemplo de código de eco:
char dato = 0; void setup() { Serial.begin(9600);//9600 is the default baudrate of the HC-05 (you can change it by AT commands, google it if you want) //pinMode(13, OUTPUT); //enable this pin if you want to use de LED idea //digitalWrite(13, HIGH); } ////////////////////////////////////////////////////////////////////////// void serialEvent() { //if you have received serial data while (Serial.available() > 0) { char dato = (byte)Serial.read();//save the byte Serial.write(dato);//send the just received byte (echo) } } /////////////////////////////////////////////////////////////////////////// void loop() { }
Espero que esto te ayude
Tenía el mismo problema, usted tiene que ver el módulo BT como 2 velocidades de baud diferentes en el lado cableado y el lado de la radio. El lado de la radio se ajusta por lo que usted conecta a través de la masilla, el lado atado con alambre se programa vía los comandos de AT. El valor predeterminado de HC-05 es 38400.