Unable to connect Sim7600x 4g hat to Arduino MEGA 2560

I have a Waveshare Sim7600X 4G Hat with the Sim7600A-H on it and I am trying to use it with an Arduino Mega 2560 (I think it's an off brand one, the one that Im using is pictured below) via UART. I have tried both this


and this
(Sorry I am a new user and it would not let me post with two images. config 2 is the same as the first however instead of connecting to the side header tx and rx I am connecting to the Pi header, the ground wire stays where it is, also imaged is the 4g hat with a Sim7600G-H, mine is the same board just with a Sim7600A-H)

wire setups, I have kept the small yellow jumpers on segment B (where they are in the images) as in the documentation this one seemed to simply forward the uart to the pi header pins. I have also tried simply removing these two jumpers in the first configuration.
Using an oscilloscope I have been able to see that the arduino is Txing what I assume is the correct message (at the very least it is txing) but I am unable to see anything coming back, I think something is coming back though as it is returning a backwards question mark sometimes, idk it is very odd, here is a picture of what Ive been getting back
(1 media thing again, here is the output in text)

15:37:58.676 -> Starting up...
15:37:58.777 -> AT Command:
15:37:58.777 -> AT
15:38:03.786 -> 
15:38:03.886 -> AT Command:
15:38:03.886 -> AT
15:38:08.855 -> 
15:38:09.972 -> AT Command:
15:38:09.972 -> AT
15:38:10.005 -> resp: ⸮
15:38:14.953 -> 
15:38:16.077 -> AT Command:
15:38:16.077 -> AT
15:38:16.077 -> resp: ⸮
15:38:16.111 -> resp: ⸮
15:38:21.054 -> 
15:38:22.164 -> AT Command:
15:38:22.198 -> AT
15:38:22.198 -> resp: ⸮
15:38:27.167 -> 
15:38:28.284 -> AT Command:
15:38:28.284 -> AT
15:38:33.261 -> 

for code I have been testing with 2 things the first is Ive been using a library Waveshare made and I have edited as shown below.

Header for Library

/**
*  @filename   :   Waveshare_SIM7600.h
*  @brief      :   Implements for sim7600 library
*  @author     :   Kaloha from Waveshare
*
*  Copyright (C) Waveshare     April 27 2018
*  http://www.waveshare.com / http://www.waveshare.net
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documnetation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to  whom the Software is
* furished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,

* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/

#ifndef Waveshare_sim7x00_h
#define Waveshare_sim7x00_h

#include <stdlib.h>
#if ARDUINO >= 100
  #include <Arduino.h>
#else
  #include <wiring.h>
#endif

//#define unsigned int uint8_t

/* Sim7x00 Class */
class Sim7x00 {

public:
  // Pin definition
  const static int powerkey = 2;
  int userkey;

  Sim7x00();
  ~Sim7x00();

  // SIM query
  void PowerOn();

  // Phone calls
  //void PhoneCall(const char* PhoneNumber);

  // SMS sending and receiving message 
  bool SendingShortMessage(const char* PhoneNumber,const char* Message);
  bool ReceivingShortMessage();


  // Other functions.
  uint8_t sendATcommand(const char* ATcommand, const char* expected_answer, unsigned int timeout);
  //char sendATcommand2(const char* ATcommand, const char* expected_answer1, const char* expected_answer2, unsigned int timeout);
};

extern Sim7x00 sim7600;

#endif

Library File

/**
*  @filename   :   Waveshare_SIM7600.cpp
*  @brief      :   Implements for sim7600 library
*  @author     :   Kaloha from Waveshare
*
*  Copyright (C) Waveshare     April 27 2018
*  http://www.waveshare.com  http://www.waveshare.net
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documnetation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to  whom the Software is
* furished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/

#include "Waveshare_SIM7600.h"

Sim7x00::Sim7x00(){
}

Sim7x00::~Sim7x00(){
}


/**************************Power on Sim7x00**************************/
void Sim7x00::PowerOn(){
   uint8_t answer = 0;

  Serial1.begin(9600);
  Serial.begin(9600);
  Serial.println("Starting up...");
  // checks if the module is started
  answer = sendATcommand("AT", "OK", 5000);
  if (answer == 0)
  {
    //Serial.print("Starting up...\n");
    
    //pinMode(PowerKey, OUTPUT);
    // power on pulse
    //digitalWrite(PowerKey, HIGH);
    //delay(500);
    //digitalWrite(PowerKey, LOW);
    
    // waits for an answer from the module
    while (answer == 0) {     // Send AT every two seconds and wait for the answer
      answer = sendATcommand("AT", "OK", 5000);
	  delay(1000);
    }

  }

  delay(5000);

  while ((sendATcommand("AT+CREG?", "+CREG: 0,1", 500) || sendATcommand("AT+CREG?", "+CREG: 0,5", 500)) == 0)
    delay(500);
}

/**************************SMS sending and receiving message **************************/
//SMS sending short message
bool Sim7x00::SendingShortMessage(const char* PhoneNumber,const char* Message){
  uint8_t answer = 0;
  char aux_string[30];

  //Serial.print("Setting SMS mode...\n");
  sendATcommand("AT+CMGF=1", "OK", 1000);    // sets the SMS mode to text
  //Serial.print("Sending Short Message\n");
    
  sprintf(aux_string,"AT+CMGS=\"%s\"", PhoneNumber);

  answer = sendATcommand(aux_string, ">", 3000);    // send the SMS number
  if (answer == 1)
  {
      Serial.println(Message);
      Serial.write(0x1A);
      answer = sendATcommand("", "OK", 20000);
      if (answer == 1)
      {
          //Serial.print("Sent successfully \n"); 
          return true;   
      }
      else
      {
          //Serial.print("error \n");
          return false;
      }
  }
  else
  {
 //     Serial.print(answer);
      //Serial.print(" error.\n");
      return false;
  }
}

//SMS receiving short message
bool Sim7x00::ReceivingShortMessage(){
  uint8_t answer = 0;
  int i = 0;
  char RecMessage[200];

  Serial.print("Setting SMS mode...\n");
    sendATcommand("AT+CMGF=1", "OK", 1000);    // sets the SMS mode to text
  sendATcommand("AT+CPMS=\"SM\",\"SM\",\"SM\"", "OK", 1000);    // selects the memory

    answer = sendATcommand("AT+CMGR=1", "+CMGR:", 2000);    // reads the first SMS

  if (answer == 1)
    {
        answer = 0;
        while(Serial.available() == 0);
        // this loop reads the data of the SMS
        do{
            // if there are data in the UART input buffer, reads it and checks for the asnwer
            if(Serial.available() > 0){    
                RecMessage[i] = Serial.read();
                i++;
                // check if the desired answer (OK) is in the response of the module
                if (strstr(RecMessage, "OK") != NULL)    
                {
                    answer = 1;
                }
            }
        }while(answer == 0);    // Waits for the asnwer with time out
        
 //       RecMessage[i] = '\0';
        
        Serial.print(RecMessage); 
        Serial.print("\n");      
        
    }
    else
    {
        Serial.print(answer);
        Serial.print(" error.\n");
    return false;
    }

  return true;
}
/**************************Other functions**************************/
uint8_t Sim7x00::sendATcommand(const char* ATcommand, const char* expected_answer, unsigned int timeout) {

    uint8_t x=0,  answer=0;
    char response[100];
    unsigned long previous;

    memset(response, '\0', 100);    // Initialize the string
    
    delay(100);
    
    while( Serial1.available() > 0) Serial1.read();    // Clean the input buffer
    
    Serial1.println(ATcommand);    // Send the AT command 
    Serial.println("AT Command:");
    Serial.println(ATcommand);

    x = 0;
    previous = millis();

    // this loop waits for the answer
    do{
        if(Serial1.available() > 0){    
            // if there are data in the UART input buffer, reads it and checks for the asnwer
            response[x] = Serial1.read();  
            Serial.print("resp: ");    
            Serial.println(response[x]);
            x++;
            // check if the desired answer  is in the response of the module
            if (strstr(response, expected_answer) != NULL)    
            {
                answer = 1;
            }
        }
         // Waits for the asnwer with time out
    }while((answer == 0) && ((millis() - previous) < timeout));
    
    Serial.print("\n");   

    return answer;
}

Sim7x00 sim7600 = Sim7x00();

Arduino Code

/**
*  @filename   :   SMS.cpp
*  @brief      :   SIM7600CE 4G HAT demo
*  @author     :   Kaloha from Waveshare
*
*  Copyright (C) Waveshare     April 27 2018
*  http://www.waveshare.com / http://www.waveshare.net
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documnetation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to  whom the Software is
* furished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/

#include "Waveshare_SIM7600.h"

char phone_number[] = "**********";      //********** change it to the phone number you want to call
char text_message[] = "test";      //

void setup() {
  Serial.begin(9600);
  Serial1.begin(9600);
  sim7600.PowerOn();
  Serial.println("made it");
  //printf("Sending Short Message Test:\n");
  //sim7600.SendingShortMessage(phone_number, text_message);
  //printf("Message sent, check phone");

}

I have also been testing with a more simple file that might not work I was just going for something that I thought would be the simplest possible setup, that code is below.

void setup() {
  Serial.begin(9600);
  Serial1.begin(9600);
}

void loop() {
  if (Serial.available()) {
    Serial1.print(Serial.read());
    Serial.print(Serial.read());
  }
  if(Serial1.available()) {
    Serial.print(Serial.read());
  }
}

again though like I said this may be dumb and not useful for testing I dont know.

Please if anyone has had any experience with this hardware or something like it I need help, I do not know what I am doing wrong. If you need anymore information about the hardware or software I am 100% willing and able to provide.

Thank you <3

How are you powering the SIM7600 ?

Try using a different baud rate 115200 is often the default.

1 Like

Also - the following is wrong...

1 Like

I am powering the sim7600 with the micro usb to computer, I also have sent 3.3v to the pin on the yellow header (and connected ground) using an analog discovery 2. I have tried both 115200 and 9600, and before I did each I used putty and the command "at+ipr=(rate)" to set the sim's baud rate. I have also run tests with it set to 0 with sets the sim7600 to auto baud. also yeah Im dumb I edited the code. I have the second serial print in the first if though because I wanted it to log what I sent on the serial monitor as it wasn't doing that manually, is this a setting I need to turn on? thank you so much for your reply

I haven't used that Hat before, so not sure about the headers.

When you use putty do you get valid responses from the 7600 ?

When you send AT+IPR? and AT+IPREX? what do you get?

yes when I use putty I can use at commands to do everything I want to do, I am not at my desk rn so I cant test, when Ive done the at+ipr= something it returns ok

Ok... that's something.

If you can confirm what AT+IPR? and AT+IPREX? this will at least confirm what it thinks the baud rate is. Some modules don't support auto baud.

IPREX keeps it's value after power loss.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.