Obtendo os contatos / armazenando contatos no cartão SIM

11

Eu tenho o escudo GSM e existem maneiras de obter os contatos armazenados no cartão SIM? Parece que a biblioteca GSM não suporta a gravação / leitura de dados do cartão SIM?

Meu objetivo é armazenar o número de telefone do cartão SIM e algumas variáveis ​​no próprio cartão SIM, assim, eu não precisaria alterar o programa periodicamente.

Tudo o que preciso fazer é inserir todas as variáveis ​​no cartão SIM por meio de qualquer telefone celular (talvez armazenando as variáveis ​​como contatos, pois a função da agenda telefônica deve ser muito comum nos telefones).

MW_hk
fonte

Respostas:

6

O que você pesquisou até agora? Seguindo o link que você forneceu para o escudo, cerca da terceira linha da descrição é uma referência ao AT Command Set usado pelo chip.

Eu apenas fiz algumas pesquisas rápidas e descobri:

2.2.4 ATD><n> Originar chamada telefônica para número na memória

3.2.26 AT+CPBF Localizar entradas da lista telefônica

3.2.27 AT+CPBR Leia as entradas atuais da lista telefônica

3.2.28 AT+CPBS Selecionar armazenamento em memória do catálogo telefônico

provavelmente um bom lugar para começar.

Madivad
fonte
1

Obrigado a @Madivad pela inspiração do comando AT. Eu não estou muito familiarizado com GSM e Arduino. Mas de qualquer maneira, o abaixo funcionou para mim.

Créditos para @Madivad e pessoas do fórum do arduino.

#include <GSM.h>
GSM gsmAccess(true);
int sizer = 200;
char myNumber[200];
int timeout = 5000; // in milli seconds

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

  boolean notConnected = true;

  Serial.println("Connecting to the GSM network");

  while(notConnected){
    if(gsmAccess.begin() == GSM_READY) // Note: I do not require PIN #
      notConnected = false;
    else {
      Serial.println("Not connected, trying again");
      delay(1000);
    }
  }

  Serial.println("Connected");

  theGSM3ShieldV1ModemCore.println("AT+CPBS=\"SM\"");  
  int start1 = millis();   
  while((millis() - start1) < timeout){
    Serial.print(theGSM3ShieldV1ModemCore.theBuffer().read());
  }   
  Serial.print("Set to look at SIM card storage");

  // search for contact name "test"
  theGSM3ShieldV1ModemCore.println("AT+CPBF=\"test\"");  
  start1 = 0;
  start1 = millis();   
  while((millis() - start1) < timeout && !theGSM3ShieldV1ModemCore.theBuffer().extractSubstring(",\"", "\",", myNumber, sizer)){
    Serial.print(theGSM3ShieldV1ModemCore.theBuffer().read());
  }   
  Serial.print("Got contact number");

 // print out the phone of "test"
 Serial.println(myNumber);

}

void loop()
{

}
MW_hk
fonte