CCS C Software and Maintenance Offers
FAQFAQ   FAQForum Help   FAQOfficial CCS Support   SearchSearch  RegisterRegister 

ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

CCS does not monitor this forum on a regular basis.

Please do not post bug reports on this forum. Send them to support@ccsinfo.com

GSM M95 Quectel not sending/receiving SMS

 
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion
View previous topic :: View next topic  
Author Message
Jody



Joined: 08 Sep 2006
Posts: 182

View user's profile Send private message Send e-mail

GSM M95 Quectel not sending/receiving SMS
PostPosted: Thu May 19, 2022 6:21 am     Reply with quote

Hello,
I have a M95 Quectel module (Clicker board from MikroE).
This one: https://www.mikroe.com/gsm-2-click
And a https://www.mikroe.com/clicker-2-pic18fj where the GSM module is mounted to.
I have used the code from GABRIEL BARRIOS and I have contact with the module.
And it was working...and suddenly it stopped. Now I have changed the SIM card (result is the same) and I think that there is some register I am missing to initialize but I just cannot find it.
So my question is: Is there somebody who has a Init for this module?
To make anything clear I will post my project (or the Init).

But right now I am pulling my hair!!!!!

Best regards,
Jody
hmmpic



Joined: 09 Mar 2010
Posts: 314
Location: Denmark

View user's profile Send private message

PostPosted: Thu May 19, 2022 7:24 am     Reply with quote

Just some hints...
You need to start with a terminal connected, check what is working:
autobaud AT
simcard with CPIN
Signal CSQ
Reg CREG
Use the datasheet:-)

When you do the code use the STATUS pin to know what state the module is at.
When entering commands use returned "OK" or what the datasheet say must be the end of the commands.
Many just use a delay, but it won't work in the real world. Some commands respond in few ms, and others in many second.
dyeatman



Joined: 06 Sep 2003
Posts: 1912
Location: Norman, OK

View user's profile Send private message

PostPosted: Thu May 19, 2022 9:24 am     Reply with quote

What version CCS compiler are you using?
Please post the first part of your code up to and including the RS232 initialization lines.
_________________
Google and Forum Search are some of your best tools!!!!
Jody



Joined: 08 Sep 2006
Posts: 182

View user's profile Send private message Send e-mail

PostPosted: Fri May 20, 2022 12:56 am     Reply with quote

I can communicate with the M95. Read and write to the module is fine.
CREG = 1,1 and sometimes 1,2

I start with a GSM_SMS_init_1() include this function with this post.
Also include the functions called from that init file.
And sorry for the long post


Code:

void GSM_SMS_init_1(void)
{
   extern int   gsm_init_error;

   gsm2_reset();   
   gsm2_module_power();
   gsm2_reset();
   gsm2_module_init();

   if(!gsm_init_error)
   {
      //**************************************************************************
      // Check if modem is attached
      //**************************************************************************
      if(Check_COM())
      {   
         Clear_buffer();
         fprintf(RS232,"COMMS ARE GOOD\n");
         fprintf(RS232,"MOVING ON...\n");
         delay_ms(500);
      }
      else
      {
         fprintf(RS232,"COMMS FAILED\n");
         delay_ms(500);                     // Delay a maximum of X seconds;
         while(!Check_COM())
         {
            fprintf(RS232,"RETRYING - STUCK IN LOOP\n");
            gsm_init_error =1;
            delay_ms(500);
         }
         fprintf(RS232,"COMMS ARE GOOD\n");
      }
   }
   delay_ms(500);
   //SEND_SMS_RUNNING();
   SET_CREG();
   ARE_WE_SET_CREG();
   //SET_MEM();
   if(!gsm_init_error)
   {
      //**************************************************************************
      // Set Modem to TXT mode
      //**************************************************************************
      fprintf(RS232,"\n\n");
      fprintf(RS232,"SET MODEM TO TXT MODE\n");
      delay_ms(1000);                        // Delay a maximum of X seconds;
      if(SET_PDU())
      {
         Clear_buffer();
         fprintf(RS232,"OK! - MOVING ON...\n");    
         delay_ms(500);
      }
      else
      {
         fprintf(RS232,"ERROR - SETTING MODEM TO TXT MODE...\n");
         gsm_init_error =1;
      }
   }      

   
   if(!gsm_init_error)
   {
      //**************************************************************************
      // Set SMS Alert Message
      //**************************************************************************
      fprintf(RS232,"SETTING SMS ALERT\n");
      delay_ms(500);
      if(SET_CNMI())
      {
         CLEAR_BUFFER();
         fprintf(RS232,"OK! - MOVING ON...\n");
         delay_ms(500);
      }
      else
      {
         fprintf(RS232,"ERROR - STUCK IN LOOP...\n");
         gsm_init_error =1;
      }
   }
   if(!gsm_init_error)
   {
      //**************************************************************************
      // WAIT FOR SMS AND READ
      //**************************************************************************
      fprintf(RS232,"MODEM SETUP IS DONE\n");
      fprintf(RS232,"CLEARING BUFFER...\n");
      Clear_buffer();
      fprintf(RS232,"DONE ---> RUN PROGRAM\n");
      DELAY(1);                           // Delay a maximum of X seconds;
      fprintf(RS232,"\n\n");
   }
}


