Cellular Module - No Output

Hi

I’m having issues with my Cellular Module.
I’m using a FEZ Spider with this Cellular Module : https://www.ghielectronics.com/catalog/product/322

I used various examples and made sure about

  1. this.cellularRadio.DebugPrintEnabled = true;
  2. Power

But I cannot seem to get any output at all
I have tried AT Commands as well as just the simple cellularRadio.SendSms(“+27NR”, “testfromdevice”);

I’m using Framework 4.3

any help would be much appreciated!

I actually had success by removing the “+” in front of the number, but still keep the country code.

Did you ensure that the SIM does not required PIN-code?

@ John - I dont think you follow the debug Gadgeteer recommendations btw. - new issue for the next release :whistle:

I have removed the “+” - no success! :frowning:

The sim card does not need a pin.
I have tested the sim for sms and pin on another device!

For some reason the AT Commands doesn’t print to Output?


void ProgramStarted()
{
  GT.Timer timer = new GT.Timer(50000);
  timer.Tick += timer_Tick;
  timer.Start();
  this.cellularRadio.DebugPrintEnabled = true;
  this.cellularRadio.PowerOn(40);
}

void timer_Tick(GT.Timer timer)
{
  cellularRadio.SendSms("27XXXXXXXXX", "testfromdevice");
  cellularRadio.SendATCommand("AT"); //Must return :ok", use to check comms
  cellularRadio.SendATCommand("ATI"); //Identifies Firmware revision
}

Output
The thread ‘’ (0x2) has exited with code 0 (0x0).
Using mainboard GHI Electronics FEZ Spider version 1.0
#### Exception System.NotImplementedException - 0x00000000 (1) ####
#### Message:
#### GadgeteerApp2.Program::cellularRadio_NetworkDown [IP: 0004] ####
#### System.Reflection.MethodBase::Invoke [IP: 0000] ####
#### Gadgeteer.Program::DoOperation [IP: 001a] ####
#### Microsoft.SPOT.Dispatcher::PushFrameImpl [IP: 0054] ####
#### Microsoft.SPOT.Dispatcher::PushFrame [IP: 001a] ####
#### Microsoft.SPOT.Dispatcher::Run [IP: 0006] ####
#### Gadgeteer.Program::Run [IP: 001d] ####

I can see that you are using the old driver.

You should download the newest driver source from https://bitbucket.org/ghi_elect/gadgeteer/src/1522cff8cff1c79fe4dda8a8e3c702eb5bbf791c/Modules/GHIElectronics/CellularRadio/CellularRadio_43/?at=master

And give that a roll. Just place the file in the folder of your project, and remove the reference to the cellular driver in your reference of the project.

@ njbuch - None of our drivers use the DebugPrintEnabled property. It is something on our list to do, but it is low priority.

@ njbuch - Thanks for the help! Worked like a charm!

@ wlouwster - great. Let’s know what you are working on…

Any idea how to get the cellularRadio_SmsReceived event to fire?
(send sms works fine, but I cannot get any events to fire, i,e sms, signal strength, etc.)

@ wlouwster - Are you still using the latest source from bitbucket?

@ John - Hmm, I am having some serious problems with it now. It seems that the module busy has been removed from the current driver, and that actually results in a reset of the cellular module because I am using it from two threads. Maybe I just need a complete rewrite of my code.

@ njbuch - None of the Gadgeteer drivers are thread safe. We left that up to the user.

The modem is working in its own thread, and its easy to force new stuff into the channel. So its kind if unavoidable…? Take a look at these two versions of the same method, to me it seems that some thread safety has been removed and moved elsewhere???

And on top of that, the important debugprint line has been removed…STRANGE!

OLD 2014_R3 version:


public ReturnedState SendATCommand(string atCommand)
        {
            // Check if module is busy
            if (isModuleBusy) return ReturnedState.ModuleBusy;
            // Append carriage return
            if (atCommand.IndexOf("\r") < 0) atCommand += "\r";
            // Check if string is an AT command
            if (atCommand.IndexOf("AT") < 0) return ReturnedState.InvalidCommand;
            // Check if module is on
            if (!isPowerOn) return ReturnedState.ModuleIsOff;
            // Check if serial line is open
            if (serialLine.IsOpen) serialLine.Write(atCommand);
            else return ReturnedState.Error;
            Thread.Sleep(100);
            DebugPrint("SENT: " + atCommand);
            return ReturnedState.OK;
        }

Newest MASTER branch:


		/// <summary>
		/// Sends an AT command to the module. It automatically appends the carriage return.
		/// </summary>
		/// <param name="atCommand">The AT command. See SIM900_ATC_V1.00 for reference.</param>
		/// <returns>The module response to the AT command.</returns>
		public void SendATCommand(string atCommand)
		{
			if (!this.powerOn) throw new InvalidOperationException("The module is off.");
			if (atCommand.IndexOf("AT") == -1) throw new ArgumentException("atCommand", "The command must begin with AT.");
			if (atCommand.IndexOf("\r") < 0)
				atCommand += "\r";
			this.WriteLine(atCommand);
			Thread.Sleep(100);
		}

@ njbuch - The module busy flag was used very inconsistently and was not a good way to manage requests and responses. There is still a lot we want to do with the driver.

@ John - I am indeed!

@ wlouwster - Can you post a small program that shows your issue reliably?