BlueSMIRF - no transmission, receive OK.

I recently acquired a new [BlueSMIRF silver. Everything seems to be working fine, except that I can’t seem to get anything to come out of the TX pin. I found a few threads of people with similar issues, but none of them listed any real solutions.

Steps:

  1. I installed bluesoliel.

  2. I wired up my blueSmirf to an arduino, as described in the first comment on the product page (rx to tx, tx to rx, power/gnd to power/gnd, RTS shorted to CTS).

  3. I uploaded a test program to the arduino so it would turn on a light when it receives something over the serial port, as well as echo any chars it receives.

  4. I unplugged the arduino from the computer, then plugged in a DC power jack to turn on the arduino and the bluetooth module.

  5. I connected to the bluesmirf with Bluesolliel,

  6. Using putty, I connected to COM6 at 115200 baud.

  7. I entered the command sequence “$$$” and get back the characters “CMD”

  8. I entered ‘—’ and hit return to exit command mode.

  9. I press a bunch of keys. Nothing happens: no light turns on and no characters are echoed back.

  10. I tried doing the ‘hardware echo’ method of plugging the smirf’s TX pin into its RX pin, and I still get no echo when connected with putty.

  11. I tried programming the arduino to constantly send ‘a’ and I when I connect via putty I get a stream of 'a’s.

This is the code I’ve been using:

char val;         // variable to receive data from the serial port
int ledpin = 9;  // LED connected to pin 48 (on-board LED)

void setup() {
  pinMode(ledpin, OUTPUT);  
  Serial.begin(115200);          // start serial communication 
  digitalWrite(ledpin, LOW);   // start OFF
}


void loop() {
  //Serial.write('a'); //I used this to test whether I could transmit any characters back: it worked fine.
  if( Serial.available() )         // if data is available to read
  {
    digitalWrite(ledpin, HIGH);  // turn ON the LED 
    val = Serial.read();          // read it and store it in 'val'
    Serial.write(val);
  }
  delay(100);                         // wait 100ms for next reading
}

Am I missing something in my setup? I’m not really sure how to proceed debugging from here. Has anyone else encountered a similar problem and solved it? I’m happy to provide additional information if it would help.](Bluetooth Modem - BlueSMiRF Silver - WRL-10269 - SparkFun Electronics)

After borrowing an oscilloscope, I found that the TX pin remains at ground when I try to send a character to the module over bluetooth. I was able to read characters sent to the module’s RX pin just fine. My working hypothesis is that the module is broken, so I am getting a replacement. Will post an update later if that works out.

Got the new blueSMIRF - works fine; the old one was borked.

Just a P.S. to this message, I had exactly the same problem with exactly the same resolution. Got a new board today, soldered on the headers, and everything worked flawlessly on the first try. That after nearly a week of troubleshooting! Fortunately I have a Mega and was able to run serial terminals to Arudino via USB and via Bluetooth. Here’s the test code I ran, if all is well, anything typed in one terminal appears in the other. Hope this is useful to someone!

Gryffin

/*
 * SendTest -- Sends a continuous stream of charac
 */
 
 int ledPin = 13;
 
 void setup()
 {
   Serial.begin(115200);   // Open a connection to the Serial Monitor
   Serial1.begin(115200);  // Open a connection to the BlueSMiRF
   
   // Wait for the Serial to be setup
   while (! Serial);
   Serial.println("Serial connection ready.");
   
   while (! Serial1);
   Serial1.println("Serial1 connection ready.");
   
   
   pinMode(ledPin, OUTPUT); // Activate the LED
 }
 
 void loop()
 {
   // Look for data coming in from the Serial Monitor
   if (Serial.available()) {
     char cmd = Serial.read();  // Read the character
     Serial.print(cmd);         // Send the character back to the Serial Monitor
     Serial1.print(cmd);         // Send the character back to the terminal program
     
     //Serial.println("Serial1.available() = ");
     //Serial.print(Serial1.available());
     //Serial.println("");
     
     //Serial.println(Serial1.read());
     
     //'1' turns on the LED, '0' turns it off
     if (cmd == '1') {
       digitalWrite(ledPin, HIGH);
     } else if (cmd == '0') {
       digitalWrite(ledPin, LOW);
     }
   }

   // Look for data coming in from the BlueSMiRF
   if (Serial1.available()) {
     char cmd = Serial1.read();  // Read the character
     Serial.print(cmd);         // Send the character back to the Serial Monitor
     Serial1.print(cmd);         // Send the character back to the terminal program
     
     //'1' turns on the LED, '0' turns it off
     if (cmd == '1') {
       digitalWrite(ledPin, HIGH);
     } else if (cmd == '0') {
       digitalWrite(ledPin, LOW);
     }
   }
   delay(100);
 }