GSM 2 shield not connecting to the network

Hi! I’m working a project using the Arduino Uno and the GSM 2 shield with an integrated antenna (M10 core), and I’ve been following the steps on this tutorial to get started and to connect my device to the GSM network:

(This tutorial refers to a Canadian network, and while I’m not Canadian I used the instructions and chose the correct band for the SIM card I used)

When running the BandManagement example on my program, it doesn’t seem to recognize the current band my device is on, and won’t let me change to a different band. I followed the suggestions in the tutorial, but nothing seems to be working.

BandManagement example:

#include <GSM.h>

// initialize the library instance
GSMBand band;

void setup() {
  // initialize serial communications and wait for port to open:
  while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only

  // Beginning the band manager restarts the modem
  Serial.println("Restarting modem...");
  Serial.println("Modem restarted.");


void loop() {
  // Get current band
  String bandName = band.getBand(); // Get and print band name
  Serial.print("Current band:");
  Serial.println("Want to change the band you’re on?");
  String newBandName;
  newBandName = askUser();
  // Tell the user what we are about to do…
  Serial.print("\nConfiguring band ");
  // Change the band
  boolean operationSuccess;
  operationSuccess = band.setBand(newBandName);
  // Tell the user if the operation was OK
  if (operationSuccess) {
  } else {
    Serial.println("Error while changing band");

  if (operationSuccess) {
    while (true);

// This function offers the user different options
// through the Serial interface
// The user selects one
String askUser() {
  String newBand;
  Serial.println("Select band:");
  // Print the different options
  Serial.println("1 : E-GSM(900)");
  Serial.println("2 : DCS(1800)");
  Serial.println("3 : PCS(1900)");
  Serial.println("4 : E-GSM(900)+DCS(1800) ex: Europe");
  Serial.println("5 : GSM(850)+PCS(1900) Ex: USA, South Am.");
  Serial.println("6 : GSM(850)+E-GSM(900)+DCS(1800)+PCS(1900)");

  // Empty the incoming buffer
  while (Serial.available()) {;

  // Wait for an answer, just look at the first character
  while (!Serial.available());
  char c =;
  if (c == '1') {
    newBand = GSM_MODE_EGSM;
  } else if (c == '2') {
    newBand = GSM_MODE_DCS;
  } else if (c == '3') {
    newBand = GSM_MODE_PCS;
  } else if (c == '4') {
    newBand = GSM_MODE_EGSM_DCS;
  } else if (c == '5') {
    newBand = GSM_MODE_GSM850_PCS;
  } else if (c == '6') {
    newBand = GSM_MODE_GSM850_EGSM_DCS_PCS;
  } else {
    newBand = "GSM_MODE_UNDEFINED";
  return newBand;

This is what the serial monitor shows:

Restarting modem...
Modem restarted.
Unrecognized modem answer:
Current band:
Want to change the band you’re on?
Select band:
1 : E-GSM(900)
2 : DCS(1800)
3 : PCS(1900)
4 : E-GSM(900)+DCS(1800) ex: Europe
5 : GSM(850)+PCS(1900) Ex: USA, South Am.
6 : GSM(850)+E-GSM(900)+DCS(1800)+PCS(1900)

Configuring band DCS_MODE
Error while changing band

I made sure to check every single option the program offers but it still didn’t work.

Also, when trying to use the GsmScanNetworks example, I get an error text:

GsmScanNetworks example:

// libraries
#include <GSM.h>

// PIN Number
#define PINNUMBER "1234"

// initialize the library instance
GSM gsmAccess;     // include a 'true' parameter to enable debugging
GSMScanner scannerNetworks;
GSMModem modemTest;

// Save data variables
String IMEI = "";

// serial monitor result messages
String errortext = "ERROR";

void setup() {
  // initialize serial communications and wait for port to open:
  while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only

  Serial.println("GSM networks scanner");

  // connection state
  boolean notConnected = true;

  // Start GSM shield
  // If your SIM has PIN, pass it as a parameter of begin() in quotes
  while (notConnected) {
    if (gsmAccess.begin("1234") == GSM_READY) {
      notConnected = false;
    } else {
      Serial.println("Not connected");

  // get modem parameters
  // IMEI, modem unique identifier
  Serial.print("Modem IMEI: ");
  IMEI = modemTest.getIMEI();
  IMEI.replace("\n", "");
  if (IMEI != NULL) {

void loop() {
  // scan for existing networks, displays a list of networks
  Serial.println("Scanning available networks. May take some seconds.");

  // currently connected carrier
  Serial.print("Current carrier: ");

  // returns strength and ber
  // signal strength in 0-31 scale. 31 means power > 51dBm
  // BER is the Bit Error Rate. 0-7 scale. 99=not detectable
  Serial.print("Signal Strength: ");
  Serial.println(" [0-31]");


Error text:

0 9>AT%13%%13%%10%OK%13%%10%
9 39>AT+CPIN=1234%13%%13%%10%+CME ERROR: 3%13%%10%

Here's what I found about the CME error:
CME error 3: operation not allowed
CME error 10: SIM not inserted
CME error 13: SIM failure

I think I might be using the wrong type of SIM card, but I don't know what kind of SIM card should be used in this type of shield. I also tried using an outside battery since I read that the USB cord might not be enough, but the results are still the same. Any suggestions will be appreciated, thank you for reading :slight_smile:

It says it works on 2G network.
Which network provider SIM are you using?

Cellcom, I'm from israel

If you are certain that Cellcom still has 2G, perhaps you can contact the writer of that tutorial.

In many countries, the cell service companies are shutting down 2G.
AT&T in USA shut it down in 2016, but T-mobile still has it.