most of this code is from GABRIEL BARRIOS.

Code:

//******************************************************************************
//                      GSM/SMS CONTROL "Driver"
//******************************************************************************
// AUTHOR: GABRIEL BARRIOS
// DATE: 29/04/2013
// Panama, Rep. Panama.
//______________________________________________________________________________
//
// This "Driver" contains the _basic_ functions required to succesfully control
// "something" via SMS.
// The included delay function waits for a character or times out.
// Ive included a function to recharge credit to a prepaid sim.
// Also included is a reply to sms function.
//
// YOU NEED TO CLEARLY UNDERSTAND HOW TO ADD NEW COMMANDS
// There are 3 example commands - I use defines as "pointers" to the commands
//
// UPDATE: 06/05/2013
// Forum user EZFLYR noted the "New Message Indicator" was missing.
// He also noted that most modules Default with this feature OFF.
// A new Function SET_CNMI() has been added to correct this.
//______________________________________________________________________________
//******************************************************************************


//******************************************************************************
// These defines are for code readability purposes. They must match EXACTLY with:
//          Strings[][] + SIZE_COMMAND + TOTAL_STRINGS + GET_SMS_COMMAND()
// Makes it a whole lot easier to add new ones.
// I have arbitrarily set the max command length to 10 chars, including '\0'.
// This can be changed with the defines below.
//******************************************************************************
//                        (See TOTAL_STRINGS BELOW)
#DEFINE OK            0          // 1 <-- Required
#DEFINE CMTI         1          // 2 <-- Required
#DEFINE ERROR         2          // 3 <-- Required
#DEFINE EXITO         3          // 4 <-- Untested

#DEFINE Temp1         4          // 5 <-- USER DEFINED
#DEFINE Temp2         5          // 5 <-- USER DEFINED
#DEFINE Alarm         6          // 6 <-- USER DEFINED
#DEFINE Power1         7          // 7 <-- USER DEFINED
#DEFINE Power2         8          // 8 <-- USER DEFINED
#DEFINE Info         9          // 9 <-- USER DEFINED

#DEFINE TOTAL_STRINGS   10         // Total number of Searchable strings
#DEFINE SIZE_COMMAND   10        // Sets the Max command Length including '\0'
#DEFINE SIZE_BUFFER      160        // Serial Buffer Size
#DEFINE NULL         '\0'         // Easier to type than '\0'
//______________________________________________________________________________



//******************************************************************************
//                      FUNCTION DECLARATIONS
//******************************************************************************

#INT_RDA
void SerialInt();      // Serial ISR used

int1 CHECK_COM();      // Checks Modem comms are OK
int1 SET_PDU();         // Sets modem to TXT MODE
int1 SET_MEM();         // Sets the Prefered Message Storage
int1 SET_CNMI();
int1 DEL_SMS(int);      // Deletes SMS form memory
int1 READ_SMS(int);      // Loads SMS onto buffer
int1 RECHARGE_ACCOUNT();// If using Pre_Paid cards *Might* vary depending on country
int1 STRING_SEARCH(int);// Searchs for strings or commands
int1 DELAY(int);      // Delay with Limit
int GET_SMS_COMMAND();   // Similar to string_search but "simpler" and for user level.
void CMD_LOAD(int);      // Loads commands to a temp buffer from main "Strings" data base
void SEND_SMS_POWER();   // Sends an SMS when power fails
void SEND_SMS_TEMP1();   // Sends an SMS when temperature fails
void SEND_SMS_RUNNING();// Sends an SMS
void get_temp_number();    //Get number temperature warning
void get_power_number();    //Get number power warning
void get_alarm_temp();      //Get temperature setting

