¿Cómo puedo crear un puente serie usando dos dongles Bluetooth?

Tengo dos de los módulos bluetooth SparkFun BlueSmirf y me gustaría conectarlos entre sí, uno como maestro y otro como esclavo. Es fácil emparejarlos usando una PC con Putty como maestro, pero algunos de los comandos del módulo requieren un retorno de carro para enviar un comando.

¿Cómo puedo emparejar estos módulos bluetooth entre dos Arduinos sin usar una PC para enviar la señal de comando de carro desde PuTTY mientras se configura el dispositivo?

Revisé detenidamente la hoja de datos y la hoja de comandos del módulo en sí, pero no incluye información sobre cómo superar este problema.

¿Ha intentado enviar un \n, \n\roa \r\ntravés de un Serial.print()? Según el protocolo utilizado, algunos dispositivos serie requieren un retorno de carro, un salto de línea o un par CR-LF como delimitador de fin de línea.
Desafortunadamente, he probado todos esos, pero no son lo mismo que presionar enter.
@KeeganMcCarthy Luego, debe determinar qué PuTTY está enviando por la línea cuando presiona Intro. Esto casi siempre es \r\n o algo similar, pero debería estar disponible en la configuración.

Respuestas (3)

Explico la forma de hacerlo en esta publicación de blog o con gran detalle en este Instructables . Por ahora, aquí está el código básico que puede poner en el dispositivo maestro y en el dispositivo esclavo.

//Master code
void setup() {
  Serial.begin(115200);
  Serial.print("$$$");
  delay(100);
  Serial.println("SM,1");  delay(100);
  Serial.println("C,000666123ABC");
  delay(100);
  Serial.println("---");
}

//Slave code
void setup() {
  Serial.begin(115200);
  Serial.print("$$$");
  delay(100);
  Serial.println("SM,0");
  delay(100);
  Serial.println("---");
}

Y algunos consejos antes de continuar con Bluesmirf:

  1. Lea el manual de usuario
  2. Velocidad de serie: de forma predeterminada, BlueSmirf está configurado en 115200, por lo que debe llamar a Serial.begin (115200); antes de enviar el primer comando.
  3. El "$$$"comando es el único que no va seguido de un retorno de carro. ¿Por qué? Para complicar las cosas, por supuesto. Use print() para el "$$$"comando y println()para todos los demás comandos.
  4. Lee y valida todas las respuestas que se envían.
  5. Espere 100 ms de retraso después de cada comando que envíe y antes de intentar leer la respuesta. Esto le dará a Bluesmirf tiempo para procesar el comando.
  6. No olvide salir del modo comando (usando “---”). Algunos comandos no son efectivos hasta que haya salido del modo de comando (por ejemplo, comando MS).

Puede enviar un retorno de carro a través de la serie haciendo algo como esto:

Serial.print("\r");

También puede incluir el comando (o lo que sea que esté enviando) y el retorno de carro en la misma cadena de impresión como esta:

Serial.print("Everybody Dance Now\r");

desafortunadamente, enviar "\r" no es lo mismo que presionar enter cuando se usa PuTTY.
@KeeganMcCarthy Entonces presionar enter debe ser más que enviar un retorno de carro. Prueba \r\n

Bluetooth utiliza un modelo de host y dispositivo. Un dispositivo requiere un host para comunicarse.

Los módulos que está utilizando son dispositivos, mientras que su PC es un host.

No es posible que dos dispositivos Bluetooth, con el perfil de puerto serie (SPP), se emparejen entre sí. Solo pueden emparejarse con un host.

De hecho, los he emparejado. Pero uso un chip USB-UART para inicializar la conexión entre ellos.