RockBlock Mk2 satellite module issues.

Hi all,

I am currently working with the RockBLOCK Mk2 - Iridium SatComm Module ( RockBLOCK Mk2 - Iridium SatComm Module - WRL-13745 - SparkFun Electronics ) and am having no luck getting anything started with it.

My set up right now is with an Arduino Mega and i'm using a 3 - wire configuration for communication.

This is a simple code that I am using just to send a message, but I am unable to upload to the board. This has been the case for many example codes I have attempted.

#include "IridiumSBD.h"
#include "SoftwareSerial.h"
 
SoftwareSerial ssIridium(18, 19); // RockBLOCK serial port on 18/19
 
IridiumSBD isbd(ssIridium, 10);   // RockBLOCK SLEEP pin on 10
 
void setup()
{
  
   isbd.setPowerProfile(1); // This is a low power application 0 =low , 1 = high power
   isbd.begin(); // Wake up the 9602 and prepare it to communicate.
}


void loop()
{

  int sendSBDText(const char *message);
}

Here are some sites that I have been referring to for this project.
http://arduiniana.org/libraries/iridiumsbd/

I'd love to hear your input if you have worked with this module or can help me figure out where I am going wrong.

Thanks for the help in advance

Without knowing that hardware I suggest including tests to Your code. Is there any status request You can call and aquire an answer in setup to check that Your device alive at all? Use Serial.print for test result printing.
That method was successful during many years of jumping into large, unknown software systems.

SoftwareSerial ssIridium(18, 19); // ?

A Mega has three spare hardware serial ports, so DON't use softwareSerial on a Mega.
Go to Examples>04.Communication>MultiSerial in the IDE, and see how Serial1 is used.
Leo..

Your program does not work (at least in part) because you never initialize the Software Serial object.

In order to actually use Software Serial, or any other sort of serial, you need a .begin() with a communications rate.

isbd.begin(); Will initialize by default, a baud rate of 19200 for the module.
At least from what I understand from reading the forms I mentioned above.

I have gone ahead and added a Serial.begin(19200) just to check if anything was showing on the serial monitor, but no luck.

#include "IridiumSBD.h"
//#include "SoftwareSerial.h"
 
//SoftwareSerial ssIridium(18, 19); // RockBLOCK serial port on 18/19
//IridiumSBD isbd(ssIridium, 10);   // RockBLOCK SLEEP pin on 10
 
void setup()
{
  
  // isbd.setPowerProfile(1); //  0 = highpower , 1 = low power
   Serial.begin(19200); // Wake up the 9602 and prepare it to communicate.
   int sendSBDText("Test-0");
}


void loop()
{
}

Ultimately, It seems I am in better shape to just utilize the AT commands of this device rather than the library to get things started. Though I am still unsure how to configure the Serial ports for this specific function. I have tried simply using the 19200 baud serial monitor and Serial.printing simple AT commands. But don't here anything back from the device.
Is anyone familiar with sending AT commands to a module and successfully hearing back from it?

This is my first attempt just to send "AT" from my end hoping to receive "OK" back.

#include "IridiumSBD.h"

void setup()
{
  
  // isbd.setPowerProfile(1); //  0 = highpower , 1 = low power
   Serial1.begin(19200); // Wake up the 9602 and prepare it to communicate. pins 18--Tx1 , 19--Rx1
   Serial.begin(9600); // communication with host computer
}


void loop()
{
    // listen for communication from the Mk2 and then write it to the serial monitor
  if (Serial1.available() ) { Serial.write( Serial1.read() ); }
  
     // listen for user input and send it to the Mk2
  if (Serial.available() ) { Serial1.write( Serial.read() );  }
}

Serial.begin() is for pin 0,1 (the USB<>Serial chip)
Serial1.begin() is for pin 17,18
Serial2.begin() is for pin 16,17
Serial3.begin() is for pin 14,15
Leo…

Maybe it’s time to start over with the basics? Use your computer to communicate with the RockBLOCK. A usb to serial converter configured to 19200 and you should be able to send and receive AT commands.

Once you’ve proven out the RockBLOCK, it should be a simple matter to get the Mega communicating using the one of the Serial1/2/3 hardware ports. As mentioned, you should not be using software serial.

WattsThat:
Maybe it’s time to start over with the basics? Use your computer to communicate with the RockBLOCK. A usb to serial converter configured to 19200 and you should be able to send and receive AT commands.

Once you’ve proven out the RockBLOCK, it should be a simple matter to get the Mega communicating using the one of the Serial1/2/3 hardware ports. As mentioned, you should not be using software serial.

I have tested the module using a USB to serial as mentioned and everything is working fine there.

I'm having a hard time understanding what extra steps I need to take to achieve this using Arduino.

Thanks again for all the help.

I took a look at the library you are using, and it is quite complex. It expects you to use Software Serial, and expects to initialize the instance itself.

Satellite communications do not work unless you are outside, with a clear view of the sky, and presumably in this case, unless you have a paid subscription to the service.

An obvious blunder with the code you initially posted is that "message" does not seem to be initialized, which can cause several possible problems.

To get started with AT commands, consider using a simple terminal program (or similar on Arduino).

Otherwise, get, print out and study the codes that are returned from the function calls, e.g.

#include "IridiumSBD.h"
#include "SoftwareSerial.h"
 
SoftwareSerial ssIridium(18, 19); // RockBLOCK serial port on 18/19
 
IridiumSBD isbd(ssIridium, 10);   // RockBLOCK SLEEP pin on 10
 
void setup()
{
 
   Serial.begin(9600); //set Serial monitor to match.
   isbd.setPowerProfile(1); // This is a low power application 0 =low , 1 = high power
   isbd.begin(); // Wake up the 9602 and prepare it to communicate.

int return_code = sendSBDText("RockBlock test"); 
  Serial.print("return code ");
  Serial.println(return_code);

}
void loop() { }

Error return codes

Many IridiumSBD methods return an integer error status code, with ISBD_SUCCESS (0) indicating successful completion. These include begin, sendSBDText, sendSBDBinary, sendReceiveSBDText, sendReceiveSBDBinary, getSignalQuality, and sleep. Here is a complete list of the possible error return codes:

#define ISBD_SUCCESS 0
#define ISBD_ALREADY_AWAKE 1
#define ISBD_SERIAL_FAILURE 2
#define ISBD_PROTOCOL_ERROR 3
#define ISBD_CANCELLED 4
#define ISBD_NO_MODEM_DETECTED 5
#define ISBD_SBDIX_FATAL_ERROR 6
#define ISBD_SENDRECEIVE_TIMEOUT 7
#define ISBD_RX_OVERFLOW 8
#define ISBD_REENTRANT 9
#define ISBD_IS_ASLEEP 10
#define ISBD_NO_SLEEP_PIN 11

Hi all,

I am currently working with arduino mega and rockblock 9603. I am using send/receive example inside the iridium library but I am not able to send any command before power on. Rockblock only reads message I sent before power on. Does anyone know anything about it?

Thanks a lot