// These are helpfull to have around
void Clear_buffer();      // Clears the serial buffer
void Print_buffer();      // Just a serial buffer Print
//______________________________________________________________________________



//******************************************************************************
//          MAIN STRINGS or COMMANDS ARRAY and TEMPORARY COMMAND STORAGE
//******************************************************************************
// It is _IMPERATIVE_ that these match the define statements at the top
//
//                                              (SEE DEFINES AT TOP)
const char Strings[TOTAL_STRINGS][SIZE_COMMAND]={   
                              "OK\0",         // index 0
                              "+CMTI\0",      // index 1
                              "ERROR\0",      // index 2
                              "Exitosa\0",   // index 3
                              "Temp1\0",      // index 4
                              "Temp2\0",      // index 5
                              "Alarm\0",      // index 6
                              "Power1\0",      // index 7
                              "Power2\0",      // index 8
                              "Info\0"};      // index 9
char Command[SIZE_COMMAND];                     // Temp command buffer
extern char Receive_String[SIZE_BUFFER];         // Serial Buffer
extern char tel_temp1[14];
extern char tel_temp2[14];
extern char tel_power1[14];
extern char tel_power2[14];
extern char tel_info[14];
extern signed int8 alarm_temp;
int counter_read = 0x00;                     // Serial Buffer Counter

//______________________________________________________________________________
//******************************************************************************
//                      M95 INIT MODULE
//******************************************************************************
void gsm2_module_init()
{
   fprintf(RS232,"INIT THE MODEM\n");

   fprintf(GSM,"AT\r");      // Send Attention Command
   delay_ms(500);
   fprintf(GSM,"AT\r");      // Send Attention Command
   delay_ms(500);
   fprintf(GSM,"AT\r");      // Send Attention Command
   delay_ms(500);
   fprintf(GSM,"ATE0\r");      // Send Attention Command
   delay_ms(500);
   fprintf(GSM,"AT+IFC=2,2\r");   // Set data flow control 0,0-> no flow control; 2,2-> RTS,CTS
   delay_ms(500);
    fprintf(GSM,"AT+CMGF=1\r" ); // Select SMS message format 0-> PDU mode 1-> Text mode
   delay_ms(500);

}
//******************************************************************************
//                      POWER UP THE M95 MODULEHAVE
//******************************************************************************
void gsm2_module_power()
{
   fprintf(RS232,"SET POWER TO MODEM\n");
   output_high(PIN_D0);
   delay_ms(100);
   while(!input(STAT)); //wachten tot STAT hoog wordt
   output_low(PIN_D0);
   delay_ms(3000);
   output_high(PIN_D0);
   delay_ms(6000);
}

//******************************************************************************
//                      RESET THE M95 MODULE
//******************************************************************************
void gsm2_reset()
{
   fprintf(RS232,"RESET THE MODEM\n");
   output_high(PIN_D0);
   while(!input(STAT)); //wachten tot STAT hoog wordt
   delay_ms(100);
   output_low(PIN_D0);
   delay_ms(400);
   output_high(PIN_D0);
   delay_ms(8000);
}

//******************************************************************************
//                      HAVE *ALL* THE CODES!!!         
//******************************************************************************
//                      CHECKS COMMS WITH MODEM
int1 Check_COM()
{
   counter_read=0;            // Reset buffer counter
   fprintf(GSM,"AT\r");      // Send Attention Command
   //fprintf(RS232,"AT: %s\n", Receive_String);
PRINT_BUFFER();
   delay_ms(500);   
   counter_read=0;            // Reset buffer counter
   return(String_search(OK));   // Check for OK response
}
//______________________________________________________________________________
//
//                      REGISTER TO NETWORK
int1 SET_CREG()
{
   counter_read=0;               // Reset buffer counter
   fprintf(GSM,"AT+CREG=1\r");      // Register to Network
PRINT_BUFFER();
   //fprintf(RS232,"AT+CREG=1:  %s\n", Receive_String);
   delay_ms(500);   
   counter_read=0;               // Reset buffer counter
   return(STRING_SEARCH(OK));      // Check for OK response
}
//______________________________________________________________________________
//
//                      Are WE REGISTER TO NETWORK
int1 ARE_WE_SET_CREG()
{
   counter_read=0;               // Reset buffer counter
   fprintf(GSM,"AT+CREG?\r");      // Register to Network
   //fprintf(RS232,"AT+CREG?: %s\n", Receive_String);
PRINT_BUFFER();
   delay_ms(500);   
   counter_read=0;               // Reset buffer counter
   return(STRING_SEARCH(OK));      // Check for OK response
}

//______________________________________________________________________________
//
//                      SET MODEM TO TXT MODE
int1 SET_PDU()
{
   counter_read=0;               // Reset buffer counter
   fprintf(GSM,"AT+CMGF=1\r");      // Set modem to TXT mode
   //fprintf(RS232,"AT+CMGFG?: %s\n", Receive_String);
PRINT_BUFFER();
   delay_ms(500);   
   counter_read=0;               // Reset buffer counter
   return(STRING_SEARCH(OK));      // Check for OK response
}
//______________________________________________________________________________
//
//                     SET MESSAGE STORAGE
int1 SET_MEM()
{
   counter_read=0;                           // Reset buffer counter
   fprintf(GSM,"AT+CPMS=\"SM\",\"SM\",\"SM\"\r");   // Store in SIM Card
   //fprintf(RS232,"AT+CPMS?: %s\n", Receive_String);
PRINT_BUFFER();
   delay_ms(500);   
   counter_read=0;                           // Reset buffer counter
   return(STRING_SEARCH(OK));                  // Check for OK response
}
//______________________________________________________________________________
//
//                     SET NEW SMS ALERT MSG
int1 SET_CNMI()
{
   counter_read=0;                  // Reset buffer counter
   fprintf(GSM,"AT+CNMI=2,1,2,0,0\r");   //text part of the command.
   //fprintf(RS232,"AT+CNMI?: %s\n", Receive_String);
PRINT_BUFFER();
   delay_ms(500);   
   counter_read=0;                  // Reset buffer counter
   return(STRING_SEARCH(OK));         // Check for OK response
}
//______________________________________________________________________________

//______________________________________________________________________________
//
//                     LOADS SMS INTO BUFFER
int1 READ_SMS(int index)            // index' is the memory address/location
{
   counter_read=0;                  // Reset buffer counter
   fprintf(GSM,"AT+CMGR=%d\r",index);   // Send Read SMS command
   //fprintf(RS232,"AT+CMGR?: %s\n", Receive_String);
PRINT_BUFFER();
   delay_ms(500);   
   counter_read=0;                  // Reset buffer counter
   if(STRING_SEARCH(OK))            // Check for OK response
      return(1);                  //           OR
   if(STRING_SEARCH(ERROR))            // Check for ERROR response
      return(0);
}
//______________________________________________________________________________
//
//                     DELETES SMS FROM MODEM
int1 DEL_SMS(int index)               // index' is the memory address/location
{
   fprintf(GSM,"AT+QMGDA=6\r");   // Send Delete ALL SMS command

   counter_read=0;                  // Reset buffer counter
   fprintf(GSM,"AT+CMGD=%d\r",index);   // Send Delete SMS command
   //fprintf(RS232,"AT+CMGD?: %s\n", Receive_String);

   delay_ms(500);   
   counter_read=0;                  // Reset buffer counter
   if(STRING_SEARCH(OK))            // Check for OK response
      return(1);                  //           OR
   if(STRING_SEARCH(ERROR))            // Check for ERROR response
      return(0);
}
//______________________________________________________________________________
//
//                           SEND SMS POWER1
void SEND_SMS_POWER1()
{
   counter_read=0;
   fprintf(GSM,"AT+CMGS= \"%s\"\r",tel_power1);   // send command and cel #   
   delay_ms(500);                           // Delay long enough for modem response
   fprintf(GSM,"Vriezer POWER failed!!\n\r");      // Text to reply
   putchar(0x1A);                           // send Ctrl-z
   delay_ms(500);   
}
//______________________________________________________________________________
//
//                           SEND SMS POWER2
void SEND_SMS_POWER2()
{
   counter_read=0;
   fprintf(GSM,"AT+CMGS= \"%s\"\r",tel_power2);   // send command and cel #   
   delay_ms(500);                           // Delay long enough for modem response
   fprintf(GSM,"Vriezer POWER failed!!\n\r");      // Text to reply
   putchar(0x1A);                           // send Ctrl-z
   delay_ms(500);   
}
//______________________________________________________________________________
//
//                           SEND SMS TEMP1
void SEND_SMS_TEMP1()
{
   counter_read=0;
   fprintf(GSM,"AT+CMGS= \"%s\"\r",tel_temp1);      // send command and cel #   
   delay_ms(500);                           // Delay long enough for modem response
   fprintf(GSM,"Vriezer Temp too high!!!\n\r");   // Text to reply
   putchar(0x1A);                           // send Ctrl-z
   delay_ms(500);   
}
//______________________________________________________________________________
//
//                           SEND SMS TEMP2
void SEND_SMS_TEMP2()
{
   counter_read=0;
   fprintf(GSM,"AT+CMGS= \"%s\"\r",tel_temp2);      // send command and cel #   
   delay_ms(500);                           // Delay long enough for modem response
   fprintf(GSM,"Vriezer Temp too high!!!\n\r");   // Text to reply
   putchar(0x1A);                           // send Ctrl-z
   delay_ms(500);   
}
//______________________________________________________________________________
//
//                           SEND SMS INFO
void SEND_SMS_INFO()
{
   counter_read=0;
   fprintf(GSM,"AT+CMGS= \"%s\"\r",tel_info);      // send command and cel #   
   delay_ms(500);                           // Delay long enough for modem response
   fprintf(GSM,"Vriezer Temp too high!!!\n\r");   // Text to reply
   putchar(0x1A);                           // send Ctrl-z
   delay_ms(500);   
}
//______________________________________________________________________________
//
//               SEARCHES FOR A SPECIFIC STRING IN BUFFER
int1 STRING_SEARCH(int index)                  // index' is Strings[index][SIZE_COMMAND]
{                                       // See defines at top.
   CMD_LOAD(index);                        // Loads into temp array the string to be found
      if(STRSTR(Receive_String,Command)!=NULL)   // Find String or Command in main Buffer
      return(1);                           // Return 1 if found
   else
      return(0);                           // Return 0 if not found.
}
//______________________________________________________________________________
//
//               LOADS TO TEMP ARRAY THE SEARCHABLE STRING
void CMD_LOAD(int index)
{
   int var=0;                                       // temp index for array
   memset(Command,NULL,SIZE_COMMAND);                     // Reset data array index
      while((Strings[index][var]!=NULL)&&(var<SIZE_COMMAND))   // Copy data from main "Strings" to commparing array.
      {
      Command[var]=Strings[index][var];                     // Copy into temp array the strings from Main Database
         var++;                                       // Up index
      }
}
//______________________________________________________________________________
//
//               SEARCHES TRHOUGH ALL POSSIBLE COMMANDS
int GET_SMS_COMMAND()
{
   if(STRING_SEARCH(TEMP1)==1)return(TEMP1);   // Using string_search() goes through
   else                                 // all user defined commands.

   if(STRING_SEARCH(TEMP2)==1)return(TEMP2);   // Using string_search() goes through
   else                                 // all user defined commands.

   if(STRING_SEARCH(ALARM)==1)return(ALARM);
   else

   if(STRING_SEARCH(POWER1)==1)return(POWER1);
   else

   if(STRING_SEARCH(POWER2)==1)return(POWER2);
   else

   if(STRING_SEARCH(INFO)==1)return(INFO);
   else

   return(0);                           // returns zero if nothing found
}
//______________________________________________________________________________
//
//                     PRINT SERIAL BUFFER
void PRINT_BUFFER()
{
   int var=0;                                 // Temp data array index
   while(var<SIZE_BUFFER)                        // print all data array
   {
      fprintf(RS232,"%c-%u, ",Receive_String[var],var);   // print in ASCII content and index
      var++;                                 // Up index
   }
   fprintf(RS232,"\r\n");                        // Send return & new line
}
//______________________________________________________________________________
//
//                     CLEAR SERIAL BUFFER
void CLEAR_BUFFER()
{
   memset(Receive_String,NULL,SIZE_BUFFER);   // Set all elements to NULL
   counter_read=0;                     // Reset index
}
//______________________________________________________________________________
//
//                         LIMITED DELAY
int1 DELAY(int Delay_ctr)
{
   counter_read=0;                     // Reset buffer counter
   while((counter_read==0)&&(Delay_ctr>0))   // stay here until modem responds (X Seconds is arbitrary)
   {                             
         delay_ms(1000);                     
      Delay_ctr--;
   }
   if((counter_read==0)&&(Delay_ctr==0))
   return(1);
   if((counter_read==0)&&(Delay_ctr>0))
   return(0);           
}
//______________________________________________________________________________
//
//                  Get the Temperature setting
//                  and store it in the EEPROM at address: 0x50
void get_alarm_temp()
{
   char delimiter[2];
   char *ptr_GSM;
   char param11[14];
   int8 stringlengte;
   int8 stringlengte_max;
   int8 i = 0,p = 0;
   char Receive_Message[20];

   stringlengte_max = strlen(Receive_String);// op stringlengte(max) - 16 begint onze string
   stringlengte = stringlengte_max - 10;
   for(i = stringlengte;i < (stringlengte+3);i++)
   {
      Receive_Message[p] = Receive_String[i];
      p++;
   }
   alarm_temp = atol(Receive_Message);
   write_ext_eeprom(0x50,(alarm_temp));// start addres is 0x50
   delay_ms(10);
}

//______________________________________________________________________________
//
//                        Get the phone number to send the Temperature error
//                  and store it in the EEPROM at address: 0x20...0x29
void get_temp_number()
{
   char delimiter[2];
   char *ptr_GSM;
   char param1[14];
   int8 stringlengte;
   int8 stringlengte_max;
   int8 i = 0;
   int teller = 0;
   int eeprom_inhoud;
   char Receive_Message[20];

   stringlengte_max = strlen(Receive_String);// op stringlengte(max) - 28 begint onze string
   stringlengte = stringlengte_max - 28;
   for(stringlengte;stringlengte < stringlengte_max;stringlengte++)
   {
      Receive_Message[i] = Receive_String[stringlengte];
      i++;
   }

   strcpy(delimiter," ");
   ptr_GSM = strtok(Receive_Message, delimiter);
   ptr_GSM = strtok(0,delimiter);
   strcpy(param1,ptr_GSM);///hier is telefoonnummer bekent
   fprintf(RS232,"\Param1: %s\n",param1);   //Hier het telefoonnummer eruit hengelen
   strcpy(tel_temp1,param1);
   fprintf(RS232,"\Tel_temp: %s\n",tel_temp1);   //Hier het telefoonnummer eruit hengelen
   tel_temp1[0] ='0';
   tel_temp1[10] ='\0';

   for(teller = 0;teller <0x0A; teller++)
   {
      write_ext_eeprom((0x20+teller),(tel_temp1[teller]-48));// start addres is 0x20 ascii to hex is -48
   }
   
   for(teller = 0; teller < 0x0A;teller++)//naar RS232 het ontvangen tel nummer
   {
      eeprom_inhoud = read_ext_eeprom((0x20+teller));
      fprintf(RS232,"EEPROM inhoud %d = %d\n",teller,eeprom_inhoud);
      delay_ms(500);
   }
}

//______________________________________________________________________________
//
//                        Get the phone number to send the Temperature error
//                  and store it in the EEPROM at address: 0x40...0x49
void get_temp2_number()
{
   char delimiter[2];
   char *ptr_GSM;
   char param1[14];
   int8 stringlengte;
   int8 stringlengte_max;
   int8 i = 0;
   int teller = 0;
   int eeprom_inhoud;
   char Receive_Message[20];

   stringlengte_max = strlen(Receive_String);// op stringlengte(max) - 28 begint onze string
   stringlengte = stringlengte_max - 28;
   for(stringlengte;stringlengte < stringlengte_max;stringlengte++)
   {
      Receive_Message[i] = Receive_String[stringlengte];
      i++;
   }

   strcpy(delimiter," ");
   ptr_GSM = strtok(Receive_Message, delimiter);
   ptr_GSM = strtok(0,delimiter);
   strcpy(param1,ptr_GSM);///hier is telefoonnummer bekent
   fprintf(RS232,"\Param1: %s\n",param1);   //Hier het telefoonnummer eruit hengelen
   strcpy(tel_temp2,param1);
   fprintf(RS232,"\Tel_temp: %s\n",tel_temp2);   //Hier het telefoonnummer eruit hengelen
   tel_temp2[0] ='0';
   tel_temp2[10] ='\0';

   for(teller = 0;teller <0x0A; teller++)
   {
      write_ext_eeprom((0x40+teller),(tel_temp2[teller]-48));// start addres is 0x40 ascii to hex is -48
   }
   
   for(teller = 0; teller < 0x0A;teller++)//naar RS232 het ontvangen tel nummer
   {
      eeprom_inhoud = read_ext_eeprom((0x40+teller));
      fprintf(RS232,"EEPROM inhoud %d = %d\n",teller,eeprom_inhoud);
      delay_ms(500);
   }
}
//______________________________________________________________________________
//
//                  Get the phone number to send the Power fail error
//                  and store it in the EEPROM at address: 0x30...0x39
void get_power_number()
{
   char delimiter[2];
   char *ptr_GSM;
   char param12[14];
   int8 stringlengte;
   int8 stringlengte_max;
   int8 i = 0;
   int teller = 0;
   int eeprom_inhoud;
   char Receive_Message[20];
   char position_string;

   strcpy(delimiter," ");

   position_string = strstr(Receive_String,Command);
   fprintf(RS232,"Positie in string: %s",position_string);
   ptr_GSM = strtok(position_string, delimiter);
   ptr_GSM = strtok(0,delimiter);
   strcpy(tel_power1,ptr_GSM);                  ///hier is telefoonnummer bekent
   fprintf(RS232,"\Tel_power: %s\n",tel_power1);   //Hier het telefoonnummer eruit hengelen
   strcpy(param12,tel_power1);
   tel_power1[0]='0';
   tel_power1[10] ='\0';

   for(teller = 0;teller <0x0A; teller++)
   {
      write_ext_eeprom((0x30+teller),(tel_power1[teller]-48));// start addres is 0x30 ascii to hex is -48
   }
   
   for(teller = 0; teller < 0x0A;teller++)//naar RS232 het ontvangen tel nummer
   {
      eeprom_inhoud = read_ext_eeprom((0x30+teller));
      fprintf(RS232,"EEPROM inhoud %d = %d\n",teller,eeprom_inhoud);
      delay_ms(500);
   }

}
//______________________________________________________________________________
//
//                  Get the phone number to send the Power fail error
//                  and store it in the EEPROM at address: 0x60...0x69
void get_power2_number()
{
   char delimiter[2];
   char *ptr_GSM;
   char param12[14];
   int8 stringlengte;
   int8 stringlengte_max;
   int8 i = 0;
   int teller = 0;
   int eeprom_inhoud;
   char Receive_Message[20];
   char position_string;

   strcpy(delimiter," ");

   position_string = strstr(Receive_String,Command);
   fprintf(RS232,"Positie in string: %s",position_string);
   ptr_GSM = strtok(position_string, delimiter);
   ptr_GSM = strtok(0,delimiter);
   strcpy(tel_power2,ptr_GSM);                  ///hier is telefoonnummer bekent
   fprintf(RS232,"\Tel_power: %s\n",tel_power2);   //Hier het telefoonnummer eruit hengelen
   strcpy(param12,tel_power2);
   tel_power2[0]='0';
   tel_power2[10] ='\0';

   for(teller = 0;teller <0x0A; teller++)
   {
      write_ext_eeprom((0x60+teller),(tel_power2[teller]-48));// start addres is 0x60 ascii to hex is -48
   }
   
   for(teller = 0; teller < 0x0A;teller++)//naar RS232 het ontvangen tel nummer
   {
      eeprom_inhoud = read_ext_eeprom((0x30+teller));
      fprintf(RS232,"EEPROM inhoud %d = %d\n",teller,eeprom_inhoud);
      delay_ms(500);
   }

}
//______________________________________________________________________________________
//
//   Reply to the phone number who send the info string and send the info to that number
//   Info is :   Temp1 number
//            Temp2 number
//            Power1 number
//            Power2 number
//            Alarm Temp
//                  
void send_info_to_sender()
{
   char delimiter[4];
   char *ptr_GSM;
   char param12[14];
   int8 stringlengte;
   int8 stringlengte_max;
   int8 i = 0;
   int teller = 0;
   int eeprom_inhoud;
   char Receive_Message[20];
   char position_string[];

   strcpy(delimiter,"+31");

   position_string = strstr(Receive_String,delimiter);
   //ptr_GSM = strtok(position_string, delimiter);
   ptr_GSM = strtok(0,delimiter);
   strcpy(tel_info,ptr_GSM);                  ///hier is telefoonnummer bekent
   fprintf(RS232,"\Tel_info: %s\n",tel_info);   //Hier het telefoonnummer eruit hengelen
   strcpy(param12,tel_info);
   tel_info[0]='0';
   tel_info[10] ='\0';
}
//______________________________________________________________________________
//
//                           SEND SMS
void SEND_SMS_RUNNING()
{
char mobie[] = "06xxxxxxxx";

   counter_read=0;
    fprintf(GSM,"AT+CMGS= \"%s\"\r",mobie);         // send command and cel #   
   delay_ms(1000);                           // Delay long enough for modem response
   fprintf(GSM,"Vriezer monitor RUNNING!!!\n\r");   // Text to reply
   putchar(0x1A);                           // send Ctrl-z
   DELAY(20);                              // Delay a maximum of X seconds
}
hmmpic



Joined: 09 Mar 2010
Posts: 314
Location: Denmark

View user's profile Send private message

PostPosted: Fri May 20, 2022 5:30 am     Reply with quote

My suggestion...

Maybe for testing it can work, but not in any production.
All the code is based on delay() and no change to know what is going on.
The code doesn't handle CREG right, 1 means reg local net, 5 is ok too, it is reg for roaming. Ex. simcom can be confused and return a 5 where it is a 1. Or you can plug a simcard there must be roaming, 2 is searching....The code is not handling that.
When sending an SMS it can take up to 90 seconds, most is done <6sec, and the module is not ready for new AT commands. In best case it ignores them, worst case they all be processed after it returns from the sending. Therefore code with delay() is no go. From my view you must make a more stable way to deal with all this.
Do a receive buffer and do all your lookup from that.
It is also important to pay attention to the STATUS pin.
....
Jody



Joined: 08 Sep 2006
Posts: 182

View user's profile Send private message Send e-mail

GSM M95 Quectel not sending/receiving SMS
PostPosted: Tue May 24, 2022 3:02 am     Reply with quote

Oke have did some testing:

Just connect a USB-? SERIAL to the module.
And can communicate with the module and here is the communication I have done with the module. It seems to be working but it doesn't want to connect to the network.
Code:

AT
   OK
AT
   OK
AT
   OK
ATE0
   OK
AT+IFC=2,2
   OK
AT+CMGF=1
   OK
AT+CREG=1
   OK
AT+CREG?
   +CREG: 1,2
   OK
AT+CPIN?
   +CPIN: READY
   OK
AT+CSQ
   +CSQ: 28,0
   OK
AT+CREG?
   +CREG: 1,2
   OK
hmmpic



Joined: 09 Mar 2010
Posts: 314
Location: Denmark

View user's profile Send private message

PostPosted: Tue May 24, 2022 9:30 am     Reply with quote

Module have ok signal, and searching for net (creg 1,2).
When searching for net, it is your provider there have the control, you can ask them why your simcard is not getting connected. If using 2G the module will draw about 2,5Amp for the registering to take place. If power drop module typically reset itself...
Display posts from previous:   
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion All times are GMT - 6 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group